Gilad Chaplik has uploaded a new change for review.

Change subject: core: move findActiveISODomain to IsoDomainListSyncronizer (2)
......................................................................

core: move findActiveISODomain to IsoDomainListSyncronizer (2)

To a more suitable place

Change-Id: Icce0924f3b7875752b4ff1df7b55d9e293da5cd6
Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
5 files changed, 66 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/13398/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java
index d8e465f..9f8d32d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java
@@ -39,7 +39,7 @@
                 addCanDoActionMessage(VdcBllMessages.VAR__ACTION__EJECT_CD);
             }
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL);
-        } else if 
((VmRunHandler.getInstance().findActiveISODomain(getVm().getStoragePoolId()) == 
null)
+        } else if 
((IsoDomainListSyncronizer.getInstance().findActiveISODomain(getVm().getStoragePoolId())
 == null)
                 && !StringUtils.isEmpty(mCdImagePath)) {
             addCanDoActionMessage(VdcBllMessages.VAR__ACTION__CHANGE_CD);
             
addCanDoActionMessage(VdcBllMessages.VM_CANNOT_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
index 55e652a..715732e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
@@ -15,12 +15,12 @@
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.ImageType;
 import org.ovirt.engine.core.common.businessentities.RepoFileMetaData;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.utils.Pair;
@@ -33,6 +33,7 @@
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.dao.RepoFileMetaDataDAO;
+import org.ovirt.engine.core.dao.StorageDomainDAO;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
@@ -53,7 +54,7 @@
     private static final Log log = 
LogFactory.getLog(IsoDomainListSyncronizer.class);
     private List<RepoFileMetaData> problematicRepoFileList = new 
ArrayList<RepoFileMetaData>();
     private static final int MIN_TO_MILLISECONDS = 60 * 1000;
-    private static final IsoDomainListSyncronizer isoDomainListSyncronizer = 
new IsoDomainListSyncronizer();
+    private static IsoDomainListSyncronizer isoDomainListSyncronizer;
     private static final ConcurrentMap<Object, Lock> syncDomainForFileTypeMap 
= new ConcurrentHashMap<Object, Lock>();
     private int isoDomainRefreshRate;
     RepoFileMetaDataDAO repoStorageDom;
@@ -73,6 +74,10 @@
      * private constructor to initialize the quartz scheduler
      */
     private IsoDomainListSyncronizer() {
+        init();
+    }
+
+    protected void init() {
         log.info("Start initializing " + getClass().getSimpleName());
         repoStorageDom = DbFacade.getInstance().getRepoFileMetaDataDao();
         isoDomainRefreshRate = Config.<Integer> 
GetValue(ConfigValues.AutoRepoDomainRefreshTime) * MIN_TO_MILLISECONDS;
@@ -91,6 +96,9 @@
      * @return Singleton instance of IsoDomainManager
      */
     public static IsoDomainListSyncronizer getInstance() {
+        if(isoDomainListSyncronizer == null) {
+            isoDomainListSyncronizer = new IsoDomainListSyncronizer();
+        }
         return isoDomainListSyncronizer;
     }
 
@@ -364,7 +372,7 @@
     public List<RepoFileMetaData> 
getCachedIsoListByStoragePoolAndDomainId(Guid isoStoragePoolId, Guid 
isoStorageDomainId, ImageType imageType) {
         List<RepoFileMetaData> fileListMD = new ArrayList<RepoFileMetaData>();
         // Check validation of parameters.
-        if (isoStorageDomainId != null && isoStoragePoolId != null && 
VmRunHandler.getInstance().findActiveISODomain(isoStoragePoolId) != null) {
+        if (isoStorageDomainId != null && isoStoragePoolId != null && 
findActiveISODomain(isoStoragePoolId) != null) {
             // Get all the Iso files of storage and domain ID.
             fileListMD = 
repoStorageDom.getRepoListForStorageDomainAndStoragePool(isoStoragePoolId, 
isoStorageDomainId, imageType);
         }
@@ -739,4 +747,31 @@
         }
         return true;
     }
+
+    /**
+     * Checks if there is an active ISO domain in the storage pool. If so 
returns the Iso Guid, otherwise returns null.
+     * @param storagePoolId
+     *            The storage pool id.
+     * @return Iso Guid of active Iso, and null if not.
+     */
+    public Guid findActiveISODomain(Guid storagePoolId) {
+        Guid isoGuid = null;
+        List<StorageDomain> domains = 
getStorageDomainDAO().getAllForStoragePool(
+                storagePoolId);
+        for (StorageDomain domain : domains) {
+            if (domain.getStorageDomainType() == StorageDomainType.ISO) {
+                StorageDomain sd = 
getStorageDomainDAO().getForStoragePool(domain.getId(),
+                        storagePoolId);
+                if (sd != null && sd.getStatus() == 
StorageDomainStatus.Active) {
+                    isoGuid = sd.getId();
+                    break;
+                }
+            }
+        }
+        return isoGuid;
+    }
+
+    private StorageDomainDAO getStorageDomainDAO() {
+        return DbFacade.getInstance().getStorageDomainDao();
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index affe6b7..06c9cb7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -291,7 +291,7 @@
     private void attachCd() {
         Guid storagePoolId = getVm().getStoragePoolId();
 
-        boolean isIsoFound = 
(getVmRunHandler().findActiveISODomain(storagePoolId) != null);
+        boolean isIsoFound = 
(getIsoDomainListSyncronizer().findActiveISODomain(storagePoolId) != null);
         if (isIsoFound) {
             if (StringUtils.isEmpty(getVm().getCdPath())) {
                 getVm().setCdPath(getVm().getIsoPath());
@@ -307,6 +307,10 @@
             throw new 
VdcBLLException(VdcBllErrors.NO_ACTIVE_ISO_DOMAIN_IN_DATA_CENTER);
         }
 
+    }
+
+    protected IsoDomainListSyncronizer getIsoDomainListSyncronizer() {
+        return IsoDomainListSyncronizer.getInstance();
     }
 
     private void statelessVmTreatment() {
@@ -603,7 +607,7 @@
 
             // Fetch cached Iso files from active Iso domain.
             List<RepoFileMetaData> repoFilesMap =
-                    
IsoDomainListSyncronizer.getInstance().getCachedIsoListByDomainId(isoDomain.getId(),
+                    
getIsoDomainListSyncronizer().getCachedIsoListByDomainId(isoDomain.getId(),
                             ImageType.ISO);
             Version bestClusterVer = null;
             int bestToolVer = 0;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
index faf2caf..8dc2686 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
@@ -84,7 +84,8 @@
             // pool/ISO inactive -
             // you cannot run this VM
 
-            if (boot_sequence == BootSequence.CD && 
findActiveISODomain(storagePoolId) == null) {
+            if (boot_sequence == BootSequence.CD
+                    && 
getIsoDomainListSyncronizer().findActiveISODomain(storagePoolId) == null) {
                 
message.add(VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO.toString());
                 retValue = false;
             } else {
@@ -129,7 +130,8 @@
 
                     // Check if iso and floppy path exists
                     if (retValue && !vm.isAutoStartup()
-                            && 
!validateIsoPath(findActiveISODomain(vm.getStoragePoolId()),
+                            && !validateIsoPath(getIsoDomainListSyncronizer()
+                                    
.findActiveISODomain(vm.getStoragePoolId()),
                                     runParams,
                                     message)) {
                         retValue = false;
@@ -188,6 +190,10 @@
         return retValue;
     }
 
+    protected IsoDomainListSyncronizer getIsoDomainListSyncronizer() {
+        return IsoDomainListSyncronizer.getInstance();
+    }
+
     /**
      * check that we can create snapshots for all disks
      *
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
index bb835d5..4991e62 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
@@ -9,6 +9,7 @@
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -89,6 +90,9 @@
 
     @Mock
     private BackendInternal backend;
+
+    @Mock
+    private IsoDomainListSyncronizer isoDomainListSyncronizer;
 
     private static final String ISO_PREFIX = "iso://";
     private static final String ACTIVE_ISO_PREFIX =
@@ -308,11 +312,16 @@
     public void createCommand() {
         RunVmParams param = new RunVmParams(Guid.NewGuid());
         command = spy(new RunVmCommand<RunVmParams>(param));
-
+        mockIsoDomainListSyncronizer();
         mockVmRunHandler();
         mockSuccessfulRunVmValidator();
         mockSuccessfulSnapshotValidator();
         mockBackend();
+    }
+
+    private void mockIsoDomainListSyncronizer() {
+        doNothing().when(isoDomainListSyncronizer).init();
+        
doReturn(isoDomainListSyncronizer).when(command).getIsoDomainListSyncronizer();
     }
 
     protected void mockVmRunHandler() {
@@ -323,6 +332,9 @@
 
         doReturn(vmRunHandler).when(command).getVmRunHandler();
 
+        doNothing().when(isoDomainListSyncronizer).init();
+        
doReturn(isoDomainListSyncronizer).when(vmRunHandler).getIsoDomainListSyncronizer();
+
         
doReturn(true).when(vmRunHandler).performImageChecksForRunningVm(any(VM.class),
                 anyListOf(String.class),
                 any(RunVmParams.class),


--
To view, visit http://gerrit.ovirt.org/13398
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icce0924f3b7875752b4ff1df7b55d9e293da5cd6
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to