Skip to content

Commit

Permalink
GG-11547 - New semantics for page RW locks
Browse files Browse the repository at this point in the history
  • Loading branch information
agoncharuk committed Sep 26, 2016
1 parent 6a29d2d commit d144923
Show file tree
Hide file tree
Showing 4 changed files with 406 additions and 86 deletions.
Expand Up @@ -345,8 +345,8 @@ public long acquiredPages() {
/**
* @param absPtr Page absolute address.
*/
void readLockPage(long absPtr) {
rwLock.readLock(absPtr + LOCK_OFFSET);
boolean readLockPage(long absPtr, int tag) {
return rwLock.readLock(absPtr + LOCK_OFFSET, tag);
}

/**
Expand All @@ -359,23 +359,23 @@ void readUnlockPage(long absPtr) {
/**
* @param absPtr Page absolute address.
*/
void writeLockPage(long absPtr) {
rwLock.writeLock(absPtr + LOCK_OFFSET);
boolean writeLockPage(long absPtr, int tag) {
return rwLock.writeLock(absPtr + LOCK_OFFSET, tag);
}

/**
* @param absPtr Page absolute address.
* @return {@code True} if locked page.
*/
boolean tryWriteLockPage(long absPtr) {
return rwLock.tryWriteLock(absPtr + LOCK_OFFSET);
boolean tryWriteLockPage(long absPtr, int tag) {
return rwLock.tryWriteLock(absPtr + LOCK_OFFSET, tag);
}

/**
* @param absPtr Page absolute address.
*/
void writeUnlockPage(long absPtr) {
rwLock.writeUnlock(absPtr + LOCK_OFFSET);
void writeUnlockPage(long absPtr, int newTag) {
rwLock.writeUnlock(absPtr + LOCK_OFFSET, newTag);
}

/**
Expand Down Expand Up @@ -696,7 +696,7 @@ private long allocateFreePage() throws GridOffHeapOutOfMemoryException {

GridUnsafe.putLong(absPtr, PAGE_MARKER);

rwLock.init(absPtr + LOCK_OFFSET);
rwLock.init(absPtr + LOCK_OFFSET, 0);

allocatedPages.incrementAndGet();

Expand Down
Expand Up @@ -19,6 +19,8 @@

import org.apache.ignite.internal.pagemem.FullPageId;
import org.apache.ignite.internal.pagemem.Page;
import org.apache.ignite.internal.pagemem.PageIdUtils;
import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO;
import org.apache.ignite.internal.util.typedef.internal.SB;

import java.nio.ByteBuffer;
Expand Down Expand Up @@ -73,9 +75,10 @@ public PageNoStoreImpl(PageMemoryNoStoreImpl pageMem, int segIdx, long absPtr, i

/** {@inheritDoc} */
@Override public ByteBuffer getForRead() {
pageMem.readLockPage(absPtr);
if (pageMem.readLockPage(absPtr, PageIdUtils.itemId(pageId)))
return reset(buf.asReadOnlyBuffer());

return reset(buf.asReadOnlyBuffer());
return null;
}

/** {@inheritDoc} */
Expand All @@ -85,22 +88,25 @@ public PageNoStoreImpl(PageMemoryNoStoreImpl pageMem, int segIdx, long absPtr, i

/** {@inheritDoc} */
@Override public ByteBuffer getForWrite() {
pageMem.writeLockPage(absPtr);
if (pageMem.writeLockPage(absPtr, PageIdUtils.itemId(pageId)))
return reset(buf);

return reset(buf);
return null;
}

/** {@inheritDoc} */
@Override public ByteBuffer tryGetForWrite() {
if (pageMem.tryWriteLockPage(absPtr))
if (pageMem.tryWriteLockPage(absPtr, PageIdUtils.itemId(pageId)))
return reset(buf);

return null;
}

/** {@inheritDoc} */
@Override public void releaseWrite(boolean markDirty) {
pageMem.writeUnlockPage(absPtr);
long updatedPageId = PageIO.getPageId(buf);

pageMem.writeUnlockPage(absPtr, PageIdUtils.itemId(updatedPageId));
}

/** {@inheritDoc} */
Expand Down

0 comments on commit d144923

Please sign in to comment.