11package io .quarkiverse .flow .internal ;
22
33import java .util .Collection ;
4+ import java .util .LinkedHashMap ;
45import java .util .List ;
56import java .util .Map ;
67import java .util .Optional ;
@@ -39,18 +40,26 @@ public class WorkflowRegistry {
3940 @ Inject
4041 WorkflowApplication app ;
4142
42- private Map <WorkflowDefinitionId , Workflow > agenticCache = new ConcurrentHashMap <>();
43+ private Map <WorkflowDefinitionId , Workflow > descriptorCache = new ConcurrentHashMap <>();
4344
4445 public static WorkflowRegistry current () {
4546 return Arc .container ().instance (WorkflowRegistry .class ).get ();
4647 }
4748
4849 public Collection <Workflow > all () {
49- return app .workflowDefinitions ().values ().stream ().map (WorkflowDefinition ::workflow ).toList ();
50+ Map <WorkflowDefinitionId , Workflow > all = new LinkedHashMap <>(allDefinitionsMap ());
51+ descriptorCache .forEach (all ::putIfAbsent );
52+ return all .values ();
53+ }
54+
55+ private Map <WorkflowDefinitionId , Workflow > allDefinitionsMap () {
56+ Map <WorkflowDefinitionId , Workflow > all = new LinkedHashMap <>();
57+ app .workflowDefinitions ().forEach ((id , definition ) -> all .put (id , definition .workflow ()));
58+ return all ;
5059 }
5160
5261 public int count () {
53- return app . workflowDefinitions ().size ();
62+ return all ().size ();
5463 }
5564
5665 public Optional <WorkflowDefinition > lookup (WorkflowDefinitionId id ) {
@@ -59,17 +68,22 @@ public Optional<WorkflowDefinition> lookup(WorkflowDefinitionId id) {
5968
6069 public Optional <Workflow > lookupDescriptor (WorkflowDefinitionId id ) {
6170 Optional <Workflow > workflow = lookup (id ).map (WorkflowDefinition ::workflow );
62- return workflow .isPresent () ? workflow : Optional .ofNullable (agenticCache .get (id ));
71+ return workflow .isPresent () ? workflow : Optional .ofNullable (descriptorCache .get (id ));
6372 }
6473
6574 public WorkflowDefinition register (Flowable flowable ) {
6675 LOG .info ("Registering workflow {}" , flowable .descriptor ().getDocument ().getName ());
67- return app .workflowDefinition (addFlowableMetadata (flowable ));
76+ Workflow workflow = addFlowableMetadata (flowable );
77+ WorkflowDefinition definition = app .workflowDefinition (workflow );
78+ invalidateCachedDescriptor (definition );
79+ return definition ;
6880 }
6981
7082 public WorkflowDefinition register (Workflow workflow ) {
7183 LOG .info ("Registering workflow {}" , workflow .getDocument ().getName ());
72- return app .workflowDefinition (workflow );
84+ WorkflowDefinition definition = app .workflowDefinition (workflow );
85+ invalidateCachedDescriptor (definition );
86+ return definition ;
7387 }
7488
7589 private Workflow addFlowableMetadata (final Flowable flowable ) {
@@ -98,6 +112,13 @@ void warmUp() {
98112
99113 public void cacheDescriptor (Workflow workflow ) {
100114 LOG .debug ("Caching workflow descriptor for {}" , workflow .getDocument ().getName ());
101- agenticCache .put (WorkflowDefinitionId .of (workflow ), workflow );
115+ descriptorCache .put (WorkflowDefinitionId .of (workflow ), workflow );
116+ }
117+
118+ private void invalidateCachedDescriptor (WorkflowDefinition definition ) {
119+ WorkflowDefinitionId id = definition .id ();
120+ if (descriptorCache .remove (id ) != null ) {
121+ LOG .debug ("Invalidating cached workflow descriptor for {}" , id .name ());
122+ }
102123 }
103124}
0 commit comments