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

Reply via email to