Alona Kaplan has uploaded a new change for review. Change subject: engine: Hot-unplug fails when unplug nic and changing MAC address. ......................................................................
engine: Hot-unplug fails when unplug nic and changing MAC address. Hot-unplug fails when trying to unplug and change MAC address for nic under running VM. When unplugging a nic of a running vm- 1. The db is updated. 2. Unplug action is sent to the host. It means that the vdsm gets unplug with the new mac address (although the vnic is defined on the host with the old one). To solve this issue the old mac address should be sent to the vdsm. Change-Id: I185e5572501ea86443a93f4fdf309e0e05520646 Bug-Url: https://bugzilla.redhat.com/904840 Signed-off-by: Alona Kaplan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ActivateDeactivateVmNicParameters.java 4 files changed, 26 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/12459/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java index f776ebc..f97da21 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java @@ -34,15 +34,19 @@ super(parameters); } - protected boolean activateOrDeactivateNic(Guid nicId, PlugAction plugAction) { + protected boolean activateOrDeactivateNic(Guid nicId, PlugAction plugAction, String oldMacAddress) { VdcReturnValueBase returnValue = getBackend().runInternalAction(VdcActionType.ActivateDeactivateVmNic, - createActivateDeactivateParameters(nicId, plugAction)); + createActivateDeactivateParameters(nicId, plugAction, oldMacAddress)); if (!returnValue.getSucceeded()) { propagateFailure(returnValue); } return returnValue.getSucceeded(); + } + + protected boolean activateOrDeactivateNic(Guid nicId, PlugAction plugAction) { + return activateOrDeactivateNic(nicId, plugAction, null); } @Override @@ -51,9 +55,9 @@ } private ActivateDeactivateVmNicParameters createActivateDeactivateParameters(Guid nicId, - PlugAction plugAction) { + PlugAction plugAction, String oldMacAddress) { ActivateDeactivateVmNicParameters parameters = - new ActivateDeactivateVmNicParameters(nicId, plugAction); + new ActivateDeactivateVmNicParameters(nicId, plugAction, oldMacAddress); parameters.setVmId(getParameters().getVmId()); return parameters; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java index 3036a58..ca5cac5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java @@ -84,10 +84,15 @@ protected void executeVmCommand() { // HotPlug in the host is called only if the Vm is UP if (hotPlugVmNicRequired(getVm().getStatus())) { + VmNetworkInterface nic = getVmNetworkInterfaceDao().get(getParameters().getNicId()); + // Old MAC address is used in case the host is not familiar with the new MAC address + if (getParameters().getOldMacAddress() != null) { + nic.setMacAddress(getParameters().getOldMacAddress()); + } runVdsCommand(getParameters().getAction().getCommandType(), new VmNicDeviceVDSParameters(getVdsId(), getVm(), - getVmNetworkInterfaceDao().get(getParameters().getNicId()), + nic, vmDevice)); } // In any case, the device is updated diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java index 42cd0d1..c3fffd8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java @@ -112,7 +112,7 @@ return activateOrDeactivateNic(getInterface().getId(), PlugAction.PLUG); } case UNPLUG: { - return activateOrDeactivateNic(getInterface().getId(), PlugAction.UNPLUG); + return activateOrDeactivateNic(getInterface().getId(), PlugAction.UNPLUG, oldIface.getMacAddress()); } case UPDATE_VM_DEVICE: { runVdsCommand(VDSCommandType.UpdateVmInterface, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ActivateDeactivateVmNicParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ActivateDeactivateVmNicParameters.java index f3670ce..77f48e4 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ActivateDeactivateVmNicParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ActivateDeactivateVmNicParameters.java @@ -6,11 +6,21 @@ private Guid nicId; private PlugAction action; + private String oldMacAddress; - public ActivateDeactivateVmNicParameters(Guid nicId, PlugAction action) { + public ActivateDeactivateVmNicParameters(Guid nicId, PlugAction action, String oldMacAddress) { super(); this.nicId = nicId; this.action = action; + this.oldMacAddress = oldMacAddress; + } + + public String getOldMacAddress() { + return oldMacAddress; + } + + public void setOldMacAddress(String oldMacAddress) { + this.oldMacAddress = oldMacAddress; } public Guid getNicId() { -- To view, visit http://gerrit.ovirt.org/12459 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I185e5572501ea86443a93f4fdf309e0e05520646 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alona Kaplan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
