/** {@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); }
/** {@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 forgetPage(long pageId) { int pageIdx = PageIdUtils.pageIndex(pageId); int trackingIdx = trackingIdx(pageIdx); GridUnsafe.putLongVolatile(null, trackingArrPtr + trackingIdx * 8, 0L); } }
/** {@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); }