/** * */ private void startDataRegions() { for (DataRegion region : dataRegionMap.values()) { region.pageMemory().start(); region.evictionTracker().start(); } }
/** * @param shutdown {@code True} to force memory regions shutdown. */ private void onDeActivate(boolean shutdown) { for (DatabaseLifecycleListener lsnr : getDatabaseListeners(cctx.kernalContext())) lsnr.beforeStop(this); for (DataRegion region : dataRegionMap.values()) { region.pageMemory().stop(shutdown); region.evictionTracker().stop(); unregisterMetricsMBean( cctx.gridConfig(), MBEAN_GROUP_NAME, region.memoryMetrics().getName() ); } dataRegionMap.clear(); if (shutdown && memProviderMap != null) memProviderMap.clear(); dataRegionsInitialized = false; dataRegionsStarted = false; }
/** * @param row Row. * @param key Key. * @throws IgniteCheckedException If failed. */ private void afterRowFound(@Nullable CacheDataRow row, KeyCacheObject key) throws IgniteCheckedException { if (row != null) { row.key(key); grp.dataRegion().evictionTracker().touchPage(row.link()); } }
/** * See {@link GridCacheMapEntry#ensureFreeSpace()} * * @param memPlc data region. */ public void ensureFreeSpace(DataRegion memPlc) throws IgniteCheckedException { if (memPlc == null) return; DataRegionConfiguration plcCfg = memPlc.config(); if (plcCfg.getPageEvictionMode() == DataPageEvictionMode.DISABLED || plcCfg.isPersistenceEnabled()) return; long memorySize = plcCfg.getMaxSize(); PageMemory pageMem = memPlc.pageMemory(); int sysPageSize = pageMem.systemPageSize(); CacheFreeListImpl freeListImpl = freeListMap.get(plcCfg.getName()); for (;;) { long allocatedPagesCnt = pageMem.loadedPages(); int emptyDataPagesCnt = freeListImpl.emptyDataPages(); boolean shouldEvict = allocatedPagesCnt > (memorySize / sysPageSize * plcCfg.getEvictionThreshold()) && emptyDataPagesCnt < plcCfg.getEmptyPagesPoolSize(); if (shouldEvict) { warnFirstEvict(plcCfg); memPlc.evictionTracker().evictDataPage(); memPlc.memoryMetrics().updateEvictionRate(); } else break; } }
/** * See {@link GridCacheMapEntry#ensureFreeSpace()} * * @param memPlc data region. */ public void ensureFreeSpace(DataRegion memPlc) throws IgniteCheckedException { if (memPlc == null) return; DataRegionConfiguration plcCfg = memPlc.config(); if (plcCfg.getPageEvictionMode() == DataPageEvictionMode.DISABLED || plcCfg.isPersistenceEnabled()) return; long memorySize = plcCfg.getMaxSize(); PageMemory pageMem = memPlc.pageMemory(); int sysPageSize = pageMem.systemPageSize(); CacheFreeListImpl freeListImpl = freeListMap.get(plcCfg.getName()); for (;;) { long allocatedPagesCnt = pageMem.loadedPages(); int emptyDataPagesCnt = freeListImpl.emptyDataPages(); boolean shouldEvict = allocatedPagesCnt > (memorySize / sysPageSize * plcCfg.getEvictionThreshold()) && emptyDataPagesCnt < plcCfg.getEmptyPagesPoolSize(); if (shouldEvict) { warnFirstEvict(plcCfg); memPlc.evictionTracker().evictDataPage(); memPlc.memoryMetrics().updateEvictionRate(); } else break; } }
/** * @param row Row. * @param key Key. * @throws IgniteCheckedException If failed. */ private void afterRowFound(@Nullable CacheDataRow row, KeyCacheObject key) throws IgniteCheckedException { if (row != null) { row.key(key); grp.dataRegion().evictionTracker().touchPage(row.link()); } }
/** * */ private void startMemoryPolicies() { for (DataRegion memPlc : dataRegionMap.values()) { memPlc.pageMemory().start(); memPlc.evictionTracker().start(); } }
/** * @param shutdown Shutdown. */ private void onDeActivate(boolean shutdown) { for (DatabaseLifecycleListener lsnr : getDatabaseListeners(cctx.kernalContext())) lsnr.beforeStop(this); if (dataRegionMap != null) { for (DataRegion memPlc : dataRegionMap.values()) { memPlc.pageMemory().stop(shutdown); memPlc.evictionTracker().stop(); unregisterMBean(memPlc.memoryMetrics().getName()); } dataRegionMap.clear(); dataRegionMap = null; if (shutdown && memProviderMap != null) { memProviderMap.clear(); memProviderMap = null; } dataRegionsInitialized = false; } }