ofri masad has posted comments on this change.
Change subject: core: Fast init cache
......................................................................
Patch Set 6: (11 inline comments)
Gilad, Current design uses Quartz to call the cache update every x minutes. the
"factor" helps us determine if cache update is needed (for example: if the
cache only covers about 60% of the quotas available in the DB, a massive cache
update is needed).
....................................................
File backend/manager/dbscripts/create_functions.sql
Line 610:
Line 611: -- Summarize the VCPU usage and the RAM usage for all the VMs in the
quota which are not down or suspended
Line 612: -- If vds group id is null, then returns the global usage of the
quota, otherwise returns only the sum of all VMs in the specific cluster.
Line 613: -- NOTE: VmDynamic status (0/13/14/15) must be persistent with
UpdateVmCommand
Line 614: CREATE OR REPLACE FUNCTION CalculateAllVdsGroupUsage()
Done
Line 615: RETURNS SETOF all_vds_group_usage_rs
Line 616: AS $function$
Line 617: BEGIN
Line 618: RETURN QUERY SELECT
Line 641: CREATE TYPE all_storage_usage_rs AS
Line 642: (quota_storage_id UUID,quota_id UUID,storage_id UUID,storage_name
character varying(250),storage_size_gb BIGINT,storage_size_gb_usage double
precision);
Line 643:
Line 644:
Line 645: CREATE OR REPLACE FUNCTION CalculateAllStorageUsage()
Done
Line 646: RETURNS SETOF all_storage_usage_rs
Line 647: AS $function$
Line 648: BEGIN
Line 649: -- Summarize size of all disks that are active.
....................................................
File backend/manager/dbscripts/quota_sp.sql
Line 70: Create or replace FUNCTION GetQuotaCount()
Line 71: RETURNS SETOF INTEGER
Line 72: AS $procedure$
Line 73: BEGIN
Line 74: RETURN QUERY SELECT cast(count(*) as INTEGER) as num_quota
Done
Line 75: FROM quota;
Line 76: END; $procedure$
Line 77: LANGUAGE plpgsql;
Line 78:
Line 73: BEGIN
Line 74: RETURN QUERY SELECT cast(count(*) as INTEGER) as num_quota
Line 75: FROM quota;
Line 76: END; $procedure$
Line 77: LANGUAGE plpgsql;
Yes but only if (cache size/GetQuotaCount()) > threshold
Line 78:
Line 79: Create or replace FUNCTION GetQuotaStorageByQuotaGuid(v_id UUID)
Line 80: RETURNS SETOF quota_storage_view
Line 81: AS $procedure$
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
Line 228: vmPoolMonitorIntervalInMinutes, TimeUnit.MINUTES);
Line 229:
Line 230: int quotaCacheIntervalInMinutes = Config.<Integer>
GetValue(ConfigValues.QuotaCacheIntervalInMinutes);
Line 231:
SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(QuotaManager.getInstance(),
Line 232: "initializeCache", new Class[] {}, new Object[] {},
Done
Line 233: 1, quotaCacheIntervalInMinutes, TimeUnit.MINUTES);
Line 234:
Line 235: try {
Line 236: File fLock = new File(Config.<String>
GetValue(ConfigValues.SignLockFile));
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java
Line 30:
Line 31: private static final QuotaManagerAuditLogger
quotaManagerAuditLogger = new QuotaManagerAuditLogger();
Line 32: private List<QuotaConsumptionParameter> corruptedParameters = new
ArrayList<QuotaConsumptionParameter>();
Line 33: private static final double MINIMUM_CACHE_FACTOR =
Line 34: (double) Config.<Integer>
GetValue(ConfigValues.MinimumPercentageToUpdateQuotaCache) / 100;
Done
Line 35:
Line 36: public static QuotaManager getInstance() {
Line 37: return INSTANCE;
Line 38: }
Line 986:
Line 987: /**
Line 988: * InitializeCache is called by SchedulerUtilQuartzImpl.
Line 989: */
Line 990: @OnTimerMethodAnnotation("initializeCache")
Done
Line 991: public void initializeCache() {
Line 992: if (!isNeedToInitializeCache()) {
Line 993: return;
Line 994: }
Line 992: if (!isNeedToInitializeCache()) {
Line 993: return;
Line 994: }
Line 995:
Line 996: log.info("Updating Quota Cache...");
Done
Line 997: long timeStart = System.currentTimeMillis();
Line 998: List<Quota> allQuotaIncludingConsumption =
getQuotaDAO().getAllQuotaIncludingConsumption();
Line 999:
Line 1000: if (allQuotaIncludingConsumption.isEmpty()) {
Line 1015: long timeEnd = System.currentTimeMillis();
Line 1016: log.infoFormat("Quota Cache updated. ({0} msec)",
timeEnd-timeStart);
Line 1017: }
Line 1018:
Line 1019: public boolean isNeedToInitializeCache() {
Done
Line 1020: int quotaCount = getQuotaDAO().getQuotaCount();
Line 1021: int cacheCount = 0;
Line 1022:
Line 1023: lock.readLock().lock();
....................................................
File
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/QuotaDAODbFacadeImpl.java
Line 185:
Line 186: @Override
Line 187: public int getQuotaCount() {
Line 188: MapSqlParameterSource parameterSource = new
MapSqlParameterSource();
Line 189: return getCallsHandler().executeRead("GetQuotaCount", new
ParameterizedRowMapper<Integer>() {
Done
Line 190: @Override
Line 191: public Integer mapRow(ResultSet resultSet, int i) throws
SQLException {
Line 192: return (Integer) resultSet.getObject(1);
Line 193: }
Line 212: allQuotaMap.put(quota.getId(), quota);
Line 213: }
Line 214:
Line 215: List<QuotaStorage> quotaStorageList =
getAllQuotaStorageIncludingConsumption();
Line 216: List<QuotaVdsGroup> quotaVdsGroupList =
getALLQuotaVdsGroupIncludingConsumption();
Done
Line 217:
Line 218: if (quotaStorageList != null) {
Line 219: for (QuotaStorage quotaStorage : quotaStorageList) {
Line 220: Quota quota =
allQuotaMap.get(quotaStorage.getQuotaId());
--
To view, visit http://gerrit.ovirt.org/10159
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Id3db08957e413d2f1e0480b764334dd7268c8221
Gerrit-PatchSet: 6
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: ofri masad <[email protected]>
Gerrit-Reviewer: Doron Fediuck <[email protected]>
Gerrit-Reviewer: Eli Mesika <[email protected]>
Gerrit-Reviewer: Gilad Chaplik <[email protected]>
Gerrit-Reviewer: Michael Kublin <[email protected]>
Gerrit-Reviewer: Yair Zaslavsky <[email protected]>
Gerrit-Reviewer: ofri masad <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches