You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/10/08 08:29:57 UTC

ignite git commit: Optimizing snapshot create

Repository: ignite
Updated Branches:
  refs/heads/ignite-gg-14288 [created] d806c8b0f


Optimizing snapshot create


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d806c8b0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d806c8b0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d806c8b0

Branch: refs/heads/ignite-gg-14288
Commit: d806c8b0fb911fb30e37529d8b0033a8949973b7
Parents: 81533dd
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Mon Oct 8 11:29:36 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Mon Oct 8 11:29:36 2018 +0300

----------------------------------------------------------------------
 .../ignite/internal/pagemem/PageSupport.java    | 12 +++++++
 .../pagemem/impl/PageMemoryNoStoreImpl.java     |  7 ++++
 .../persistence/pagemem/PageMemoryImpl.java     | 36 ++++++++++++++++++++
 3 files changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d806c8b0/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
index ed2311f..4044f74 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
@@ -36,6 +36,18 @@ public interface PageSupport {
     public long acquirePage(int grpId, long pageId) throws IgniteCheckedException;
 
     /**
+     * Tries to get the page absolute pointer associated with the given page ID. Each page obtained with this method
+     * must be released by calling {@link #releasePage(int, long, long)}. This method will return -1 if a page with
+     * the given ID was not allocated yet or is not loaded to memory.
+     *
+     * @param grpId Cache group ID.
+     * @param pageId Page ID.
+     * @return Page pointer.
+     * @throws IgniteCheckedException If failed.
+     */
+    public long tryAcquirePage(int grpId, long pageId) throws IgniteCheckedException;
+
+    /**
      *
      * @param grpId Cache group ID.
      * @param pageId Page ID to release.

http://git-wip-us.apache.org/repos/asf/ignite/blob/d806c8b0/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
index 66d713c..b3078be 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
@@ -24,6 +24,8 @@ import java.util.Arrays;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
@@ -332,6 +334,11 @@ public class PageMemoryNoStoreImpl implements PageMemory {
     }
 
     /** {@inheritDoc} */
+    @Override public long tryAcquirePage(int grpId, long pageId) throws IgniteCheckedException {
+        throw new UnsupportedOperationException();
+    }
+
+    /** {@inheritDoc} */
     @Override public int pageSize() {
         return sysPageSize - PAGE_OVERHEAD;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/d806c8b0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
index 55c5fb5..dc4547c 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
@@ -638,6 +638,42 @@ public class PageMemoryImpl implements PageMemoryEx {
     }
 
     /** {@inheritDoc} */
+    @Override public long tryAcquirePage(int grpId, long pageId) throws IgniteCheckedException {
+        int partId = PageIdUtils.partId(pageId);
+
+        if (PageIdUtils.pageIndex(pageId) >= storeMgr.pages(grpId, PageIdUtils.partId(pageId)))
+            return -1;
+
+        Segment seg = segment(grpId, pageId);
+
+        seg.readLock().lock();
+
+        try {
+            long relPtr = seg.loadedPages.get(
+                grpId,
+                PageIdUtils.effectivePageId(pageId),
+                seg.partGeneration(grpId, partId),
+                INVALID_REL_PTR,
+                INVALID_REL_PTR
+            );
+
+            // The page is loaded to the memory.
+            if (relPtr != INVALID_REL_PTR) {
+                long absPtr = seg.absolute(relPtr);
+
+                seg.acquirePage(absPtr);
+
+                return absPtr;
+            }
+
+            return -1;
+        }
+        finally {
+            seg.readLock().unlock();
+        }
+    }
+
+    /** {@inheritDoc} */
     @Override public long acquirePage(int grpId, long pageId, boolean restore) throws IgniteCheckedException {
         FullPageId fullId = new FullPageId(pageId, grpId);