corda - 在 Corda 3.2 的模拟网络中使用 Try.on 会导致无限循环/等待?
问题描述
我正在迁移v 3.0
到v 3.2
我的许多单元测试Try.on
用来断言一些预期的结果。它以前在 v3.0 中工作,但在 v3.2 之后,它在模拟网络中的单元测试中陷入无限等待。
@Test
fun `Issue non-anonymous obligation successfully with non null remark`() {
// Throw null pointer
val result = Try.on {
issueObligation(a, b, 1000.POUNDS, anonymous = false, remark = null)
network.waitQuiescent()
}
assert(result.isFailure)
// If I don't run this subsequent transaction, the test runs successfully.
// Somehow, any transaction after a Try.on will get stuck.
// Should issue successfully.
issueObligation(a, b, 1000.POUNDS, anonymous = false, remark = "Valid")
network.waitQuiescent()
}
Stacktrace 在控制台将陷入无限等待。
[警告] 11:15:45,055 [模拟节点 1 线程] (FlowStateMachineImpl.kt:111) flow.[2c41b166-041a-4ec8-87dd-896e3712415e].run - 因意外异常终止 {} java.lang.IllegalArgumentException:无效的字符串。 在 net.corda.examples.obligation.flows.IssueObligation$Initiator.call(IssueObligation.kt:44) ~[classes/:?] 在 net.corda.examples.obligation.flows.IssueObligation$Initiator.call(IssueObligation.kt:21) ~[classes/:?] 在 net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96) [corda-node-3.2-corda.jar:?] 在 net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:44) [corda-node-3.2-corda.jar:?] 在 co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0.7.9-jdk8.jar:0.7.9] 在 co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) [quasar-core-0.7.9-jdk8.jar:0.7.9] 在 co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9] 在 co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.9-jdk8.jar:0.7.9] 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_151] 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_151] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_151] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_151] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_151] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_151] 在 net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$1$thread$1.run(AffinityExecutor.kt:62) [corda-node-3.2-corda.jar:?] [INFO] 11:15:45,474 [Mock node 1 thread] (FlowStateMachineImpl.kt:432) flow.[77bea7fa-402f-4527-8388-d910faea6342].initiateSession - 启动与方 O=Mock Company 2, L= 的流会话伦敦,C = GB。用于跟踪目的的会话 ID 是 SessionId(toLong=7175264157685997907)。{} [INFO] 11:15:45,570 [模拟节点 2 线程] (StateMachineManagerImpl.kt:367) statemachine.StateMachineManagerImpl.onSessionInit - 接受来自方 O=Mock Company 1、L=London、C=GB 的流会话。用于跟踪目的的会话 ID 是 SessionId(toLong=7175264157685997907)。{invocation_id=18195f36-850b-4fec-9794-9e57c16f9155, invocation_timestamp=2018-08-03T04:15:45.557Z, session_id=18195f36-850b-4fec-9794-9e57c16f9155, session_503704:4018-Z508: } [INFO] 11:15:45,747 [模拟节点 1 线程] (FlowStateMachineImpl.kt:432) flow.[77bea7fa-402f-4527-8388-d910faea6342].initiateSession - 与方 O=Notary Service,L=Zurich 启动流会话, C = CH。用于跟踪目的的会话 ID 是 SessionId(toLong=-6165721234712091944)。{} [INFO] 11:15:45,772 [模拟节点 0 线程] (StateMachineManagerImpl.kt:367) statemachine.StateMachineManagerImpl.onSessionInit - 接受来自方 O=Mock Company 1、L=London、C=GB 的流会话。用于跟踪目的的会话 ID 是 SessionId(toLong=-6165721234712091944)。{invocation_id=c7c9d70d-e73a-4724-912a-e7f3d5080e57, invocation_timestamp=2018-08-03T04:15:45.770Z, session_id=c7c9d70d-e73a-4724-912a-e7f3d5080e57, session_timestamp=2018-70T04:158-70T04:158-70T } [信息] 11:15:45,868 [模拟节点 1 线程] (HibernateConfiguration.kt:47) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[ObligationSchemaV1(name=net.corda.examples.obligation.ObligationSchema, version= 1)] {} [信息] 11:15:45,875 [模拟节点 1 线程] (ConnectionProviderInitiator.java:122) internal.ConnectionProviderInitiator.initiateService - HHH000130:实例化显式连接提供程序:net.corda.nodeapi.internal.persistence.HibernateConfiguration$NodeDatabaseConnectionProvider {} [信息] 11:15:45,876 [模拟节点 1 线程] (Dialect.java:157) dialect.Dialect。- HHH000400:使用方言:org.hibernate.dialect.H2Dialect {} [INFO] 11:15:45,881 [模拟节点 1 线程] (BasicTypeRegistry.java:148) type.BasicTypeRegistry.register - HHH000270:类型注册 [materialized_blob] 覆盖以前:org.hibernate.type.MaterializedBlobType@7a7698f4 {} [INFO] 11:15:45,894 [模拟节点 1 线程](DdlTransactionIsolatorNonJtaImpl.java:47)connections.access.getIsolatedConnection - HHH10001501:从 JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@ 736e95ad](非 JTA)DDL 执行未处于自动提交模式;连接“本地事务”将被提交,连接将设置为自动提交模式。{} [INFO] 11:15:45,909 [模拟节点 1 线程] (HibernateConfiguration.kt:64) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[ObligationSchemaV1(name=net.corda.examples.obligation.ObligationSchema, version= 1)] {} [INFO] 11:15:45,916 [模拟节点 1 线程] (HibernateConfiguration.kt:47) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[VaultSchemaV1(name=net.corda.node.services.vault.VaultSchema,版本=1)] {} [信息] 11:15:45,923 [模拟节点 1 线程] (ConnectionProviderInitiator.java:122) internal.ConnectionProviderInitiator.initiateService - HHH000130:实例化显式连接提供程序:net.corda.nodeapi.internal.persistence.HibernateConfiguration$NodeDatabaseConnectionProvider {} [信息] 11:15:45,924 [模拟节点 1 线程] (Dialect.java:157) dialect.Dialect。- HHH000400:使用方言:org.hibernate.dialect.H2Dialect {} [INFO] 11:15:45,927 [模拟节点 1 线程] (BasicTypeRegistry.java:148) type.BasicTypeRegistry.register - HHH000270:类型注册 [materialized_blob] 覆盖以前:org.hibernate.type.MaterializedBlobType@7a7698f4 {} [信息] 11:15:45,953 [模拟节点 1 线程](DdlTransactionIsolatorNonJtaImpl.java:47)connections.access.getIsolatedConnection - HHH10001501:从 JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@ 318fb15](非 JTA)DDL 执行未处于自动提交模式;连接“本地事务”将被提交,连接将设置为自动提交模式。{} [INFO] 11:15:45,994 [模拟节点 1 线程] (HibernateConfiguration.kt:64) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[VaultSchemaV1(name=net.corda.node.services.vault.VaultSchema,版本=1)] {} [INFO] 11:15:46,003 [Mock node 1 thread] (FlowStateMachineImpl.kt:432) flow.[77bea7fa-402f-4527-8388-d910faea6342].initiateSession - 与方 O=Mock Company 2, L= 启动流会话伦敦,C = GB。用于跟踪目的的会话 id 是 SessionId(toLong=-2453204714770107984)。{} [INFO] 11:15:46,027 [模拟节点 2 线程] (StateMachineManagerImpl.kt:367) statemachine.StateMachineManagerImpl.onSessionInit - 接受来自方 O=Mock Company 1、L=London、C=GB 的流会话。用于跟踪目的的会话 id 是 SessionId(toLong=-2453204714770107984)。{invocation_id=ec8f9d18-73ef-4739-a0cd-84202e590df9, invocation_timestamp=2018-08-03T04:15:46.026Z, session_id=ec8f9d18-73ef-4739-a0cd-84202e590df9, session_timestamp=2018-08-03Z046. } [INFO] 11:15:46,084 [模拟节点 2 线程] (HibernateConfiguration.kt:47) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[ObligationSchemaV1(name=net.corda.examples.obligation.ObligationSchema, version= 1)] {} [信息] 11:15:46,099 [模拟节点 2 线程] (ConnectionProviderInitiator.java:122) internal.ConnectionProviderInitiator.initiateService - HHH000130:实例化显式连接提供程序:net.corda.nodeapi.internal.persistence.HibernateConfiguration$NodeDatabaseConnectionProvider {} [信息] 11:15:46,100 [模拟节点 2 线程] (Dialect.java:157) dialect.Dialect。- HHH000400:使用方言:org.hibernate.dialect.H2Dialect {} [INFO] 11:15:46,107 [模拟节点 2 线程] (BasicTypeRegistry.java:148) type.BasicTypeRegistry.register - HHH000270:类型注册 [materialized_blob] 覆盖以前:org.hibernate.type.MaterializedBlobType@7a7698f4 {} [INFO] 11:15:46,115 [模拟节点 2 线程](DdlTransactionIsolatorNonJtaImpl.java:47)connections.access.getIsolatedConnection - HHH10001501:从 JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@获得的连接606d0355] 对于(非 JTA)DDL 执行未处于自动提交模式;连接“本地事务”将被提交,连接将设置为自动提交模式。{} [INFO] 11:15:46,129 [模拟节点 2 线程] (HibernateConfiguration.kt:64) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[ObligationSchemaV1(name=net.corda.examples.obligation.ObligationSchema, version= 1)] {} [信息] 11:15:46,130 [模拟节点 2 线程] (HibernateConfiguration.kt:47) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[VaultSchemaV1(name=net.corda.node.services.vault.VaultSchema,版本=1)] {} [信息] 11:15:46,134 [模拟节点 2 线程] (ConnectionProviderInitiator.java:122) internal.ConnectionProviderInitiator.initiateService - HHH000130:实例化显式连接提供程序:net.corda.nodeapi.internal.persistence.HibernateConfiguration$NodeDatabaseConnectionProvider {} [信息] 11:15:46,135 [模拟节点 2 线程] (Dialect.java:157) dialect.Dialect。- HHH000400:使用方言:org.hibernate.dialect.H2Dialect {} [INFO] 11:15:46,136 [模拟节点 2 线程] (BasicTypeRegistry.java:148) type.BasicTypeRegistry.register - HHH000270:类型注册 [materialized_blob] 覆盖以前:org.hibernate.type.MaterializedBlobType@7a7698f4 {} [INFO] 11:15:46,157 [模拟节点 2 线程](DdlTransactionIsolatorNonJtaImpl.java:47)connections.access.getIsolatedConnection - HHH10001501:从 JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@获得的连接6b0f595c](非 JTA)DDL 执行未处于自动提交模式;连接“本地事务”将被提交,连接将设置为自动提交模式。{} [INFO] 11:15:46,175 [模拟节点 2 线程] (HibernateConfiguration.kt:64) persistence.HibernateConfiguration.makeSessionFactoryForSchemas - 为模式创建会话工厂:[VaultSchemaV1(name=net.corda.node.services.vault.VaultSchema,版本=1)] {}
解决方案
这似乎是 Corda 3.2 中的一个错误。它在这里被跟踪:https ://github.com/corda/corda/issues/3741 。
推荐阅读
- javascript - 当过滤一个
- 子弹消失。如何让他们留下来?
- python - Discord.py 加入/连接到语音通道命令不起作用。(在齿轮中)
- html - 具有固定定位的 Z 索引在 CodePen 中不起作用
- sql - Postgres 按子查询/多个子查询排序
- amazon-web-services - AWS Amplify GraphQL - 一对多连接在查询时返回空列表
- r - 更改 tibble 中变量的值
- filter - 如何将某些项目值转换为新项目值?
- discord.py - 如何设置欢迎频道 discord.py?
- python - 无法通过 Python 请求获得“第一个”响应
- kql - 我如何评估可能未提供的价值?