Corda-FiberDeserializationChecker错误处理

问题描述

account A on Node A和响应者之间的流执行是2个成员,即account B on Node BNode 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,将根据逻辑创建状态。 成功创建状态后,我们将调用subFlowUpdateInitiatorFlow,它将更新另一状态中的一些详细信息。 成功执行subflow后,它将返回到主流程并返回响应,但存在上述错误

** Corda版本:4.5

DB:Postgresql **

要处理警告,请使用以下注释:

@Suppress(names = "unused") 
@SuppressWarnings("unchecked")
@Suspendable

是否可以处理与 FiberDeserializationChecker相关的警告和错误

解决方法

按照Cordaledger Slack的说明放置一些指针。

错误与流暂停即流检查点有关。恢复流后,无法恢复某些资源(可关闭),因此应将其分隔为一个单独的方法,并以@Suspendable进行注释。

已经定义了某些自定义架构,这可能导致了问题,因为在注释掉自定义架构时问题并未出现。解决此问题的建议是在未@Suspendable注释的单独方法中添加与访问架构有关的逻辑。