【问题标题】:Corda 4.3 Enterprise Issue - 0 rows availableCorda 4.3 企业版 - 0 行可用
【发布时间】:2020-06-10 22:59:35
【问题描述】:

从节点得到这个错误:

有人可以解释一下这个问题和解决方法吗?

谢谢!

2020-06-09 15:21:41,660 INFO n.c.n.s.s.StaffedFlowHospital [flow-worker] Flow error allowed to propagate
net.corda.core.node.services.StatesNotAvailableException: Attempted to reserve [CDDA501510A70B04133BAB2977891F74DDF377422C2F61F30DAD61EBDBD01B19(0), 2D64BB53971CC0DDCA307A23EF2E86A6211FFFEC8A8D443CBAB6755FB1508B6B(0), CB4AD5262750CD6DC7E33B057E73A3CAB61EBCF83E7232A803025A64F0C66F16(0), 9AA0489DFCEACC6B5E10603EA8FC0C93891395B9658B1E7A7E0CD793BF4BD01E(0), E8A5427BA1161885797F616319E278B88041FB3E25C68DF53EC4AA8FA665FE7E(0)] for afa31821-c37a-4f13-8fed-1a214f945ffc but only 0 rows available
       at net.corda.node.services.vault.NodeVaultService.softLockReserve(NodeVaultService.kt:535) ~[corda-node-4.3.jar:?]
        at cm.token.helpers.StateQueryUtility.searchForTokens(StateQueryUtility.kt:179) ~[?:?]
        at cm.token.flows.subFlows.ConsumeTokenFlow.call(ConsumeTokenFlow.kt:21) ~[?:?]
        at cm.token.flows.subFlows.ConsumeTokenFlow.call(ConsumeTokenFlow.kt:16) ~[?:?]
        at net.corda.node.services.statemachine.FlowStateMachineImpl.subFlow(FlowStateMachineImpl.kt:334) ~[corda-node-4.3.jar:?]
        at net.corda.core.flows.FlowLogic.subFlow(FlowLogic.kt:326) ~[corda-core-4.3.jar:?]
        at cm.token.flows.TransferFlow.call(TransferFlow.kt:65) ~[?:?]
        at cm.token.flows.TransferFlow.call(TransferFlow.kt:26) ~[?:?]
        at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:274) ~[corda-node-4.3.jar:?]
        at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:46) ~[corda-node-4.3.jar:?]
        at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) ~[quasar-core-0.7.11_r3-jdk8.jar:0.7.11_r3]
        at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) ~[quasar-core-0.7.11_r3-jdk8.jar:0.7.11_r3]
        at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) ~[quasar-core-0.7.11_r3-jdk8.jar:0.7.11_r3]
        at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) ~[quasar-core-0.7.11_r3-jdk8.jar:0.7.11_r3]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_242]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_242]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242]
