/** * @param plc data region Configuration. * @param pageMem Page memory. */ protected PageEvictionTracker createPageEvictionTracker(DataRegionConfiguration plc, PageMemory pageMem) { if (plc.getPageEvictionMode() == DataPageEvictionMode.DISABLED || plc.isPersistenceEnabled()) return new NoOpPageEvictionTracker(); assert pageMem instanceof PageMemoryNoStoreImpl : pageMem.getClass(); PageMemoryNoStoreImpl pageMem0 = (PageMemoryNoStoreImpl)pageMem; if (Boolean.getBoolean("override.fair.fifo.page.eviction.tracker")) return new FairFifoPageEvictionTracker(pageMem0, plc, cctx); switch (plc.getPageEvictionMode()) { case RANDOM_LRU: return new RandomLruPageEvictionTracker(pageMem0, plc, cctx); case RANDOM_2_LRU: return new Random2LruPageEvictionTracker(pageMem0, plc, cctx); default: return new NoOpPageEvictionTracker(); } }
/** {@inheritDoc} */ @Override public void touchPage(long pageId) throws IgniteCheckedException { int pageIdx = PageIdUtils.pageIndex(pageId); long latestTs = compactTimestamp(U.currentTimeMillis()); assert latestTs >= 0 && latestTs < Integer.MAX_VALUE; boolean success; do { int trackingIdx = trackingIdx(pageIdx); int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8); int secondTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8 + 4); if (firstTs <= secondTs) success = GridUnsafe.compareAndSwapInt(null, trackingArrPtr + trackingIdx * 8, firstTs, (int)latestTs); else { success = GridUnsafe.compareAndSwapInt( null, trackingArrPtr + trackingIdx * 8 + 4, secondTs, (int)latestTs); } } while (!success); }
if (evictDataPage(pageIdx(lruTrackingIdx))) return;
/** {@inheritDoc} */ @Override public void forgetPage(long pageId) { int pageIdx = PageIdUtils.pageIndex(pageId); int trackingIdx = trackingIdx(pageIdx); GridUnsafe.putLongVolatile(null, trackingArrPtr + trackingIdx * 8, 0L); } }
/** {@inheritDoc} */ @Override protected boolean checkTouch(long pageId) { int trackingIdx = trackingIdx(PageIdUtils.pageIndex(pageId)); int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8); return firstTs != 0; }
/** {@inheritDoc} */ @Override public void touchPage(long pageId) throws IgniteCheckedException { int pageIdx = PageIdUtils.pageIndex(pageId); long latestTs = compactTimestamp(U.currentTimeMillis()); assert latestTs >= 0 && latestTs < Integer.MAX_VALUE; boolean success; do { int trackingIdx = trackingIdx(pageIdx); int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8); int secondTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8 + 4); if (firstTs <= secondTs) success = GridUnsafe.compareAndSwapInt(null, trackingArrPtr + trackingIdx * 8, firstTs, (int)latestTs); else { success = GridUnsafe.compareAndSwapInt( null, trackingArrPtr + trackingIdx * 8 + 4, secondTs, (int)latestTs); } } while (!success); }
if (evictDataPage(pageIdx(lruTrackingIdx))) return;
/** {@inheritDoc} */ @Override protected boolean checkTouch(long pageId) { int trackingIdx = trackingIdx(PageIdUtils.pageIndex(pageId)); int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8); return firstTs != 0; }
/** * @param plc data region Configuration. * @param pageMem Page memory. */ protected PageEvictionTracker createPageEvictionTracker(DataRegionConfiguration plc, PageMemory pageMem) { if (plc.getPageEvictionMode() == DataPageEvictionMode.DISABLED || plc.isPersistenceEnabled()) return new NoOpPageEvictionTracker(); assert pageMem instanceof PageMemoryNoStoreImpl : pageMem.getClass(); PageMemoryNoStoreImpl pageMem0 = (PageMemoryNoStoreImpl)pageMem; if (Boolean.getBoolean("override.fair.fifo.page.eviction.tracker")) return new FairFifoPageEvictionTracker(pageMem0, plc, cctx); switch (plc.getPageEvictionMode()) { case RANDOM_LRU: return new RandomLruPageEvictionTracker(pageMem0, plc, cctx); case RANDOM_2_LRU: return new Random2LruPageEvictionTracker(pageMem0, plc, cctx); default: return new NoOpPageEvictionTracker(); } }
/** {@inheritDoc} */ @Override public void forgetPage(long pageId) { int pageIdx = PageIdUtils.pageIndex(pageId); int trackingIdx = trackingIdx(pageIdx); GridUnsafe.putLongVolatile(null, trackingArrPtr + trackingIdx * 8, 0L); } }