@@ -88,6 +88,7 @@ public void accept(Exception reason) {
88
88
private final DataConverter dataConverter ;
89
89
private final Condition taskCondition ;
90
90
private boolean taskCompleted = false ;
91
+ private final Map <String , Integer > versionMap = new HashMap <>();
91
92
92
93
ClockDecisionContext (
93
94
DecisionsHelper decisions ,
@@ -227,6 +228,8 @@ void handleMarkerRecorded(HistoryEvent event) {
227
228
sideEffectResults .put (event .getEventId (), attributes .getDetails ());
228
229
} else if (LOCAL_ACTIVITY_MARKER_NAME .equals (name )) {
229
230
handleLocalActivityMarker (attributes );
231
+ } else if (VERSION_MARKER_NAME .equals (name )) {
232
+ handleVersionMarker (attributes );
230
233
} else if (!MUTABLE_SIDE_EFFECT_MARKER_NAME .equals (name ) && !VERSION_MARKER_NAME .equals (name )) {
231
234
if (log .isWarnEnabled ()) {
232
235
log .warn ("Unexpected marker: " + event );
@@ -276,6 +279,14 @@ private void handleLocalActivityMarker(MarkerRecordedEventAttributes attributes)
276
279
}
277
280
}
278
281
282
+ private void handleVersionMarker (MarkerRecordedEventAttributes attributes ) {
283
+ MarkerHandler .MarkerInterface markerData =
284
+ MarkerHandler .MarkerInterface .fromEventAttributes (attributes , dataConverter );
285
+ String versionID = markerData .getId ();
286
+ int version = dataConverter .fromData (attributes .getDetails (), Integer .class , Integer .class );
287
+ versionMap .put (versionID , version );
288
+ }
289
+
279
290
int getVersion (String changeId , DataConverter converter , int minSupported , int maxSupported ) {
280
291
Predicate <MarkerRecordedEventAttributes > changeIdEquals =
281
292
(attributes ) -> {
@@ -285,6 +296,12 @@ int getVersion(String changeId, DataConverter converter, int minSupported, int m
285
296
};
286
297
decisions .addAllMissingVersionMarker (true , Optional .of (changeIdEquals ));
287
298
299
+ Integer version = versionMap .get (changeId );
300
+ if (version != null ) {
301
+ validateVersion (changeId , version , minSupported , maxSupported );
302
+ return version ;
303
+ }
304
+
288
305
Optional <byte []> result =
289
306
versionHandler .handle (
290
307
changeId ,
@@ -299,7 +316,7 @@ int getVersion(String changeId, DataConverter converter, int minSupported, int m
299
316
if (!result .isPresent ()) {
300
317
return WorkflowInternal .DEFAULT_VERSION ;
301
318
}
302
- int version = converter .fromData (result .get (), Integer .class , Integer .class );
319
+ version = converter .fromData (result .get (), Integer .class , Integer .class );
303
320
validateVersion (changeId , version , minSupported , maxSupported );
304
321
return version ;
305
322
}
0 commit comments