美文网首页Corda 学习
R3 Corda: 升级 CorDapp(非平台版本升级)- f

R3 Corda: 升级 CorDapp(非平台版本升级)- f

作者: 李甲川 | 来源:发表于2018-09-05 22:36 被阅读0次

原文地址:https://docs.corda.net/upgrading-cordapps.html#flow-drains

一个 flow 检查点(checkpoint)是一个序列化的 flow 的堆栈结构(stack frames) 和 任何可以从堆栈中拿到的对象的 snapshot。检查点会在一个 flow 挂起后者恢复的时候被自动存到数据中,这个通常会在发送或者接收消息的时候发生。当节点重启的时候,一个 flow 可能会从最后一个检查点开始重新运行。自动的创建检查点是 Corda 提供的 一个非常规的功能,这会很大地帮助开发者编写可靠的代码来确保当节点重启或者 crash 之后节点还能够继续正常运行。这个也帮助了向上扩展(scaling up),因为当 flows 在等待一个 response 的时候,他们会被从内存中清理掉。

然而,这也意味着将 flow 从一个旧版本恢复到一个新的版本的时候,可能会造成重启失败。比如如果你从一个方法中删除了一个本地变量,这个变量在以前的版本中是有的,那么 flow 引擎是无法找出之前存储的变量值应该放在哪里的。

因此,在当前版本的 Corda 中,在做一个改变了 @Suspendable 代码更新的一个应用升级之前,你必须要排空节点。排空操作会组织开始一个的 flows,但是仍旧允许完成已经存在的 flows。因此当一次排空操作完成的时候,就不应该有任何特别的检查点或者是正在运行的 flows 了。这样升级应用才会成功。

一个节点可以使用 setFlowsDrainingModeEnabled 方法来决定要排空还是不要排空,这个可以通过 shell ,使用标准的 run 命令来调用 RPC 来实现。

相关文章

网友评论

    本文标题:R3 Corda: 升级 CorDapp(非平台版本升级)- f

    本文链接:https://www.haomeiwen.com/subject/pywzwftx.html