/** {@inheritDoc} */ @Override public long readLockForce(int cacheId, long pageId, long page) { if (rwLock.readLock(page + LOCK_OFFSET, -1)) return page + PAGE_OVERHEAD; return 0L; }
/** {@inheritDoc} */ @Override public long readLock(int cacheId, long pageId, long page) { if (rwLock.readLock(page + LOCK_OFFSET, PageIdUtils.tag(pageId))) return page + PAGE_OVERHEAD; return 0L; }
/** {@inheritDoc} */ @Override public long readLock(long absPtr, long pageId, boolean force, boolean touch) { int tag = force ? -1 : PageIdUtils.tag(pageId); boolean locked = rwLock.readLock(absPtr + PAGE_LOCK_OFFSET, tag); if (!locked) return 0; if (touch) PageHeader.writeTimestamp(absPtr, U.currentTimeMillis()); assert PageIO.getCrc(absPtr + PAGE_OVERHEAD) == 0; //TODO GG-11480 return absPtr + PAGE_OVERHEAD; }
/** {@inheritDoc} */ @Override public long readLockForce(int cacheId, long pageId, long page) { if (rwLock.readLock(page + LOCK_OFFSET, -1)) return page + PAGE_OVERHEAD; return 0L; }
/** {@inheritDoc} */ @Override public long readLock(int cacheId, long pageId, long page) { if (rwLock.readLock(page + LOCK_OFFSET, PageIdUtils.tag(pageId))) return page + PAGE_OVERHEAD; return 0L; }
/** * @param absPtr Absolute pointer to read lock. * @param fullId Full page ID. * @param force Force flag. * @param touch Update page timestamp. * @return Pointer to the page read buffer. */ private long readLockPage(long absPtr, FullPageId fullId, boolean force, boolean touch) { int tag = force ? -1 : PageIdUtils.tag(fullId.pageId()); boolean locked = rwLock.readLock(absPtr + PAGE_LOCK_OFFSET, tag); if (!locked) return 0; if (touch) PageHeader.writeTimestamp(absPtr, U.currentTimeMillis()); assert GridUnsafe.getInt(absPtr + PAGE_OVERHEAD + 4) == 0; //TODO GG-11480 return absPtr + PAGE_OVERHEAD; }