重建节点后,无法在corda中创建流,postgresql数据库



我为corda中的节点创建了持久的postgresql数据库。在设置数据库和构建节点之后,我可以将流记录到数据库中,但在重建节点并再次运行它们之后,我再也无法创建相同的流了。

我想这意味着数据库仍然有关于节点的旧信息,但如何更新节点并保留数据库中的旧状态?

这是我在重建后运行相同流时遇到的错误。

"net.corda.core.CordaRuntimeException: The Initiator of CollectSignaturesFlow must pass in exactly the sessions required to sign the transaction. "

我的deployNodes任务:

task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) {
directory "./build/nodes"
ext.drivers = ['.jdbc_driver']
ext.extraConfig = [
'dataSourceProperties.dataSourceClassName' : "org.postgresql.ds.PGSimpleDataSource",
'database.transactionIsolationLevel' : 'READ_COMMITTED',
'database.initialiseSchema': "true"
]
nodeDefaults {
projectCordapp {
deploy = false
}
cordapp project(':cordapp-contracts-states')
cordapp project(':cordapp')
}
node {
name "O=NetworkMapAndNotary,L=Helsinki,C=FI"
notary = [validating : true]
rpcSettings {
address "localhost:10004"
adminAddress "localhost:10044"
}
p2pPort 10002
extraConfig = ext.extraConfig + [
'dataSourceProperties.dataSource.url' :
"jdbc:postgresql://localhost:5432/nms_db?currentSchema=nms_schema",
'dataSourceProperties.dataSource.user' : "nms_corda",
'dataSourceProperties.dataSource.password' : "corda1234",
]
drivers = ext.drivers
}
node {
name "O=AccountOperator,L=Helsinki,C=FI"
p2pPort 10005
rpcSettings {
address "localhost:10006"
adminAddress "localhost:10046"
}
webPort 10007
rpcUsers = [[ user: "user1", "password": "test", "permissions": ["ALL"]]]
extraConfig = ext.extraConfig + [
'dataSourceProperties.dataSource.url' :
"jdbc:postgresql://localhost:5432/ao_db?currentSchema=ao_schema",
'dataSourceProperties.dataSource.user' : "ao_corda",
'dataSourceProperties.dataSource.password' : "corda1234",
]
drivers = ext.drivers
}
}

我还尝试在每个节点的rpc上运行run clearNetworkMapCache。运行后,我可以看到node_info_hash和node_infos表是空的,但我如何用正确的节点信息更新这些表?

例如,这个将数据从Corda 2迁移到Corda 3的问题说,我应该在升级cordaps后重新运行每个事务,这是否也适用于常规的cordap更新?还有这个https://docs.corda.net/head/node-operations-upgrade-cordapps.html说明中说:"CorDapps必须附带数据库迁移脚本或关于如何更新数据库以与新版本兼容的明确文档。"但我尝试将以前的一些状态迁移到新的数据库实例,但没有成功。

当我将代码从Corda3迁移到Corda4时,我曾经遇到过这个问题,所以我通过在CollectSignatureFlow和Finality流中发送会话来修复它。

希望能帮助

最新更新