重建节点,PostgreSQL数据库后无法在Corda中创建流

时间:2019-11-05 14:47:39

标签: postgresql corda

我为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表为空,但是如何用正确的节点信息更新这些表?

例如,这个Migrating data from Corda 2 to Corda 3问题说,我应该在升级cordapps之后重新运行每笔交易,这是否也仅适用于常规cordapp更新并且已经完成?此https://docs.corda.net/head/node-operations-upgrade-cordapps.html指令还说:“ CorDapps必须随附数据库迁移脚本或清除有关如何更新数据库以使其与新版本兼容的文档。”但是我尝试将以前的某些状态迁移到新的数据库实例,但是没有运气。

1 个答案:

答案 0 :(得分:0)

我将代码从Corda3迁移到Corda4时会遇到此问题,因此我通过在CollectSignatureFlow和Finality流中发送会话来解决此问题。

希望有帮助