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));