#java #corda
#java #corda
Вопрос:
Выполнение потока между account A on Node A
и ответчиком состоит из двух элементов, т.е. 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, moreInformationAt=https://errors.corda.net/OS/4.5/7sftly]
Выполнение потока происходит следующим образом:
Запускает CreateInitiatorFlow
, это создаст состояние в соответствии с логикой. При успешном создании состояния мы вызываем subFlow
i.e UpdateInitiatorFlow
, который обновит некоторые детали в другом состоянии. После успешного выполнения subflow
он возвращается обратно в основной поток и возвращает ответ, но с вышеупомянутой ошибкой.
** Версия Corda: 4.5
База данных: PostgreSQL**
Для обработки предупреждений используются аннотации:
@Suppress(names = "unused")
@SuppressWarnings("unchecked")
@Suspendable
Есть ли какой-либо способ обработать предупреждения и ошибку, связанную с FiberDeserializationChecker
?
Ответ №1:
Ввод некоторых указателей, как обсуждалось в Cordaledger Slack.
Ошибки связаны с приостановкой потоков, т.е. с контрольной точкой потока. Некоторые ресурсы (закрываемые) не могут быть восстановлены при возобновлении потоков и, следовательно, должны быть разделены в separated и помещены в отдельный метод, который не аннотирован @Suspendable
.
Была определена определенная пользовательская схема, которая могла вызвать проблему, поскольку проблема не возникает, когда пользовательская схема закомментирована. Чтобы преодолеть это, рекомендуется добавить логику, связанную с доступом к схеме, в отдельный метод, который не @Suspendable
аннотирован.