spring-projects / spring-statemachine

Spring Statemachine is a framework for application developers to use state machine concepts with Spring.
1.54k stars 604 forks source link

DefaultStateMachineService does not restore state properly #959

Open azhuchkov opened 3 years ago

azhuchkov commented 3 years ago

DefaultStateMachineService has method restoreStateMachine that restores persisted state into newly created state machine, but it does not work for the case with hierarchical states.

According to DefaultStateMachinePersister and some examples over Internet, FSM should be restored using stateMachine.getStateMachineAccessor().doWithAllRegions(), but DefaultStateMachineService for some reason restores only top level region:

// only go via top region
stateMachine.getStateMachineAccessor().doWithRegion(function -> function.resetStateMachine(stateMachineContext));
chutch commented 2 years ago

Issues that you are experiencing are attempted to be addressed here: https://github.com/spring-projects/spring-statemachine/pull/998

Restoring with top level region is correct, because the function itself is recursive. Actual persisting is broken there, that's why it doesn't work.