在" session.sendAndReceiveWithRetry(tx)"中遇到错误

时间:2018-05-22 09:47:36

标签: corda

我们的应用目前正在使用Corda V2.0,并且部署到专用服务器,我们使用配置了RAFT的3位公证人,但是当存在事务的输入状态时,在日志中找到以下错误

messaging.NodeMessagingClient.sendWithRetry - Reached the maximum number of retries (3) for message ClientMessageImpl

在阅读了FinalityFlow的代码之后,我们发现这个错误应该发生在步骤" session.sendAndReceiveWithRetry(tx)"以下代码在NotaryFlow.kt中

val response = try {
                val session = initiateFlow(notaryParty)
                if (serviceHub.networkMapCache.isValidatingNotary(notaryParty)) {
                    subFlow(SendTransactionWithRetry(session, stx))
                    session.receive<List<TransactionSignature>>()
                } else {
                    val tx: Any = if (stx.isNotaryChangeTransaction()) {
                        stx.notaryChangeTx
                    } else {
                        stx.buildFilteredTransaction(Predicate { it is StateRef || it is TimeWindow || it == notaryParty })
                    }
                    session.sendAndReceiveWithRetry(tx)
                }
            } catch (e: NotaryException) {
                if (e.error is NotaryError.Conflict) {
                    e.error.conflict.verified()
                }
                throw e
            }

我们尝试在节点之间互相ping通,使用RPC端口公证1,2和3,所有这些都在监听,但是从错误消息中,我们不确定这是否是由通信/消息传递引起的节点和公证人之间的工作。公证节点正在运行,其日志中没有任何错误。

所以我们想知道使用RPC端口互相ping是否可以确保消息传递在它们之间运行良好?是否有任何方法可以测试是否可以正确发送和接收两个节点(节点和公证)之间的消息传递?非常感谢。

1 个答案:

答案 0 :(得分:0)

Corda 3中存在一个已知错误,即在重新启动Raft公证群集后,它不再为客户端请求提供服务。相反,Raft集群最终被多个领导者划分。

此问题正在Corda的JIRA董事会中进行跟踪:https://r3-cev.atlassian.net/browse/CORDA-1527