Move Future completion outside database transaction so that the effects of the flow will be externally visible at Future completion.

This commit is contained in:
rick.parker 2016-12-09 09:21:59 +00:00
parent 453f7cd223
commit b52c52378f

View File

@ -86,15 +86,16 @@ class FlowStateMachineImpl<R>(override val id: StateMachineRunId,
val result = try {
logic.call()
} catch (t: Throwable) {
processException(t)
actionOnEnd()
commitTransaction()
_resultFuture?.setException(t)
throw ExecutionException(t)
}
// This is to prevent actionOnEnd being called twice if it throws an exception
actionOnEnd()
_resultFuture?.set(result)
commitTransaction()
_resultFuture?.set(result)
return result
}
@ -264,8 +265,8 @@ class FlowStateMachineImpl<R>(override val id: StateMachineRunId,
// This can get called in actionOnSuspend *after* we commit the database transaction, so optionally open a new one here.
databaseTransaction(database) {
actionOnEnd()
_resultFuture?.setException(t)
}
_resultFuture?.setException(t)
}
internal fun resume(scheduler: FiberScheduler) {