Обработка ошибок Corda — FiberDeserializationChecker

#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 аннотирован.