20
20
* =====
21
21
*/
22
22
23
- import com .walmartlabs .concord .db .AbstractDao ;
24
23
import com .walmartlabs .concord .db .MainDB ;
25
- import com .walmartlabs .concord .server .jooq .tables .ProcessQueue ;
26
24
import com .walmartlabs .concord .server .process .queue .ProcessQueueManager ;
27
25
import com .walmartlabs .concord .server .sdk .ProcessKey ;
28
26
import com .walmartlabs .concord .server .sdk .ProcessStatus ;
31
29
32
30
import javax .inject .Inject ;
33
31
import javax .inject .Singleton ;
34
- import java .util .ArrayList ;
35
- import java .util .List ;
36
32
import java .util .Set ;
37
33
import java .util .UUID ;
38
34
39
- import static com .walmartlabs .concord .server .jooq .tables .ProcessQueue .PROCESS_QUEUE ;
40
- import static com .walmartlabs .concord .server .process .waits .ProcessCompletionCondition .CompleteCondition ;
41
-
42
35
/**
43
36
* Handles the processes that are waiting for other processes to finish.
44
37
*/
45
38
@ Singleton
46
39
public class WaitProcessFinishHandler implements ProcessWaitHandler <ProcessCompletionCondition > {
47
40
48
- private final Dao dao ;
49
41
private final ProcessQueueManager processQueueManager ;
50
42
51
43
@ Inject
52
- public WaitProcessFinishHandler (@ MainDB Configuration dbCfg , ProcessQueueManager processQueueManager ) {
53
- this .dao = new Dao (dbCfg );
44
+ public WaitProcessFinishHandler (ProcessQueueManager processQueueManager ) {
54
45
this .processQueueManager = processQueueManager ;
55
46
}
56
47
@@ -62,64 +53,15 @@ public WaitType getType() {
62
53
@ Override
63
54
@ WithTimer
64
55
public Result <ProcessCompletionCondition > process (ProcessKey processKey , ProcessCompletionCondition wait ) {
65
- Set <ProcessStatus > finishedStatuses = wait .finalStatuses ();
66
56
Set <UUID > awaitProcesses = wait .processes ();
67
- if (awaitProcesses .isEmpty ()) {
68
- return Result .resume (wait .resumeEvent ());
69
- }
70
-
71
- Set <UUID > finishedProcesses = dao .findFinished (awaitProcesses , finishedStatuses );
72
- if (finishedProcesses .isEmpty ()) {
57
+ if (!awaitProcesses .isEmpty ()) {
73
58
return Result .of (wait );
74
59
}
75
60
76
- boolean completed = isCompleted (wait .completeCondition (), awaitProcesses , finishedProcesses );
77
- if (completed ) {
78
- if (wait .resumeEvent () != null ) {
79
- return Result .resume (wait .resumeEvent ());
80
- } else {
81
- return Result .action (tx -> processQueueManager .updateExpectedStatus (tx , processKey , ProcessStatus .WAITING , ProcessStatus .ENQUEUED ));
82
- }
83
- }
84
-
85
- List <UUID > processes = new ArrayList <>(awaitProcesses );
86
- processes .removeAll (finishedProcesses );
87
-
88
- return Result .of (
89
- ProcessCompletionCondition .builder ().from (wait )
90
- .processes (processes )
91
- .reason (wait .reason ())
92
- .build ());
93
- }
94
-
95
- private static boolean isCompleted (CompleteCondition condition , Set <UUID > awaitProcesses , Set <UUID > finishedProcesses ) {
96
- switch (condition ) {
97
- case ALL : {
98
- return awaitProcesses .size () == finishedProcesses .size ();
99
- }
100
- case ONE_OF : {
101
- return !finishedProcesses .isEmpty ();
102
- }
103
- default :
104
- throw new IllegalArgumentException ("Unknown condition type: " + condition );
105
- }
106
- }
107
-
108
- private static final class Dao extends AbstractDao {
109
-
110
- private Dao (@ MainDB Configuration cfg ) {
111
- super (cfg );
112
- }
113
-
114
- public Set <UUID > findFinished (Set <UUID > awaitProcesses , Set <ProcessStatus > finishedStatuses ) {
115
- return txResult (tx -> {
116
- ProcessQueue q = PROCESS_QUEUE .as ("q" );
117
- return tx .select (q .INSTANCE_ID )
118
- .from (q )
119
- .where (q .INSTANCE_ID .in (awaitProcesses )
120
- .and (q .CURRENT_STATUS .in (finishedStatuses )))
121
- .fetchSet (q .INSTANCE_ID );
122
- });
61
+ if (wait .resumeEvent () != null ) {
62
+ return Result .resume (wait .resumeEvent ());
63
+ } else {
64
+ return Result .action (tx -> processQueueManager .updateExpectedStatus (tx , processKey , ProcessStatus .WAITING , ProcessStatus .ENQUEUED ));
123
65
}
124
66
}
125
67
}
0 commit comments