@@ -23,8 +23,9 @@ namespace Synapse.Operator.Services;
23
23
/// <param name="controllerOptions">The service used to access the current <see cref="IOptions{TOptions}"/></param>
24
24
/// <param name="repository">The service used to manage <see cref="IResource"/>s</param>
25
25
/// <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>
26
27
/// <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 )
28
29
: ResourceController < WorkflowInstance > ( loggerFactory , controllerOptions , repository )
29
30
{
30
31
@@ -38,6 +39,11 @@ public class WorkflowInstanceController(IServiceProvider serviceProvider, ILogge
38
39
/// </summary>
39
40
protected IResourceMonitor < Resources . Operator > Operator => operatorController . Operator ;
40
41
42
+ /// <summary>
43
+ /// Gets a dictionary containing all monitored <see cref="Workflow"/>s
44
+ /// </summary>
45
+ protected IReadOnlyDictionary < string , Workflow > Workflows => workflowController . Workflows ;
46
+
41
47
/// <summary>
42
48
/// Gets the <see cref="IRepository"/> used to manage <see cref="Document"/>s
43
49
/// </summary>
@@ -88,6 +94,8 @@ protected virtual async Task<bool> TryClaimAsync(WorkflowInstance resource, Canc
88
94
{
89
95
ArgumentNullException . ThrowIfNull ( resource ) ;
90
96
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 ( ) ;
91
99
try
92
100
{
93
101
var originalResource = resource . Clone ( ) ;
@@ -113,6 +121,8 @@ protected virtual async Task<bool> TryReleaseAsync(WorkflowInstance resource, Ca
113
121
{
114
122
ArgumentNullException . ThrowIfNull ( resource ) ;
115
123
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 ( ) ;
116
126
try
117
127
{
118
128
var originalResource = resource . Clone ( ) ;
0 commit comments