diff --git a/header/src/main/java/org/zstack/header/host/CommitVolumeSnapshotOnHypervisorMsg.java b/header/src/main/java/org/zstack/header/host/CommitVolumeSnapshotOnHypervisorMsg.java index 4ceb022eab0..52a78f64897 100644 --- a/header/src/main/java/org/zstack/header/host/CommitVolumeSnapshotOnHypervisorMsg.java +++ b/header/src/main/java/org/zstack/header/host/CommitVolumeSnapshotOnHypervisorMsg.java @@ -13,6 +13,7 @@ public class CommitVolumeSnapshotOnHypervisorMsg extends NeedReplyMessage implem private VolumeSnapshotInventory srcSnapshot; private VolumeSnapshotInventory dstSnapshot; private List srcChildrenInstallPathInDb = new ArrayList<>(); + private List chainInstallPathInDb = new ArrayList<>(); @Override public String getHostUuid() { @@ -54,4 +55,12 @@ public List getSrcChildrenInstallPathInDb() { public void setSrcChildrenInstallPathInDb(List srcChildrenInstallPathInDb) { this.srcChildrenInstallPathInDb = srcChildrenInstallPathInDb; } + + public List getChainInstallPathInDb() { + return chainInstallPathInDb; + } + + public void setChainInstallPathInDb(List chainInstallPathInDb) { + this.chainInstallPathInDb = chainInstallPathInDb; + } } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java index 804f30e99cd..a88a4e0525a 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java @@ -3771,6 +3771,7 @@ public static class BlockCommitCmd extends AgentCommand implements HasThreadCont private String top; private String base; private List topChildrenInstallPathInDb = new ArrayList<>(); + private List chainInstallPathInDb = new ArrayList<>(); public String getVmUuid() { return vmUuid; @@ -3811,6 +3812,13 @@ public List getTopChildrenInstallPathInDb() { public void setTopChildrenInstallPathInDb(List topChildrenInstallPathInDb) { this.topChildrenInstallPathInDb = topChildrenInstallPathInDb; } + public List getChainInstallPathInDb() { + return chainInstallPathInDb; + } + + public void setChainInstallPathInDb(List chainInstallPathInDb) { + this.chainInstallPathInDb = chainInstallPathInDb; + } } public static class BlockCommitResponse extends AgentResponse { diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index cff56168939..dd8dbfbf14f 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -1016,6 +1016,7 @@ private void commitVolumeSnapshot(final CommitVolumeSnapshotOnHypervisorMsg msg, cmd.setTop(msg.getSrcSnapshot().getPrimaryStorageInstallPath()); cmd.setBase(msg.getDstSnapshot().getPrimaryStorageInstallPath()); cmd.setTopChildrenInstallPathInDb(msg.getSrcChildrenInstallPathInDb()); + cmd.setChainInstallPathInDb(msg.getChainInstallPathInDb()); FlowChain chain = FlowChainBuilder.newShareFlowChain(); chain.setName(String.format("block-commit-for-volume-%s", msg.getVolume().getUuid())); diff --git a/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotTreeBase.java b/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotTreeBase.java index 56c9dbdee4d..e2b8c52933d 100755 --- a/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotTreeBase.java +++ b/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotTreeBase.java @@ -1019,6 +1019,7 @@ public void run(FlowTrigger trigger, Map data) { cmsg.setSrcSnapshot(srcSnapshotInv); cmsg.setDstSnapshot(dstSnapshotInv); cmsg.setSrcChildrenInstallPathInDb(childrenInstallPath); + cmsg.setChainInstallPathInDb(volumeTree.getAliveChainSnapshotInstallPath()); bus.makeTargetServiceIdByResourceUuid(cmsg, HostConstant.SERVICE_ID, hostUuid); bus.send(cmsg, new CloudBusCallBack(trigger) { @Override diff --git a/storage/src/main/java/org/zstack/storage/snapshot/VolumeTree.java b/storage/src/main/java/org/zstack/storage/snapshot/VolumeTree.java index ea669fd6202..d59d4ea0ca7 100644 --- a/storage/src/main/java/org/zstack/storage/snapshot/VolumeTree.java +++ b/storage/src/main/java/org/zstack/storage/snapshot/VolumeTree.java @@ -361,6 +361,10 @@ public List getAliveChainSnapshotUuids() { return aliveChain.stream().map(VolumeSnapshotInventory::getUuid).collect(Collectors.toList()); } + public List getAliveChainSnapshotInstallPath() { + return aliveChain.stream().map(VolumeSnapshotInventory::getPrimaryStorageInstallPath).collect(Collectors.toList()); + } + public DeleteVolumeSnapshotDirection resolveDirection(String targetSnapshotUuid, String childSnapshotUuid, String initialDirection, boolean targetSnapshotIsLatest, VmInstanceState vmState) { boolean online = (vmState == VmInstanceState.Running || vmState == VmInstanceState.Paused)