Hyperledger fabric 升级链码会删除以前存储在分类账中的数据吗?

Hyperledger fabric 升级链码会删除以前存储在分类账中的数据吗?,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,我正在学习Hyperledger面料。我试着更新FabCar网络的链码。重新启动结构后,我看到存储在分类账中的所有以前的数据都丢失了。 更新链码会导致以前的数据丢失吗?快乐学习 说到你的问题,升级链码是安全的。您只是在更新逻辑,它不会损害您现有的数据,您可能干扰了分类账,这就是它行为不当的原因 您必须发送升级建议才能完成升级过程 链码可以随时通过更改其版本(作为已签名CD的一部分)进行升级。其他部分(如所有者和实例化策略)是可选的。但是,链码名称必须相同;否则,它将被视为一个完全不同的链码 升级

我正在学习Hyperledger面料。我试着更新FabCar网络的链码。重新启动结构后,我看到存储在分类账中的所有以前的数据都丢失了。 更新链码会导致以前的数据丢失吗?

快乐学习

说到你的问题,升级链码是安全的。您只是在更新逻辑,它不会损害您现有的数据,您可能干扰了分类账,这就是它行为不当的原因

您必须发送升级建议才能完成升级过程

链码可以随时通过更改其版本(作为已签名CD的一部分)进行升级。其他部分(如所有者和实例化策略)是可选的。但是,链码名称必须相同;否则,它将被视为一个完全不同的链码

升级之前,必须在所需的背书人上安装新版本的链码。升级是一个类似于实例化事务的事务,它将链码的新版本绑定到通道

快乐学习

说到你的问题,升级链码是安全的。您只是在更新逻辑,它不会损害您现有的数据,您可能干扰了分类账,这就是它行为不当的原因

您必须发送升级建议才能完成升级过程

链码可以随时通过更改其版本(作为已签名CD的一部分)进行升级。其他部分(如所有者和实例化策略)是可选的。但是,链码名称必须相同;否则,它将被视为一个完全不同的链码


升级之前,必须在所需的背书人上安装新版本的链码。升级是一个类似于实例化事务的事务,它将链码的新版本绑定到通道

结构将状态与链代码的版本/实例分离。这使得在不丢失状态的情况下更新链码逻辑成为可能

为此,您需要执行链码升级事务(在此之前,您需要在每个对等机上安装升级的链码)


我的猜测是,你的问题发生了,因为你实际上使网络上下浮动,修改了链码,然后又使其恢复。在样本中,使网络瘫痪通常是一种破坏性的行为
docker compose down实际上会销毁容器实例,这会清除状态数据,除非您使用的是外部卷(示例网络不这样做)。

Fabric将状态与链代码的版本/实例分离。这使得在不丢失状态的情况下更新链码逻辑成为可能

为此,您需要执行链码升级事务(在此之前,您需要在每个对等机上安装升级的链码)


我的猜测是,你的问题发生了,因为你实际上使网络上下浮动,修改了链码,然后又使其恢复。在样本中,使网络瘫痪通常是一种破坏性的行为
docker compose down
实际上会销毁容器实例,从而清除状态数据,除非您使用的是外部卷(示例网络不会这样做)。

谢谢您的回答。我就是这么做的。在生产系统中,如果我们必须这样做,我想您必须设置外部卷?你能再解释一下吗?如果未设置外部卷,如果整个网络以某种方式崩溃,分类账数据是否会丢失?@vvictor是的,如果您未使用外部docker卷或kubernetes pvc'c,则数据将丢失。这意味着在容器销毁时不会持久化数据默认情况下,容器将数据存储在自己的容器文件系统中。如果容器被销毁,容器中的所有数据也将被销毁。如果停止/启动容器和/或容器崩溃,则可以重新启动容器,数据将存在(但不建议依赖于此。谢谢你的回答。这正是我所做的。在生产系统中,如果我们必须这样做,我想你必须设置外部卷?你能解释一下吗?如果没有设置外部卷,如果整个网络以某种方式崩溃,账本数据会丢失吗?@vvictor是,如果您未使用外部docker卷或kubernetes pvc'c,则数据将丢失,这意味着在容器销毁时数据将不会持久化默认情况下,容器将数据存储在其自己的容器文件系统中。如果容器被销毁,则容器中的所有数据也将被销毁。如果您停止/启动容器和/或容器崩溃,然后您可以重新启动容器,数据将存在(但不建议依赖于此)。