27
27
import com .uber .cadence .internal .worker .DecisionTaskHandler ;
28
28
import com .uber .cadence .internal .worker .LocalActivityWorker ;
29
29
import com .uber .cadence .internal .worker .LocallyDispatchedActivityWorker ;
30
+ import com .uber .cadence .internal .worker .LocallyDispatchedActivityWorker .Task ;
30
31
import com .uber .cadence .internal .worker .SingleWorkerOptions ;
31
32
import com .uber .cadence .internal .worker .SuspendableWorker ;
32
33
import com .uber .cadence .internal .worker .WorkflowWorker ;
44
45
import java .util .function .Consumer ;
45
46
import java .util .function .Function ;
46
47
47
- /** Workflow worker that supports POJO workflow implementations. */
48
+ /**
49
+ * Workflow worker that supports POJO workflow implementations.
50
+ */
48
51
public class SyncWorkflowWorker
49
52
implements SuspendableWorker , Consumer <PollForDecisionTaskResponse > {
50
53
51
54
private final WorkflowWorker workflowWorker ;
52
55
private final LocalActivityWorker laWorker ;
53
- private final LocallyDispatchedActivityWorker ldaWorker ;
54
-
55
56
private final POJOWorkflowImplementationFactory factory ;
56
57
private final DataConverter dataConverter ;
57
58
private final POJOActivityTaskHandler laTaskHandler ;
58
- private final POJOActivityTaskHandler ldaTaskHandler ;
59
59
private final ScheduledExecutorService heartbeatExecutor = Executors .newScheduledThreadPool (4 );
60
60
private final ScheduledExecutorService ldaHeartbeatExecutor = Executors .newScheduledThreadPool (4 );
61
+ private LocallyDispatchedActivityWorker ldaWorker ;
62
+ private POJOActivityTaskHandler ldaTaskHandler ;
61
63
62
64
public SyncWorkflowWorker (
63
65
IWorkflowService service ,
@@ -97,15 +99,21 @@ public SyncWorkflowWorker(
97
99
stickyDecisionScheduleToStartTimeout ,
98
100
service ,
99
101
laWorker .getLocalActivityTaskPoller ());
100
- ldaTaskHandler =
101
- new POJOActivityTaskHandler (
102
- service ,
103
- domain ,
104
- locallyDispatchedActivityOptions .getDataConverter (),
105
- ldaHeartbeatExecutor );
106
- ldaWorker =
107
- new LocallyDispatchedActivityWorker (
108
- service , domain , taskList , locallyDispatchedActivityOptions , ldaTaskHandler );
102
+
103
+ Function <Task , Boolean > locallyDispatchedActivityTaskPoller = null ;
104
+ // do not dispatch locally if TaskListActivitiesPerSecond is set
105
+ if (locallyDispatchedActivityOptions .getTaskListActivitiesPerSecond () == 0 ) {
106
+ ldaTaskHandler =
107
+ new POJOActivityTaskHandler (
108
+ service ,
109
+ domain ,
110
+ locallyDispatchedActivityOptions .getDataConverter (),
111
+ ldaHeartbeatExecutor );
112
+ ldaWorker =
113
+ new LocallyDispatchedActivityWorker (
114
+ service , domain , taskList , locallyDispatchedActivityOptions , ldaTaskHandler );
115
+ locallyDispatchedActivityTaskPoller = ldaWorker .getLocallyDispatchedActivityTaskPoller ();
116
+ }
109
117
110
118
workflowWorker =
111
119
new WorkflowWorker (
@@ -114,7 +122,7 @@ public SyncWorkflowWorker(
114
122
taskList ,
115
123
workflowOptions ,
116
124
taskHandler ,
117
- ldaWorker . getLocallyDispatchedActivityTaskPoller () ,
125
+ locallyDispatchedActivityTaskPoller ,
118
126
stickyTaskListName );
119
127
}
120
128
@@ -137,7 +145,9 @@ public void setLocalActivitiesImplementation(Object... activitiesImplementation)
137
145
}
138
146
139
147
public void setActivitiesImplementationToDispatchLocally (Object ... activitiesImplementation ) {
140
- this .ldaTaskHandler .setActivitiesImplementation (activitiesImplementation );
148
+ if (this .ldaTaskHandler != null ) {
149
+ this .ldaTaskHandler .setActivitiesImplementation (activitiesImplementation );
150
+ }
141
151
}
142
152
143
153
@ Override
@@ -147,69 +157,84 @@ public void start() {
147
157
// to start LocalActivity Worker.
148
158
if (workflowWorker .isStarted ()) {
149
159
laWorker .start ();
150
- ldaWorker .start ();
160
+ if (ldaWorker != null ) {
161
+ ldaWorker .start ();
162
+ }
151
163
}
152
164
}
153
165
154
166
@ Override
155
167
public boolean isStarted () {
156
- return workflowWorker .isStarted () && laWorker .isStarted () && ldaWorker .isStarted ();
168
+ return workflowWorker .isStarted () && laWorker .isStarted () && (ldaWorker == null || ldaWorker
169
+ .isStarted ());
157
170
}
158
171
159
172
@ Override
160
173
public boolean isShutdown () {
161
- return workflowWorker .isShutdown () && laWorker .isShutdown () && ldaWorker .isShutdown ();
174
+ return workflowWorker .isShutdown () && laWorker .isShutdown () && (ldaWorker == null || ldaWorker
175
+ .isShutdown ());
162
176
}
163
177
164
178
@ Override
165
179
public boolean isTerminated () {
166
180
return workflowWorker .isTerminated ()
167
181
&& laWorker .isTerminated ()
168
182
&& ldaHeartbeatExecutor .isTerminated ()
169
- && ldaWorker .isTerminated ();
183
+ && ( ldaWorker == null || ldaWorker .isTerminated () );
170
184
}
171
185
172
186
@ Override
173
187
public void shutdown () {
174
188
laWorker .shutdown ();
175
189
ldaHeartbeatExecutor .shutdown ();
176
- ldaWorker .shutdown ();
190
+ if (ldaWorker != null ) {
191
+ ldaWorker .shutdown ();
192
+ }
177
193
workflowWorker .shutdown ();
178
194
}
179
195
180
196
@ Override
181
197
public void shutdownNow () {
182
198
laWorker .shutdownNow ();
183
199
ldaHeartbeatExecutor .shutdownNow ();
184
- ldaWorker .shutdownNow ();
200
+ if (ldaWorker != null ) {
201
+ ldaWorker .shutdownNow ();
202
+ }
185
203
workflowWorker .shutdownNow ();
186
204
}
187
205
188
206
@ Override
189
207
public void awaitTermination (long timeout , TimeUnit unit ) {
190
208
long timeoutMillis = InternalUtils .awaitTermination (laWorker , unit .toMillis (timeout ));
191
209
timeoutMillis = InternalUtils .awaitTermination (ldaHeartbeatExecutor , timeoutMillis );
192
- timeoutMillis = InternalUtils .awaitTermination (ldaWorker , timeoutMillis );
210
+ if (ldaWorker != null ) {
211
+ timeoutMillis = InternalUtils .awaitTermination (ldaWorker , timeoutMillis );
212
+ }
193
213
InternalUtils .awaitTermination (workflowWorker , timeoutMillis );
194
214
}
195
215
196
216
@ Override
197
217
public void suspendPolling () {
198
218
workflowWorker .suspendPolling ();
199
219
laWorker .suspendPolling ();
200
- ldaWorker .suspendPolling ();
220
+ if (ldaWorker != null ) {
221
+ ldaWorker .suspendPolling ();
222
+ }
201
223
}
202
224
203
225
@ Override
204
226
public void resumePolling () {
205
227
workflowWorker .resumePolling ();
206
228
laWorker .resumePolling ();
207
- ldaWorker .resumePolling ();
229
+ if (ldaWorker != null ) {
230
+ ldaWorker .resumePolling ();
231
+ }
208
232
}
209
233
210
234
@ Override
211
235
public boolean isSuspended () {
212
- return workflowWorker .isSuspended () && laWorker .isSuspended () && ldaWorker .isSuspended ();
236
+ return workflowWorker .isSuspended () && laWorker .isSuspended () && (ldaWorker == null || ldaWorker
237
+ .isSuspended ());
213
238
}
214
239
215
240
public <R > R queryWorkflowExecution (
0 commit comments