2020-06-09 15:21:41,661 DEBUG c.z.h.p.ProxyConnection [flow-worker] HikariPool-1 - Executed rollback on connection org.postgresql.jdbc.PgConnection@372f7bc due to dirty commit state on close().
2020-06-09 15:21:41,661 INFO n.c.n.s.s.StaffedFlowHospital [flow-worker] Flow [3cc9d3ac-857b-4556-b1b3-2dac96e03ece] admitted to hospital in state StateMachineState(checkpoint=Checkpoint(invocationContext=InvocationContext(origin=RPC(actor=Actor(id=Id(value=user1), serviceId=AuthServiceId(value=NODE_CONFIG), owningLegalIdentity=CN=Custodian1, OU=Custodian1, O=Cl

【问题讨论】:

    标签: corda


    【解决方案1】:

    背景

    您似乎遇到了一个软锁定错误,当“构建事务的节点尝试同时使用相同的输入”时会发生这种错误。 https://docs.corda.net/docs/corda-os/4.4/soft-locking.html

    正如文档所指出的,这很重要,因为只有包含相同输入状态的两个事务中的一个可以完成。公证人将拒绝完成第二笔交易,因为它是双花尝试。

    如果您想要深入的信息,您可以查看 Corda 开源代码中的错误消息,并查看在事务组装期间发生的错误消息:https://github.com/corda/corda/blob/release/os/4.4/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt#L500

    可能的解决方案

    软锁定冲突的一个常见原因是重试流。如果一个流以相同的参数启动两次,那么很可能会再次选择相同的输入状态并导致此软锁定错误。

    根据设计,Corda 流程旨在最终完成,因此在标准 Web 服务中重试流程并不是 Corda 应用程序的良好设计实践。如果流程未完成,则调查卡住流程的原因并尝试解决该问题。如果必须先杀死流必须重试https://docs.corda.net/docs/corda-os/4.4/checkpoint-tooling.html

    【讨论】:

    • 您的解决方案引用版本 4.4 .. 我们正在运行 4.3。仍然适用吗?另外,我们如何解决/解决这个问题?目前,此节点上的所有流功能都刚刚超时。
    • 是的,这也适用于 4.3,因为软锁定长期以来一直是 Corda 的一部分。我将编辑答案以讨论可能的解决方案。
    【解决方案2】:

    问题原来有两个方面: 1) 在我们的 postgresql 数据库设置中尝试使用重复键。 2) 流重试尝试锁定节点,因此没有流将成功运行。

    在 postgres 日志中发现此错误:

    2020-06-09 20:39:15 UTC:172.30.63.181(44758):qa2corda@corda_qa2:[5501]:ERROR: 重复键值违反唯一约束“uk_jj5rltk3d1ak3xi1d1oei0t4b” 2020-06-09 20:39:15 UTC:172.30.63.181(44758):qa2corda@corda_qa2:[5501]:DETAIL: Key (user_id)=(cmsbi2@CUSTDN1) 已经存在。 2020-06-09 20:39:15 UTC:172.30.63.181(44758):qa2corda@corda_qa2:[5501]:STATEMENT: 插入 "CompanyHoldingIssuer".white_list_user (custodian_name, is_custodian, user_id, output_index, transaction_id) 值 ($1 , $2, $3, $4, $5) 2020-06-09 20:39:15 UTC:172.30.63.181(44760):qa2corda@corda_qa2:[5517]:ERROR: 重复键值违反唯一约束“uk_jj5rltk3d1ak3xi1d1oei0t4b” 2020-06-09 20:39:15 UTC:172.30.63.181(44760):qa2corda@corda_qa2:[5517]:DETAIL: Key (user_id)=(Foundation@FOUNDTN) 已经存在。 2020-06-09 20:39:15 UTC:172.30.63.181(44760):qa2corda@corda_qa2:[5517]:STATEMENT: 插入 "CompanyHoldingIssuer".white_list_user (custodian_name, is_custodian, user_id, output_index, transaction_id) 值 ($1 , $2, $3, $4, $5) 2020-06-09 20:39:16 UTC:172.30.63.181(44760):qa2corda@corda_qa2:[5517]:ERROR: 重复键值违反唯一约束“uk_jj5rltk3d1ak3xi1d1oei0t4b” 2020-06-09 20:39:16 UTC:172.30.63.181(44760):qa2corda@corda_qa2:[5517]:DETAIL: Key (user_id)=(cmsbi2@CUSTDN1) 已经存在。 2020-06-09 20:39:16 UTC:172.30.63.181(44760):qa2corda@corda_qa2:[5517]:STATEMENT: 插入 "CompanyHoldingIssuer".white_list_user (custodian_name, is_custodian, user_id, output_index, transaction_id) 值 ($1 , $2, $3, $4, $5) 2020-06-09 20:39:16 UTC:172.30.63.181(44762):qa2corda@corda_qa2:[5518]:ERROR: 重复键值违反唯一约束“uk_jj5rltk3d1ak3xi1d1oei0t4b” 2020-06-09 20:39:16 UTC:172.30.63.181(44762):qa2corda@corda_qa2:[5518]:DETAIL: Key (user_id)=(Foundation@FOUNDTN) 已经存在。 2020-06-09 20:39:16 UTC:172.30.63.181(44762):qa2corda@corda_qa2:[5518]:STATEMENT: 插入 "CompanyHoldingIssuer".white_list_user (custodian_name, is_custodian, user_id, output_index, transaction_id) 值 ($1 , $2, $3, $4, $5) 2020-06-09 20:39:17 UTC:172.30.63.181(44758):qa2corda@corda_qa2:[5501]:ERROR: 重复键值违反唯一约束“uk_jj5rltk3d1ak3xi1d1oei0t4b” 2020-06-09 20:39:17 UTC:172.30.63.181(44758):qa2corda@corda_qa2:[5501]:DETAIL: Key (user_id)=(cmsbi2@CUSTDN1) 已经存在。

    解决方案是重新启动环境中的所有节点。似乎第三方节点是原因,因为重新启动有问题的节点没有解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2019-09-30
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多