diff --git a/compute/src/main/java/org/zstack/compute/vm/TfVmNicFactory.java b/compute/src/main/java/org/zstack/compute/vm/TfVmNicFactory.java
index 26a6ee7644faf51afc2ea2163761e7e13a2bcddd..3280af0cd75fe9afd8eda125ef4995d4234bd4e2 100644
--- a/compute/src/main/java/org/zstack/compute/vm/TfVmNicFactory.java
+++ b/compute/src/main/java/org/zstack/compute/vm/TfVmNicFactory.java
@@ -3,16 +3,9 @@ package org.zstack.compute.vm;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired;
-import org.zstack.core.asyncbatch.While;
import org.zstack.core.cloudbus.CloudBus;
-import org.zstack.core.cloudbus.CloudBusCallBack;
import org.zstack.core.db.DatabaseFacade;
-import org.zstack.header.core.WhileDoneCompletion;
import org.zstack.header.core.workflow.FlowException;
-import org.zstack.header.errorcode.ErrorCodeList;
-import org.zstack.header.host.DetachNicFromVmOnHypervisorMsg;
-import org.zstack.header.host.HostConstant;
-import org.zstack.header.message.MessageReply;
import org.zstack.header.network.l3.UsedIpInventory;
import org.zstack.header.network.l3.UsedIpVO;
import org.zstack.header.vm.*;
@@ -29,7 +22,7 @@ import java.util.List;
import static org.zstack.core.Platform.err;
-public class TfVmNicFactory extends VmNicFactory implements VmJustBeforeDeleteFromDbExtensionPoint {
+public class TfVmNicFactory extends VmNicFactory {
private static final CLogger logger = Utils.getLogger(TfVmNicFactory.class);
private static final VmNicType type = new VmNicType(VmInstanceConstant.TF_VIRTUAL_NIC_TYPE);
@Autowired
@@ -87,35 +80,4 @@ public class TfVmNicFactory extends VmNicFactory implements VmJustBeforeDeleteFr
}
return null;
}
-
- @Override
- public void vmJustBeforeDeleteFromDb(VmInstanceInventory inv) {
- new While<>(inv.getVmNics()).each((nic, wcompl) -> {
- DetachNicFromVmOnHypervisorMsg msg = new DetachNicFromVmOnHypervisorMsg();
- //The host uuid is null, because teh vm is deleted
- msg.setHostUuid(inv.getLastHostUuid());
- msg.setVmInstanceUuid(inv.getUuid());
- msg.setNic(nic);
- bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, msg.getHostUuid());
- bus.send(msg, new CloudBusCallBack(wcompl) {
- @Override
- public void run(MessageReply reply) {
- if (!reply.isSuccess()) {
- wcompl.addError(reply.getError());
- return;
- }
- wcompl.done();
- }
- });
- }).run(new WhileDoneCompletion(null) {
- @Override
- public void done(ErrorCodeList errorCodeList) {
- if (errorCodeList.getCauses().isEmpty()) {
- logger.info("Notify vrouter success before vm expunged.");
- } else {
- logger.error("Notify vrouter fail before vm expunged, error code: " + errorCodeList.getCauses().get(0));
- }
- }
- });
- }
}
diff --git a/conf/springConfigXml/VmInstanceManager.xml b/conf/springConfigXml/VmInstanceManager.xml
index aa7779c609861313418a8ebe2da7df7a16e15d17..4eb2b525d099d3b7d7caf8f15ac3301ca053e610 100755
--- a/conf/springConfigXml/VmInstanceManager.xml
+++ b/conf/springConfigXml/VmInstanceManager.xml
@@ -199,7 +199,6 @@
-
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 ae5d7df6662c2eda7054c9774956b25dd600ac33..81d1e3584a5513439d91140c23bcd5f45575a5bc 100755
--- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java
+++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java
@@ -2380,6 +2380,7 @@ public class KVMAgentCommands {
private String uuid;
private String type;
private long timeout;
+ private List vmNics;
public String getUuid() {
return uuid;
@@ -2404,6 +2405,14 @@ public class KVMAgentCommands {
public void setType(String type) {
this.type = type;
}
+
+ public List getVmNics() {
+ return vmNics;
+ }
+
+ public void setVmNics(List vmNics) {
+ this.vmNics = vmNics;
+ }
}
public static class StopVmResponse extends AgentResponse {
@@ -2494,6 +2503,7 @@ public class KVMAgentCommands {
public static class DestroyVmCmd extends AgentCommand {
private String uuid;
+ private List vmNics;
public String getUuid() {
return uuid;
@@ -2502,6 +2512,15 @@ public class KVMAgentCommands {
public void setUuid(String uuid) {
this.uuid = uuid;
}
+
+ public List getVmNics() {
+ return vmNics;
+ }
+
+ public void setVmNics(List vmNics) {
+ this.vmNics = vmNics;
+ }
+
}
public static class DestroyVmResponse 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 14211e96514449a04295a1d5549b2a42559653d4..67ccdb50ccf2e0cf0f8ee9eabac6d0721961049d 100755
--- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java
+++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java
@@ -2401,6 +2401,7 @@ public class KVMHost extends HostBase implements Host {
DestroyVmCmd cmd = new DestroyVmCmd();
cmd.setUuid(vminv.getUuid());
+ cmd.setVmNics(vminv.getVmNics());
try {
extEmitter.beforeDestroyVmOnKvm(KVMHostInventory.valueOf(getSelf()), vminv, cmd);
@@ -2533,6 +2534,7 @@ public class KVMHost extends HostBase implements Host {
cmd.setUuid(vminv.getUuid());
cmd.setType(msg.getType());
cmd.setTimeout(120);
+ cmd.setVmNics(vminv.getVmNics());
try {
extEmitter.beforeStopVmOnKvm(KVMHostInventory.valueOf(getSelf()), vminv, cmd);
diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java
index 5f779ad8a3db82df234235811737080baba03a36..8cb1602ebaf3b97b7614687c70e4056b17b51d63 100644
--- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java
+++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java
@@ -243,7 +243,7 @@ public class SugonSdnController implements TfSdnController, SdnController {
project.setParent(domain);
project.setUuid(StringDSL.transToTfUuid(account.getUuid()));
project.setDisplayName(account.getName());
- project.setName(account.getName());
+ project.setName(StringDSL.transToTfUuid(account.getUuid()));
Status status = apiConnector.create(project);
if (!status.isSuccess()) {
String message = String.format("create tf project[name:%s] failed due to:%s ",account.getName(), status.getMsg());
diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java
index a86b98823124746e0d6ba40dbacac355fbcd57d7..9b7a397eeb97c927d283fc849c988d94d6414ff0 100644
--- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java
+++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java
@@ -95,6 +95,7 @@ public class TfZstackPortSync implements ManagementNodeReadyExtensionPoint {
logger.info("Port_Sync_Task: begin.");
try {
HashSet portsToDelete = getPortToDelete();
+ int maxDeleteCount = 10;
for (String portUuid: portsToDelete) {
TfPortResponse response = tfPortService.deleteTfPort(portUuid);
if (response.getCode() == 200) {
@@ -104,6 +105,10 @@ public class TfZstackPortSync implements ManagementNodeReadyExtensionPoint {
logger.warn(String.format("Port_Sync_Task: VirtualMachineInterface: %s delete failed," +
" reason: %s.", portUuid, response.getMsg()));
}
+ maxDeleteCount --;
+ if (maxDeleteCount == 0) {
+ break;
+ }
}
} catch (Exception e) {
logger.error(String.format("Port_Sync_Task failed: %s.", e));