Skip to content

Commit 4baf00d

Browse files
ruansteveCopilot
andcommitted
<fix>[compute]: release sdn nics first
Release SDN NICs before removing VmNicVO. Keep NIC deletion on release failure. Resolves: ZCF-2047 Change-Id: I83f534ea19849467a728e3b6fb9ee2f6bb43bb7e Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 2338f5f commit 4baf00d

3 files changed

Lines changed: 8 additions & 6 deletions

File tree

compute/src/main/java/org/zstack/compute/vm/VmCascadeExtension.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.zstack.header.message.MessageReply;
3030
import org.zstack.header.network.l2.L2NetworkConstant;
3131
import org.zstack.header.network.l2.L2NetworkDetachStruct;
32-
import org.zstack.header.network.l2.L2NetworkVO;
3332
import org.zstack.header.network.l3.*;
3433
import org.zstack.header.vm.*;
3534
import org.zstack.header.vm.cdrom.VmCdRomInventory;
@@ -325,6 +324,7 @@ protected List<DetachNicFromVmMsg> handleDeletionForIpRange(List<VmDeletionStruc
325324
}
326325
}
327326

327+
328328
return msgs;
329329
}
330330

@@ -529,7 +529,6 @@ public List<String> getEdgeNames() {
529529
L3NetworkVO.class.getSimpleName(),
530530
IpRangeVO.class.getSimpleName(),
531531
PrimaryStorageVO.class.getSimpleName(),
532-
L2NetworkVO.class.getSimpleName(),
533532
InstanceOfferingVO.class.getSimpleName(),
534533
AccountVO.class.getSimpleName());
535534
}

compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,18 @@ public void run(MessageReply reply) {
9898
}).run(new WhileDoneCompletion(trigger){
9999
@Override
100100
public void done(ErrorCodeList errorCodeList) {
101-
dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class);
102-
103101
callReleaseSdnNics(java.util.Collections.singletonList(nic), new Completion(trigger) {
104102
@Override
105103
public void success() {
104+
dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class);
106105
trigger.next();
107106
}
108107

109108
@Override
110109
public void fail(ErrorCode errorCode) {
111110
logger.warn(String.format("releaseSdnNics failed for nic[uuid:%s]: %s, continue",
112111
nic.getUuid(), errorCode));
112+
dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class);
113113
trigger.next();
114114
}
115115
});

compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,13 @@ public void run(MessageReply reply) {
7979
@Override
8080
public void done(ErrorCodeList errorCodeList) {
8181
List<VmNicInventory> releasedNics = new ArrayList<>();
82+
List<VmNicVO> nicsToDelete = new ArrayList<>();
8283
for (VmNicInventory nic : spec.getVmInventory().getVmNics()) {
8384
VmNicVO vo = dbf.findByUuid(nic.getUuid(), VmNicVO.class);
8485
if (VmInstanceConstant.USER_VM_TYPE.equals(spec.getVmInventory().getType())) {
8586
VmInstanceDeletionPolicy deletionPolicy = getDeletionPolicy(spec, data);
8687
if (deletionPolicy == VmInstanceDeletionPolicy.Direct) {
87-
dbf.remove(vo);
88+
nicsToDelete.add(vo);
8889
} else {
8990
vo.setUsedIpUuid(null);
9091
vo.setIp(null);
@@ -93,20 +94,22 @@ public void done(ErrorCodeList errorCodeList) {
9394
dbf.update(vo);
9495
}
9596
} else {
96-
dbf.remove(vo);
97+
nicsToDelete.add(vo);
9798
}
9899
releasedNics.add(nic);
99100
}
100101

101102
callReleaseSdnNics(releasedNics, new Completion(chain) {
102103
@Override
103104
public void success() {
105+
nicsToDelete.forEach(dbf::remove);
104106
chain.next();
105107
}
106108

107109
@Override
108110
public void fail(ErrorCode errorCode) {
109111
logger.warn(String.format("releaseSdnNics failed: %s, continue anyway", errorCode));
112+
nicsToDelete.forEach(dbf::remove);
110113
chain.next();
111114
}
112115
});

0 commit comments

Comments
 (0)