/** * @param pageMem Page memory. * @param cacheId Cache ID. * @param pageId Page ID. * @param page Page pointer. * @param pageAddr Page address (for-write pointer) * @param lsnr Lock listener. */ public static void readUnlock( PageMemory pageMem, int cacheId, long pageId, long page, long pageAddr, PageLockListener lsnr) { lsnr.onReadUnlock(cacheId, pageId, page, pageAddr); pageMem.readUnlock(cacheId, pageId, page); }
/** * @param mem Page memory. * @param pageId Page ID. * @param page Page pointer. * @param expVal Expected value. */ private void readPage(PageMemory mem, long pageId, long page, int expVal) { expVal &= 0xFF; long pageAddr = mem.readLock(-1, pageId, page); assert pageAddr != 0; try { for (int i = PageIO.COMMON_HEADER_END; i < PAGE_SIZE; i++) { int val = PageUtils.getByte(pageAddr, i) & 0xFF; assertEquals("Unexpected value at position: " + i, expVal, val); } } finally { mem.readUnlock(-1, pageId, page); } }
/** * Update page * * @param link Link. * @throws IgniteCheckedException On error. */ private void touch(long link) throws IgniteCheckedException { PageMemory mem = grpCtx.dataRegion().pageMemory(); int grpId = grpCtx.groupId(); final long pageId = PageIdUtils.pageId(link); final long page = mem.acquirePage(grpId, pageId); try { // Touch page timestamp mem.readLock(grpId, pageId, page); mem.readUnlock(grpId, pageId, page); } finally { mem.releasePage(grpId, pageId, page); } } }
pageMem.readUnlock(grpId, pageId, page);
pageMem.readUnlock(grpId, pageId, page);
pageMemory.readUnlock(grp.groupId(), pageId, page);
pageMem.readUnlock(grpId, pageId, page);
@Override public Object call() throws Exception { IgniteCacheDatabaseSharedManager db = ignite.context().cache().context().database(); for (int i = start; i < end; i++) { db.checkpointReadLock(); try { final FullPageId fullId = pageIds.get(i); long page = memory.acquirePage(fullId.groupId(), fullId.pageId()); try { final long pageAddr = memory.readLock(fullId.groupId(), fullId.pageId(), page); try { assertEquals(i * 2, PageUtils.getLong(pageAddr, PageIO.COMMON_HEADER_END)); } finally { memory.readUnlock(fullId.groupId(), fullId.pageId(), page); } } finally { memory.releasePage(fullId.groupId(), fullId.pageId(), page); } } finally { db.checkpointReadUnlock(); } } return null; } });
mem.readUnlock(fullId.groupId(), fullId.pageId(), page);
pageMem.readUnlock(fullPageId.groupId(), fullPageId.pageId(), rmtPage);
mem.readUnlock(id.groupId(), id.pageId(), pageApsPtr); mem.readUnlock(id.groupId(), id.pageId(), pageApsPtr);
/** * @param ig Ig. * @param pages Pages. */ private void checkRestore(IgniteEx ig, FullPageId[] pages) throws IgniteCheckedException { GridCacheSharedContext<Object, Object> shared = ig.context().cache().context(); GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)shared.database(); dbMgr.enableCheckpoints(false).get(); PageMemory mem = shared.database().dataRegion(null).pageMemory(); dbMgr.checkpointReadLock(); try { for (FullPageId fullId : pages) { long page = mem.acquirePage(fullId.groupId(), fullId.pageId()); try { long pageAddr = mem.readLock(fullId.groupId(), fullId.pageId(), page); for (int j = PageIO.COMMON_HEADER_END; j < mem.realPageSize(fullId.groupId()); j += 4) assertEquals(j + (int)fullId.pageId(), PageUtils.getInt(pageAddr, j)); mem.readUnlock(fullId.groupId(), fullId.pageId(), page); } finally { mem.releasePage(fullId.groupId(), fullId.pageId(), page); } } } finally { dbMgr.checkpointReadUnlock(); } }
/** * @param pageMem Page memory. * @param cacheId Cache ID. * @param pageId Page ID. * @param page Page pointer. * @param pageAddr Page address (for-write pointer) * @param lsnr Lock listener. */ public static void readUnlock( PageMemory pageMem, int cacheId, long pageId, long page, long pageAddr, PageLockListener lsnr) { lsnr.onReadUnlock(cacheId, pageId, page, pageAddr); pageMem.readUnlock(cacheId, pageId, page); }
/** * Update page * * @param link Link. * @throws IgniteCheckedException On error. */ private void touch(long link) throws IgniteCheckedException { PageMemory mem = grpCtx.dataRegion().pageMemory(); int grpId = grpCtx.groupId(); final long pageId = PageIdUtils.pageId(link); final long page = mem.acquirePage(grpId, pageId); try { // Touch page timestamp mem.readLock(grpId, pageId, page); mem.readUnlock(grpId, pageId, page); } finally { mem.releasePage(grpId, pageId, page); } } }
pageMem.readUnlock(grpId, pageId, page);
pageMemory.readUnlock(grp.groupId(), pageId, page);
pageMem.readUnlock(grpId, pageId, page);
pageMem.readUnlock(grpId, pageId, page);