问题描述
account A on Node A
和响应者之间的流执行是2个成员,即account B on Node B
和Node C
正在成功执行,但是它发出警告音和与FiberDeserializationChecker
相关的错误在流程执行结束时。
[ERROR] 13:42:00+0530 [FiberDeserializationChecker] interceptors.FiberDeserializationChecker. - Encountered unrestorable checkpoint! - java.lang.NullPointerException
Serialization trace:
childProgresstrackers (net.corda.core.utilities.Progresstracker)
progresstracker (com.blockchain.corda.flows.initiator.UpdateInitiatorFlow)
this$0 (com.blockchain.corda.flows.initiator.UpdateInitiatorFlow$2)
second (kotlin.Pair)_allStepsCache (net.corda.core.utilities.Progresstracker)
progresstracker(com.blockchain.corda.flows.initiator.CreateInitiatorFlow)logic (net.corda.node.services.statemachine.FlowStateMachineImpl) [errorCode=7sftly,more@R_856_4045@ionAt=https://errors.corda.net/OS/4.5/7sftly]
流执行如下:
触发CreateInitiatorFlow
,将根据逻辑创建状态。
成功创建状态后,我们将调用subFlow
即UpdateInitiatorFlow
,它将更新另一状态中的一些详细信息。
成功执行subflow
后,它将返回到主流程并返回响应,但存在上述错误。
** Corda版本:4.5
DB:Postgresql **
要处理警告,请使用以下注释:
@Suppress(names = "unused")
@SuppressWarnings("unchecked")
@Suspendable
是否可以处理与 FiberDeserializationChecker
相关的警告和错误?
解决方法
按照Cordaledger Slack的说明放置一些指针。
错误与流暂停即流检查点有关。恢复流后,无法恢复某些资源(可关闭),因此应将其分隔为一个单独的方法,并以@Suspendable
进行注释。
已经定义了某些自定义架构,这可能导致了问题,因为在注释掉自定义架构时问题并未出现。解决此问题的建议是在未@Suspendable
注释的单独方法中添加与访问架构有关的逻辑。