Hello Eli Mesika, Omer Frenkel, Arik Hadas, I'd like you to do a code review. Please visit
https://gerrit.ovirt.org/41041 to review the following change. Change subject: core: Inject QuotaManager and make it a BackendService ...................................................................... core: Inject QuotaManager and make it a BackendService Change-Id: I272f22c4fdbcb96d27e9d5c84a679af4b9f80801 Signed-off-by: Roy Golan <rgo...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveQuotaCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateQuotaCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/quota/QuotaManagerTest.java 10 files changed, 48 insertions(+), 23 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/41041/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java index aa91d18..dc6a690 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java @@ -262,11 +262,8 @@ loadService(VmPoolMonitor.class); loadService(AutoStartVmsRunner.class); + loadService(QuotaManager.class); - int quotaCacheIntervalInMinutes = Config.<Integer>getValue(ConfigValues.QuotaCacheIntervalInMinutes); - SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(QuotaManager.getInstance(), - "updateQuotaCache", new Class[] {}, new Object[] {}, - 1, quotaCacheIntervalInMinutes, TimeUnit.MINUTES); //initializes attestation initAttestation(); updatePredefinedIcons(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java index ba4ea73..4e1e0aa 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java @@ -13,6 +13,7 @@ import javax.annotation.PostConstruct; import javax.ejb.TransactionRolledbackLocalException; +import javax.inject.Inject; import javax.transaction.Status; import javax.transaction.SystemException; import javax.transaction.Transaction; @@ -120,6 +121,8 @@ private TransactionScopeOption scope; private TransactionScopeOption endActionScope; private List<QuotaConsumptionParameter> consumptionParameters; + @Inject + private QuotaManager quotaManager; /** Indicates whether the acquired locks should be released after the execute method or not */ private boolean releaseLocksAtEndOfExecute = true; /** Object which is representing a lock that some commands will acquire */ @@ -2108,7 +2111,7 @@ } protected QuotaManager getQuotaManager() { - return QuotaManager.getInstance(); + return quotaManager; } protected List<SPMAsyncTaskHandler> getTaskHandlers() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java index 1eac907..f0b3fa9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java @@ -4,9 +4,14 @@ import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import javax.inject.Inject; import java.util.List; public class GetQuotasConsumptionForCurrentUserQuery<P extends VdcQueryParametersBase> extends QueriesCommandBase<P> { + + @Inject + private QuotaManager quotaManager; + public GetQuotasConsumptionForCurrentUserQuery(P parameters) { super(parameters); } @@ -14,6 +19,6 @@ @Override protected void executeQueryCommand() { List<Quota> quotaList = getDbFacade().getQuotaDao().getQuotaByAdElementId(getUser().getId(), null, true); - getQueryReturnValue().setReturnValue(QuotaManager.getInstance().generatePerUserUsageReport(quotaList)); + getQueryReturnValue().setReturnValue(quotaManager.generatePerUserUsageReport(quotaList)); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java index 49ac60b..9efc519 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java @@ -10,7 +10,6 @@ import org.ovirt.engine.core.bll.hostdev.HostDeviceManager; import org.ovirt.engine.core.bll.job.ExecutionHandler; import org.ovirt.engine.core.bll.network.host.HostNicVfsConfigHelper; -import org.ovirt.engine.core.bll.quota.QuotaManager; import org.ovirt.engine.core.bll.snapshots.SnapshotsManager; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.ProcessDownVmParameters; @@ -82,7 +81,7 @@ removeVmStatelessImages(); } - QuotaManager.getInstance().rollbackQuotaByVmId(getVmId()); + getQuotaManager().rollbackQuotaByVmId(getVmId()); removeStatelessVmUnmanagedDevices(); boolean vmHasDirectPassthroughDevices = releaseUsedHostDevices(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveQuotaCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveQuotaCommand.java index 4f25b03..0042e74 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveQuotaCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveQuotaCommand.java @@ -3,7 +3,6 @@ import java.util.Collections; import java.util.List; -import org.ovirt.engine.core.bll.quota.QuotaManager; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; @@ -45,7 +44,7 @@ @Override protected void executeCommand() { getQuotaDAO().remove(getParameters().getQuotaId()); - QuotaManager.getInstance().removeQuotaFromCache(getQuota().getStoragePoolId(), getParameters().getQuotaId()); + getQuotaManager().removeQuotaFromCache(getQuota().getStoragePoolId(), getParameters().getQuotaId()); getReturnValue().setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java index 8ce9671..a4fd8b6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java @@ -8,7 +8,6 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; -import org.ovirt.engine.core.bll.quota.QuotaManager; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; @@ -200,7 +199,7 @@ if (dest != null) { quotasToRemoveFromCache.add(dest.getQuotaId()); } - QuotaManager.getInstance().removeQuotaFromCache(getStoragePoolId(), quotasToRemoveFromCache); + getQuotaManager().removeQuotaFromCache(getStoragePoolId(), quotasToRemoveFromCache); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java index 66b0372..de3bba0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java @@ -54,8 +54,12 @@ import org.ovirt.engine.core.utils.linq.Function; import org.ovirt.engine.core.utils.linq.LinqUtils; +import javax.inject.Inject; + public class SearchQuery<P extends SearchParameters> extends QueriesCommandBase<P> { private static final HashMap<String, QueryData> mQueriesCache = new HashMap<String, QueryData>(); + @Inject + private QuotaManager quotaManager; public SearchQuery(P parameters) { super(parameters); @@ -296,7 +300,7 @@ private List<Quota> searchQuota() { List<Quota> quotaList = genericSearch(getDbFacade().getQuotaDao(), true); - QuotaManager.getInstance().updateUsage(quotaList); + quotaManager.updateUsage(quotaList); return quotaList; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateQuotaCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateQuotaCommand.java index 69742b9..4b5c7b0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateQuotaCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateQuotaCommand.java @@ -3,7 +3,6 @@ import java.util.Collections; import java.util.List; -import org.ovirt.engine.core.bll.quota.QuotaManager; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; @@ -50,7 +49,7 @@ } protected void removeQuotaFromCache() { - QuotaManager.getInstance().removeQuotaFromCache(getQuota().getStoragePoolId(), getQuota().getId()); + getQuotaManager().removeQuotaFromCache(getQuota().getStoragePoolId(), getQuota().getId()); } @Override @@ -94,7 +93,7 @@ protected void afterUpdate() { boolean newSizeUnderCurrentConsumption = - QuotaManager.getInstance().isStorageQuotaExceeded(getQuota().getId()); + getQuotaManager().isStorageQuotaExceeded(getQuota().getId()); if (newSizeUnderCurrentConsumption) { AuditLogableBase logable = new AuditLogableBase(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java index 309a2e0..971bb81 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java @@ -5,9 +5,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.BackendService; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.QuotaStorage; @@ -24,12 +26,18 @@ import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dao.QuotaDAO; +import org.ovirt.engine.core.di.qualifier.InMemory; import org.ovirt.engine.core.utils.timer.OnTimerMethodAnnotation; +import org.ovirt.engine.core.utils.timer.SchedulerUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class QuotaManager { - private static final QuotaManager INSTANCE = new QuotaManager(); +import javax.annotation.PostConstruct; +import javax.inject.Inject; +import javax.inject.Singleton; + +@Singleton +public class QuotaManager implements BackendService { private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private final Logger log = LoggerFactory.getLogger(QuotaManager.class); private HashMap<Guid, Map<Guid, Quota>> storagePoolQuotaMap = new HashMap<Guid, Map<Guid, Quota>>(); @@ -37,13 +45,25 @@ private final QuotaManagerAuditLogger quotaManagerAuditLogger = new QuotaManagerAuditLogger(); private final List<QuotaConsumptionParameter> corruptedParameters = new ArrayList<QuotaConsumptionParameter>(); private final List<Integer> nonCountableQutoaVmStatusesList = new ArrayList<Integer>(); + @Inject @InMemory + private SchedulerUtil schedulerUtil; - // Forbid the creation of new instances outside this class - private QuotaManager() { + // constructor is exposed only for Java test. //TODO remove it when arquillian test used. + protected QuotaManager() { } - public static QuotaManager getInstance() { - return INSTANCE; + @PostConstruct + private void init() { + int quotaCacheIntervalInMinutes = Config.<Integer>getValue(ConfigValues.QuotaCacheIntervalInMinutes); + schedulerUtil.scheduleAFixedDelayJob( + this, + "updateQuotaCache", + new Class[] {}, + new Object[] {}, + 1, + quotaCacheIntervalInMinutes, + TimeUnit.MINUTES + ); } protected QuotaManagerAuditLogger getQuotaManagerAuditLogger() { diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/quota/QuotaManagerTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/quota/QuotaManagerTest.java index c5bb523..11a4d04 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/quota/QuotaManagerTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/quota/QuotaManagerTest.java @@ -81,7 +81,7 @@ ); @Spy - private QuotaManager quotaManager = QuotaManager.getInstance(); + private QuotaManager quotaManager = new QuotaManager(); @Spy private QuotaManagerAuditLogger quotaManagerAuditLogger = quotaManager.getQuotaManagerAuditLogger(); -- To view, visit https://gerrit.ovirt.org/41041 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I272f22c4fdbcb96d27e9d5c84a679af4b9f80801 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Roy Golan <rgo...@redhat.com> Gerrit-Reviewer: Arik Hadas <aha...@redhat.com> Gerrit-Reviewer: Eli Mesika <emes...@redhat.com> Gerrit-Reviewer: Omer Frenkel <ofren...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches