@@ -23,8 +23,9 @@ namespace Synapse.Operator.Services;
2323/// <param name="controllerOptions">The service used to access the current <see cref="IOptions{TOptions}"/></param>
2424/// <param name="repository">The service used to manage <see cref="IResource"/>s</param>
2525/// <param name="operatorController">The service used to access the current <see cref="Resources.Operator"/></param>
26+ /// <param name="workflowController">The service used to access all monitored <see cref="Workflow"/>s</param>
2627/// <param name="documents">The <see cref="IRepository"/> used to manage <see cref="Document"/>s</param>
27- public class WorkflowInstanceController ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory , IOptions < ResourceControllerOptions < WorkflowInstance > > controllerOptions , IResourceRepository repository , IOperatorController operatorController , IRepository < Document , string > documents )
28+ public class WorkflowInstanceController ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory , IOptions < ResourceControllerOptions < WorkflowInstance > > controllerOptions , IResourceRepository repository , IOperatorController operatorController , IWorkflowController workflowController , IRepository < Document , string > documents )
2829 : ResourceController < WorkflowInstance > ( loggerFactory , controllerOptions , repository )
2930{
3031
@@ -38,6 +39,11 @@ public class WorkflowInstanceController(IServiceProvider serviceProvider, ILogge
3839 /// </summary>
3940 protected IResourceMonitor < Resources . Operator > Operator => operatorController . Operator ;
4041
42+ /// <summary>
43+ /// Gets a dictionary containing all monitored <see cref="Workflow"/>s
44+ /// </summary>
45+ protected IReadOnlyDictionary < string , Workflow > Workflows => workflowController . Workflows ;
46+
4147 /// <summary>
4248 /// Gets the <see cref="IRepository"/> used to manage <see cref="Document"/>s
4349 /// </summary>
@@ -88,6 +94,8 @@ protected virtual async Task<bool> TryClaimAsync(WorkflowInstance resource, Canc
8894 {
8995 ArgumentNullException . ThrowIfNull ( resource ) ;
9096 if ( resource . Metadata . Labels != null && resource . Metadata . Labels . TryGetValue ( SynapseDefaults . Resources . Labels . Operator , out var operatorQualifiedName ) ) return operatorQualifiedName == this . Operator . Resource . GetQualifiedName ( ) ;
97+ if ( this . Workflows . TryGetValue ( this . GetResourceCacheKey ( resource . Spec . Definition . Name , resource . Spec . Definition . Namespace ) , out var workflow ) && workflow != null
98+ && workflow . Metadata . Labels != null && workflow . Metadata . Labels . TryGetValue ( SynapseDefaults . Resources . Labels . Operator , out operatorQualifiedName ) ) return operatorQualifiedName == this . Operator . Resource . GetQualifiedName ( ) ;
9199 try
92100 {
93101 var originalResource = resource . Clone ( ) ;
@@ -113,6 +121,8 @@ protected virtual async Task<bool> TryReleaseAsync(WorkflowInstance resource, Ca
113121 {
114122 ArgumentNullException . ThrowIfNull ( resource ) ;
115123 if ( resource . Metadata . Labels != null && resource . Metadata . Labels . TryGetValue ( SynapseDefaults . Resources . Labels . Operator , out var operatorQualifiedName ) ) return operatorQualifiedName == this . Operator . Resource . GetQualifiedName ( ) ;
124+ if ( this . Workflows . TryGetValue ( this . GetResourceCacheKey ( resource . Spec . Definition . Name , resource . Spec . Definition . Namespace ) , out var workflow ) && workflow != null
125+ && workflow . Metadata . Labels != null && workflow . Metadata . Labels . TryGetValue ( SynapseDefaults . Resources . Labels . Operator , out operatorQualifiedName ) ) return operatorQualifiedName == this . Operator . Resource . GetQualifiedName ( ) ;
116126 try
117127 {
118128 var originalResource = resource . Clone ( ) ;
0 commit comments