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