Martin Mucha has uploaded a new change for review. Change subject: core: MacPoolManager-->ScopedMacPoolManager ......................................................................
core: MacPoolManager-->ScopedMacPoolManager replace use of MacPoolManager with ScopedMacPoolManager alter commands dealing with DataCenter to include calls to create/modify/remove pool settings related to them Change-Id: I779f4d031409fbc422077ddf291fa34f955f3206 Bug-Url: https://bugzilla.redhat.com/1078844 Signed-off-by: Martin Mucha <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java 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/AddVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java 18 files changed, 128 insertions(+), 70 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/00/26800/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java index 457fa7f..df375cc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java @@ -11,8 +11,9 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.network.MacPoolManager; import org.ovirt.engine.core.bll.network.VmInterfaceManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaSanityParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; @@ -669,9 +670,7 @@ } protected boolean verifyAddVM(List<String> reasons, int vmPriority) { - return VmHandler.verifyAddVm(reasons, - getVmInterfaces().size(), - vmPriority); + return VmHandler.verifyAddVm(reasons, getVmInterfaces().size(), vmPriority, getMacPool()); } @Override @@ -794,7 +793,7 @@ VmInterfaceManager vmInterfaceManager = new VmInterfaceManager(); vmInterfaceManager.sortVmNics(nics, getVmInterfaceDevices()); - List<String> macAddresses = MacPoolManager.getInstance().allocateMacAddresses(nics.size()); + List<String> macAddresses = getMacPool().allocateMacAddresses(nics.size()); // Add interfaces from template for (int i = 0; i < nics.size(); ++i) { @@ -813,6 +812,10 @@ } } + private MacPoolManagerStrategy getMacPool() { + return ScopedMacPoolManager.scopeFor().storagePool(getStoragePoolId()).getPool(); + } + protected void addVmInit() { VmHandler.addVmInitToDB(getParameters().getVmStaticData()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java index bb8260d..c8b49ec 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java @@ -8,6 +8,8 @@ import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.job.ExecutionContext; import org.ovirt.engine.core.bll.job.ExecutionHandler; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; @@ -292,11 +294,13 @@ } protected boolean verifyAddVM() { - return VmHandler.verifyAddVm - (getReturnValue().getCanDoActionMessages(), - getParameters().getVmsCount() - * getVmNicDao().getAllForTemplate(getVmTemplateId()).size(), - getParameters().getVmStaticData().getPriority()); + final MacPoolManagerStrategy macPool = ScopedMacPoolManager.scopeFor().vm(getVm()).getPool(); + final List<String> reasons = getReturnValue().getCanDoActionMessages(); + final int nicsCount = getParameters().getVmsCount() + * getVmNicDao().getAllForTemplate(getVmTemplateId()).size(); + final int priority = getParameters().getVmStaticData().getPriority(); + + return VmHandler.verifyAddVm(reasons, nicsCount, priority, macPool); } protected boolean areTemplateImagesInStorageReady(Guid storageId) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java index ad98302..951e8f2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java @@ -14,7 +14,8 @@ import org.ovirt.engine.core.bll.job.ExecutionContext; import org.ovirt.engine.core.bll.job.ExecutionHandler; import org.ovirt.engine.core.bll.memory.MemoryUtils; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.network.VmInterfaceManager; import org.ovirt.engine.core.bll.network.vm.VnicProfileHelper; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; @@ -107,6 +108,7 @@ private final List<String> macsAdded = new ArrayList<String>(); private final SnapshotsManager snapshotsManager = new SnapshotsManager(); + protected MacPoolManagerStrategy macPool; public ImportVmCommand(T parameters) { super(parameters); @@ -117,6 +119,7 @@ super.init(parameters); setVmId(parameters.getContainerId()); setVm(parameters.getVm()); + macPool = ScopedMacPoolManager.scopeFor().vm(getParameters().getVm()).getPool(); setVdsGroupId(parameters.getVdsGroupId()); if (parameters.getVm() != null && getVm().getDiskMap() != null) { imageList = new ArrayList<DiskImage>(); @@ -190,7 +193,8 @@ if (getParameters().isImportAsNewEntity()) { initImportClonedVm(); - if (getVm().getInterfaces().size() > MacPoolManager.getInstance().getAvailableMacsCount()) { + final VM vm = getVm(); + if (vm.getInterfaces().size() > macPool.getAvailableMacsCount()) { addCanDoActionMessage(VdcBllMessages.MAC_POOL_NOT_ENOUGH_MAC_ADDRESSES); return false; } @@ -651,7 +655,7 @@ // Save Vm Init VmHandler.addVmInitToDB(getVm().getStaticData()); } catch (RuntimeException e) { - MacPoolManager.getInstance().freeMacs(macsAdded); + macPool.freeMacs(macsAdded); throw e; } @@ -1076,7 +1080,7 @@ // If we import it as a new entity, then we allocate all MAC addresses in advance if (getParameters().isImportAsNewEntity()) { - List<String> macAddresses = MacPoolManager.getInstance().allocateMacAddresses(nics.size()); + List<String> macAddresses = macPool.allocateMacAddresses(nics.size()); for (int i = 0; i < nics.size(); ++i) { nics.get(i).setMacAddress(macAddresses.get(i)); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java index c95aa36..38ce0cf 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java @@ -9,11 +9,13 @@ import javax.ejb.Singleton; import javax.ejb.Startup; +import org.ovirt.engine.api.extensions.Extension.ExtensionProperties; +import org.ovirt.engine.core.aaa.AuthenticationProfile; import org.ovirt.engine.core.aaa.AuthenticationProfileRepository; import org.ovirt.engine.core.bll.dwh.DwhHeartBeat; import org.ovirt.engine.core.bll.gluster.GlusterJobsManager; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.provider.ExternalTrustStoreInitializer; import org.ovirt.engine.core.bll.scheduling.MigrationHandler; import org.ovirt.engine.core.bll.scheduling.SchedulingManager; @@ -78,7 +80,7 @@ ThreadPoolUtil.execute(new Runnable() { @Override public void run() { - MacPoolManager.getInstance().initialize(); + ScopedMacPoolManager.initialize(); } }); StoragePoolStatusHandler.init(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java index bce37f4..9dbfb4d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java @@ -11,7 +11,8 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.snapshots.SnapshotsManager; import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase; import org.ovirt.engine.core.bll.utils.PermissionSubject; @@ -352,9 +353,10 @@ } protected void fillMacAddressIfMissing(VmNic iface) { + final MacPoolManagerStrategy pool = ScopedMacPoolManager.scopeFor().vmNic(iface).getPool(); if (StringUtils.isEmpty(iface.getMacAddress()) - && (MacPoolManager.getInstance().getAvailableMacsCount() >= 1)) { - iface.setMacAddress(MacPoolManager.getInstance().allocateNewMac()); + && (pool.getAvailableMacsCount() >= 1)) { + iface.setMacAddress(pool.allocateNewMac()); } } @@ -373,7 +375,9 @@ freeMacs++; } } - if (freeMacs > 0 && !(MacPoolManager.getInstance().getAvailableMacsCount() >= freeMacs)) { + final Guid storagePoolId = getParameters().getStoragePoolId(); + final MacPoolManagerStrategy macPool = ScopedMacPoolManager.scopeFor().storagePool(storagePoolId).getPool(); + if (freeMacs > 0 && !(macPool.getAvailableMacsCount() >= freeMacs)) { addCanDoActionMessage(VdcBllMessages.MAC_POOL_NOT_ENOUGH_MAC_ADDRESSES); return false; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java index f02027f..32f103a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java @@ -4,7 +4,8 @@ import java.util.List; import java.util.Set; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.snapshots.SnapshotsManager; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.FeatureSupported; @@ -227,8 +228,9 @@ protected void removeVmNetwork() { if (getInterfaces() != null) { + final MacPoolManagerStrategy macPool = ScopedMacPoolManager.scopeFor().vm(getVm()).getPool(); for (VmNic iface : getInterfaces()) { - MacPoolManager.getInstance().freeMac(iface.getMacAddress()); + macPool.freeMac(iface.getMacAddress()); } } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index 14c7f87..6f5bdcf 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -11,7 +11,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CompensationContext; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.bll.validator.VmValidationUtils; import org.ovirt.engine.core.common.AuditLogType; @@ -145,10 +145,10 @@ * @return */ public static boolean verifyAddVm(List<String> reasons, - int nicsCount, - int vmPriority) { + int nicsCount, + int vmPriority, MacPoolManagerStrategy macPool) { boolean returnValue = true; - if (MacPoolManager.getInstance().getAvailableMacsCount() < nicsCount) { + if (macPool.getAvailableMacsCount() < nicsCount) { if (reasons != null) { reasons.add(VdcBllMessages.MAC_POOL_NOT_ENOUGH_MAC_ADDRESSES.toString()); } @@ -388,7 +388,7 @@ public static void updateVmGuestAgentVersion(final VM vm) { if (vm.getAppList() != null) { final String[] parts = vm.getAppList().split("[,]", -1); - if (parts != null && parts.length != 0) { + if (parts.length != 0) { final List<String> possibleAgentAppNames = Config.<List<String>> getValue(ConfigValues.AgentAppName); final Map<String, String> spiceDriversInGuest = Config.<Map<String, String>> getValue(ConfigValues.SpiceDriverNameInGuest); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java index 3178634..b837232 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java @@ -64,10 +64,13 @@ Version clusterCompatibilityVersion) { if (reserveExistingMac) { + final MacPoolManagerStrategy macPoolManager = getMacPoolManager(iface.getVmId()); + final String ifaceMacAddress = iface.getMacAddress(); + if (FeatureSupported.hotPlug(clusterCompatibilityVersion) && getOsRepository().hasNicHotplugSupport(osId, clusterCompatibilityVersion)) { - getMacPoolManager().forceAddMac(iface.getMacAddress()); - } else if (!getMacPoolManager().addMac(iface.getMacAddress())) { + macPoolManager.forceAddMac(ifaceMacAddress); + } else if (!macPoolManager.addMac(ifaceMacAddress)) { auditLogMacInUse(iface); throw new VdcBLLException(VdcBllErrors.MAC_ADDRESS_IS_IN_USE); } @@ -122,8 +125,9 @@ if (interfaces != null) { removeFromExternalNetworks(interfaces); + final MacPoolManagerStrategy macPool = getMacPoolManager(vmId); for (VmNic iface : interfaces) { - getMacPoolManager().freeMac(iface.getMacAddress()); + macPool.freeMac(iface.getMacAddress()); getVmNicDao().remove(iface.getId()); getVmNetworkStatisticsDao().remove(iface.getId()); } @@ -224,8 +228,8 @@ AuditLogDirector.log(logable, auditLogType); } - protected MacPoolManagerStrategy getMacPoolManager() { - return MacPoolManager.getInstance(); + protected MacPoolManagerStrategy getMacPoolManager(Guid vmId) { + return ScopedMacPoolManager.scopeFor().vm(vmId).getPool(); } protected VmNetworkStatisticsDao getVmNetworkStatisticsDao() { 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 3434a43..b79869b 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 @@ -5,7 +5,7 @@ import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.VmCommand; import org.ovirt.engine.core.bll.VmHandler; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.common.action.ActivateDeactivateVmNicParameters; import org.ovirt.engine.core.common.action.AddVmInterfaceParameters; @@ -55,17 +55,17 @@ addCanDoActionMessage(VdcBllMessages.VAR__TYPE__INTERFACE); } - protected boolean addMacToPool(String macAddress) { - if (MacPoolManager.getInstance().addMac(macAddress)) { + protected boolean addMacToPool(String macAddress, MacPoolManagerStrategy macPool) { + if (macPool.addMac(macAddress)) { return true; } else { throw new VdcBLLException(VdcBllErrors.MAC_ADDRESS_IS_IN_USE); } } - protected ValidationResult macAvailable() { + protected ValidationResult macAvailable(MacPoolManagerStrategy macPool) { Boolean allowDupMacs = Config.<Boolean> getValue(ConfigValues.AllowDuplicateMacAddresses); - return MacPoolManager.getInstance().isMacInUse(getMacAddress()) && !allowDupMacs + return macPool.isMacInUse(getMacAddress()) && !allowDupMacs ? new ValidationResult(VdcBllMessages.NETWORK_MAC_ADDRESS_IN_USE) : ValidationResult.VALID; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java index 6c35399..e905055 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java @@ -5,7 +5,8 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.bll.validator.VmNicValidator; @@ -17,6 +18,7 @@ import org.ovirt.engine.core.common.businessentities.VmDeviceId; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VmNic; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.validation.group.CreateEntity; @@ -34,46 +36,55 @@ @Override protected void executeVmCommand() { + final VmNetworkInterface anInterface = getInterface(); + final VmStatic vmStatic = getVmStaticDAO().get(getParameters().getVmId()); addCustomValue("InterfaceType", - (VmInterfaceType.forValue(getInterface().getType()).getDescription()).toString()); - this.setVmName(getVmStaticDAO().get(getParameters().getVmId()).getName()); + (VmInterfaceType.forValue(anInterface.getType()).getDescription()).toString()); + this.setVmName(vmStatic.getName()); boolean succeeded = false; boolean macAddedToPool = false; + final String macAddress = getMacAddress(); + final MacPoolManagerStrategy pool = getMacPoolManager(); try { - if (StringUtils.isEmpty(getMacAddress())) { - getInterface().setMacAddress(MacPoolManager.getInstance().allocateNewMac()); + if (StringUtils.isEmpty(macAddress)) { + + anInterface.setMacAddress(pool.allocateNewMac()); macAddedToPool = true; } else { - macAddedToPool = addMacToPool(getMacAddress()); + macAddedToPool = addMacToPool(macAddress, getMacPoolManager()); } - getInterface().setSpeed(VmInterfaceType.forValue(getInterface().getType()).getSpeed()); - getInterface().setId(Guid.newGuid()); - getInterface().setVmId(getParameters().getVmId()); + anInterface.setSpeed(VmInterfaceType.forValue(anInterface.getType()).getSpeed()); + anInterface.setId(Guid.newGuid()); + anInterface.setVmId(getParameters().getVmId()); TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - addInterfaceToDb(getInterface()); + addInterfaceToDb(anInterface); addInterfaceDeviceToDb(); getCompensationContext().stateChanged(); return null; } }); - if (getInterface().isPlugged()) { - succeeded = activateOrDeactivateNewNic(getInterface(), PlugAction.PLUG); + if (anInterface.isPlugged()) { + succeeded = activateOrDeactivateNewNic(anInterface, PlugAction.PLUG); } else { succeeded = true; } } finally { setSucceeded(succeeded); if (macAddedToPool && !succeeded) { - MacPoolManager.getInstance().freeMac(getMacAddress()); + pool.freeMac(macAddress); } } + } + + protected MacPoolManagerStrategy getMacPoolManager() { + return ScopedMacPoolManager.scopeFor().vm(getVm()).getPool(); } private void addInterfaceDeviceToDb() { @@ -140,10 +151,10 @@ } if (StringUtils.isNotEmpty(getMacAddress())) { - if (!validate(macAvailable())) { + if (!validate(macAvailable(getMacPoolManager()))) { return false; } - } else if (MacPoolManager.getInstance().getAvailableMacsCount() <= 0) { + } else if (getMacPoolManager().getAvailableMacsCount() <= 0){ addCanDoActionMessage(VdcBllMessages.MAC_POOL_NOT_ENOUGH_MAC_ADDRESSES); return false; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java index d3f7bb0..4cf89ab 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java @@ -3,7 +3,7 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VmCommand; import org.ovirt.engine.core.bll.network.ExternalNetworkManager; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.RemoveVmInterfaceParameters; import org.ovirt.engine.core.common.businessentities.VMStatus; @@ -37,7 +37,7 @@ new ExternalNetworkManager(iface).deallocateIfExternal(); // return mac to pool - MacPoolManager.getInstance().freeMac(iface.getMacAddress()); + ScopedMacPoolManager.scopeFor().vmNic(iface).getPool().freeMac(iface.getMacAddress()); interfaceName = iface.getName(); // Get Interface type. 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 2edb943..d396910 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 @@ -8,7 +8,8 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.network.ExternalNetworkManager; -import org.ovirt.engine.core.bll.network.MacPoolManager; +import org.ovirt.engine.core.bll.network.MacPoolManagerStrategy; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.network.cluster.NetworkHelper; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.VmNicValidator; @@ -75,6 +76,8 @@ boolean succeeded = false; boolean macAddedToPool = false; + final MacPoolManagerStrategy macPool = ScopedMacPoolManager.scopeFor().vm(getVm()).getPool(); + try { if (isVnicProfileChanged(oldIface, getInterface())) { Network newNetwork = NetworkHelper.getNetworkByVnicProfileId(getInterface().getVnicProfileId()); @@ -85,7 +88,7 @@ } if (macShouldBeChanged) { - macAddedToPool = addMacToPool(getMacAddress()); + macAddedToPool = addMacToPool(getMacAddress(), macPool); } if (mustChangeAddress(oldIface.getType(), getInterface().getType())) { @@ -109,9 +112,9 @@ setSucceeded(succeeded); if (macAddedToPool) { if (succeeded) { - MacPoolManager.getInstance().freeMac(oldIface.getMacAddress()); + macPool.freeMac(oldIface.getMacAddress()); } else { - MacPoolManager.getInstance().freeMac(getMacAddress()); + macPool.freeMac(getMacAddress()); } } } @@ -159,6 +162,8 @@ addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); return false; } + + final MacPoolManagerStrategy macPool = ScopedMacPoolManager.scopeFor().vm(getVm()).getPool(); if (!canRunActionOnNonManagedVm()) { return false; @@ -224,7 +229,7 @@ } macShouldBeChanged = !StringUtils.equals(oldIface.getMacAddress(), getMacAddress()); - if (macShouldBeChanged && !validate(macAvailable())) { + if (macShouldBeChanged && !validate(macAvailable(macPool))) { return false; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java index 203f02d..0229e77 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java @@ -5,6 +5,7 @@ import org.ovirt.engine.core.bll.AddVdsGroupCommand; import org.ovirt.engine.core.bll.MultiLevelAdministrationHandler; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.network.cluster.NetworkHelper; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VersionSupport; @@ -36,6 +37,9 @@ protected void executeCommand() { setDataCenterDetails(); addStoragePoolToDb(); + + ScopedMacPoolManager.scopeFor().storagePool(getStoragePool().getId()).createPool(getStoragePool().getMacPoolRanges()); //TODO MM: handle rollbacks! + getReturnValue().setActionReturnValue(getStoragePool().getId()); addDefaultNetworks(); setSucceeded(true); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java index fe353d9..11e2f41 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java @@ -12,8 +12,8 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.network.ExternalNetworkManager; -import org.ovirt.engine.core.bll.network.MacPoolManager; -import org.ovirt.engine.core.bll.validator.StorageDomainValidator; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; +import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.DetachStorageDomainFromPoolParameters; import org.ovirt.engine.core.common.action.RemoveStorageDomainParameters; @@ -62,12 +62,13 @@ @Override protected void executeCommand() { - List<String> macsToRemove = getVmNicDao().getAllMacsByDataCenter(getStoragePool().getId()); + final Guid storagePoolId = getStoragePool().getId(); + List<String> macsToRemove = getVmNicDao().getAllMacsByDataCenter(storagePoolId); removeNetworks(); /** * Detach master storage domain last. */ - List<StorageDomain> storageDomains = getStorageDomainDAO().getAllForStoragePool(getStoragePool().getId()); + List<StorageDomain> storageDomains = getStorageDomainDAO().getAllForStoragePool(storagePoolId); Collections.sort(storageDomains, new Comparator<StorageDomain>() { @Override public int compare(StorageDomain o1, StorageDomain o2) { @@ -87,8 +88,9 @@ } } - getStoragePoolDAO().remove(getStoragePool().getId()); - MacPoolManager.getInstance().freeMacs(macsToRemove); + getStoragePoolDAO().remove(storagePoolId); + ScopedMacPoolManager.scopeFor().storagePool(storagePoolId).getPool().freeMacs(macsToRemove); + ScopedMacPoolManager.scopeFor().storagePool(storagePoolId).removePool(); //TODO MM: handle rollbacks! setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java index 0ffe4b4..e8f943a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java @@ -453,7 +453,7 @@ /** @return The supported storage domain formats, delimited by commas (","). */ protected String getSupportedStorageFormats(Version version) { - return Config.<String> getValue(ConfigValues.SupportedStorageFormats, version.toString()); + return Config.getValue(ConfigValues.SupportedStorageFormats, version.toString()); } /* Overidden DAO access methods, for easier testing */ diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java index c7a2166..d575cfd 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java @@ -6,6 +6,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.RenamedEntityInfoProvider; +import org.ovirt.engine.core.bll.network.ScopedMacPoolManager; import org.ovirt.engine.core.bll.utils.VersionSupport; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; @@ -71,6 +72,7 @@ getStoragePoolDAO().updatePartial(getStoragePool()); updateStoragePoolFormatType(); + ScopedMacPoolManager.scopeFor().storagePool(getStoragePool().getId()).modifyPool(getStoragePool().getMacPoolRanges()); //TODO MM: handle rollbacks! setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java index 7111bd6..920f7b9 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java @@ -61,8 +61,10 @@ @ClassRule public static MockConfigRule mcr = new MockConfigRule( - mockConfig(ConfigValues.VirtIoScsiEnabled, Version.v3_2.toString(), false) - ); + mockConfig(ConfigValues.VirtIoScsiEnabled, Version.v3_2.toString(), false), + mockConfig(ConfigValues.MacPoolRanges, "00:1a:4a:15:c0:00-00:1a:4a:15:c0:ff"), + mockConfig(ConfigValues.MaxMacsCountInPool, 100000), + mockConfig(ConfigValues.AllowDuplicateMacAddresses, false)); @Rule public RandomUtilsSeedingRule rusr = new RandomUtilsSeedingRule(); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java index 9aa3316..521a7e0 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java @@ -20,6 +20,7 @@ import org.junit.ClassRule; import org.junit.Test; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.mockito.verification.VerificationMode; @@ -37,6 +38,7 @@ import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao; import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDao; import org.ovirt.engine.core.dao.network.VmNicDao; +import org.ovirt.engine.core.utils.MacAddressRangeUtils; import org.ovirt.engine.core.utils.MockConfigRule; import org.ovirt.engine.core.utils.RandomUtils; @@ -84,7 +86,7 @@ public void setupMocks() { MockitoAnnotations.initMocks(this); - doReturn(macPoolManagerStrategy).when(vmInterfaceManager).getMacPoolManager(); + doReturn(macPoolManagerStrategy).when(vmInterfaceManager).getMacPoolManager(Mockito.any(Guid.class)); doReturn(vmNetworkStatisticsDAO).when(vmInterfaceManager).getVmNetworkStatisticsDao(); doReturn(vmNetworkInterfaceDAO).when(vmInterfaceManager).getVmNetworkInterfaceDao(); doReturn(vmNicDao).when(vmInterfaceManager).getVmNicDao(); @@ -193,7 +195,14 @@ protected VmNic createNewInterface() { VmNic iface = new VmNic(); iface.setId(Guid.newGuid()); - iface.setMacAddress(RandomUtils.instance().nextString(10)); + + final long from = MacAddressRangeUtils.macStringToLong("00:1A:4A:01:00:00"); + final int MAX_MACS_IN_POOL = 100000; + + final int rndInt = RandomUtils.instance().nextInt(MAX_MACS_IN_POOL); + long macLong = from + rndInt; + + iface.setMacAddress(MacAddressRangeUtils.macAddressToString(macLong)); return iface; } -- To view, visit http://gerrit.ovirt.org/26800 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I779f4d031409fbc422077ddf291fa34f955f3206 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Mucha <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
