ignite-db-x Made H2RowStore abstract to be reused from core module.

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

Branch: refs/heads/ignite-db-x-10884
Commit: fc2d77d4a027e81f56a12733b11525a414249ecf
Parents: 2f7a22c
Author: sboikov <[email protected]>
Authored: Tue Apr 19 15:27:39 2016 +0300
Committer: sboikov <[email protected]>
Committed: Tue Apr 19 15:27:39 2016 +0300

----------------------------------------------------------------------
 .../processors/cache/database/RowStore.java     | 100 ++-----------------
 .../query/h2/database/H2RowStore.java           |  89 ++++++++++++-----
 2 files changed, 69 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/fc2d77d4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/RowStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/RowStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/RowStore.java
index 50bf490..2ea2ee4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/RowStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/RowStore.java
@@ -19,18 +19,15 @@ package 
org.apache.ignite.internal.processors.cache.database;
 
 import java.nio.ByteBuffer;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.pagemem.FullPageId;
 import org.apache.ignite.internal.pagemem.Page;
 import org.apache.ignite.internal.pagemem.PageIdAllocator;
 import org.apache.ignite.internal.pagemem.PageMemory;
-import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.CacheObjectContext;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.database.freelist.FreeList;
 import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO;
 import 
org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 
 import static org.apache.ignite.internal.pagemem.PageIdUtils.dwordsOffset;
 import static 
org.apache.ignite.internal.pagemem.PageIdUtils.linkFromDwordOffset;
@@ -42,24 +39,21 @@ import static 
org.apache.ignite.internal.processors.cache.database.tree.util.Pag
  */
 public class RowStore<T extends CacheDataRow> {
     /** */
-    private final FreeList freeList;
+    protected final FreeList freeList;
 
     /** */
-    private final PageMemory pageMem;
+    protected final PageMemory pageMem;
 
     /** */
-    private final GridCacheContext<?,?> cctx;
+    protected final GridCacheContext<?,?> cctx;
 
     /** */
-    private final CacheObjectContext coctx;
+    protected final CacheObjectContext coctx;
 
     /** */
     private volatile long lastDataPageId;
 
     /** */
-    private final RowFactory<T> rowFactory;
-
-    /** */
     private final PageHandler<CacheDataRow> writeRow = new 
PageHandler<CacheDataRow>() {
         @Override public int run(Page page, ByteBuffer buf, CacheDataRow row, 
int ignore) throws IgniteCheckedException {
             int entrySize = DataPageIO.getEntrySize(coctx, row.key(), 
row.value());
@@ -94,13 +88,11 @@ public class RowStore<T extends CacheDataRow> {
     /**
      * @param cctx Cache context.
      */
-    public RowStore(GridCacheContext<?,?> cctx, RowFactory<T> rowFactory, 
FreeList freeList) {
-        assert rowFactory != null;
+    public RowStore(GridCacheContext<?,?> cctx, FreeList freeList) {
         assert cctx != null;
 
         this.cctx = cctx;
         this.freeList = freeList;
-        this.rowFactory = rowFactory;
 
         coctx = cctx.cacheObjectContext();
         pageMem = cctx.shared().database().pageMemory();
@@ -111,7 +103,7 @@ public class RowStore<T extends CacheDataRow> {
      * @return Page.
      * @throws IgniteCheckedException If failed.
      */
-    private Page page(long pageId) throws IgniteCheckedException {
+    protected final Page page(long pageId) throws IgniteCheckedException {
         return pageMem.page(new FullPageId(pageId, cctx.cacheId()));
     }
 
@@ -139,63 +131,6 @@ public class RowStore<T extends CacheDataRow> {
     }
 
     /**
-     * !!! This method must be invoked in read or write lock of referring 
index page. It is needed to
-     * !!! make sure that row at this link will be invisible, when the link 
will be removed from
-     * !!! from all the index pages, so that row can be safely erased from the 
data page.
-     *
-     * @param link Link.
-     * @return Row.
-     * @throws IgniteCheckedException If failed.
-     */
-    public T getRow(long link) throws IgniteCheckedException {
-        try (Page page = page(pageId(link))) {
-            ByteBuffer buf = page.getForRead();
-
-            try {
-                T existing = rowFactory.cachedRow(link);
-
-                if (existing != null)
-                    return existing;
-
-                DataPageIO io = DataPageIO.VERSIONS.forPage(buf);
-
-                int dataOff = io.getDataOffset(buf, dwordsOffset(link));
-
-                buf.position(dataOff);
-
-                // Skip entry size.
-                buf.getShort();
-
-                CacheObject key = coctx.processor().toCacheObject(coctx, buf);
-                CacheObject val = coctx.processor().toCacheObject(coctx, buf);
-
-                int topVer = buf.getInt();
-                int nodeOrderDrId = buf.getInt();
-                long globalTime = buf.getLong();
-                long order = buf.getLong();
-
-                GridCacheVersion ver = new GridCacheVersion(topVer, 
nodeOrderDrId, globalTime, order);
-
-                T row;
-
-                try {
-                    row = rowFactory.createRow(key, val, ver, link, 0);
-                }
-                catch (IgniteCheckedException e) {
-                    throw new IgniteException(e);
-                }
-
-                assert row.version() != null : row;
-
-                return row;
-            }
-            finally {
-                page.releaseRead();
-            }
-        }
-    }
-
-    /**
      * @param expLastDataPageId Expected last data page ID.
      * @return Next data page ID.
      */
@@ -247,27 +182,4 @@ public class RowStore<T extends CacheDataRow> {
             nextDataPage(pageId, row.partition());
         }
     }
-
-    /**
-     *
-     */
-    protected interface RowFactory<T> {
-        /**
-         * @param link Link.
-         * @return Row.
-         */
-        T cachedRow(long link);
-
-        /**
-         * @param key Key.
-         * @param val Value.
-         * @param ver Version.
-         * @param link Link.
-         * @param expirationTime Expiration time.
-         * @return Row.
-         * @throws IgniteCheckedException If failed.
-         */
-        T createRow(CacheObject key, CacheObject val, GridCacheVersion ver, 
long link, long expirationTime)
-            throws IgniteCheckedException;
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/fc2d77d4/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowStore.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowStore.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowStore.java
index 2495237..cd0cc4b 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowStore.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowStore.java
@@ -17,62 +17,99 @@
 
 package org.apache.ignite.internal.processors.query.h2.database;
 
+import java.nio.ByteBuffer;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.pagemem.Page;
 import org.apache.ignite.internal.pagemem.PageIdUtils;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.database.RowStore;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.processors.cache.database.freelist.FreeList;
+import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2RowDescriptor;
 
+import static org.apache.ignite.internal.pagemem.PageIdUtils.dwordsOffset;
+import static org.apache.ignite.internal.pagemem.PageIdUtils.pageId;
+
 /**
  * Data store for H2 rows.
  */
 public class H2RowStore extends RowStore<GridH2Row> {
+    /** */
+    private final GridH2RowDescriptor rowDesc;
+
     /**
      * @param rowDesc Row descriptor.
      * @param cctx Cache context.
      * @param freeList Free list.
      */
     public H2RowStore(GridH2RowDescriptor rowDesc, GridCacheContext<?,?> cctx, 
FreeList freeList) {
-        super(cctx, new H2RowFactory(rowDesc), freeList);
+        super(cctx, freeList);
+
+        this.rowDesc = rowDesc;
     }
+
     /**
+     * !!! This method must be invoked in read or write lock of referring 
index page. It is needed to
+     * !!! make sure that row at this link will be invisible, when the link 
will be removed from
+     * !!! from all the index pages, so that row can be safely erased from the 
data page.
      *
+     * @param link Link.
+     * @return Row.
+     * @throws IgniteCheckedException If failed.
      */
-    static class H2RowFactory implements RowFactory<GridH2Row> {
-        /** */
-        private final GridH2RowDescriptor rowDesc;
+    public GridH2Row getRow(long link) throws IgniteCheckedException {
+        try (Page page = page(pageId(link))) {
+            ByteBuffer buf = page.getForRead();
 
-        /**
-         * @param rowDesc Row descriptor.
-         */
-        public H2RowFactory(GridH2RowDescriptor rowDesc) {
-            assert rowDesc != null;
+            try {
+                GridH2Row existing = rowDesc.cachedRow(link);
 
-            this.rowDesc = rowDesc;
-        }
+                if (existing != null)
+                    return existing;
 
-        /** {@inheritDoc} */
-        @Override public GridH2Row cachedRow(long link) {
-            return rowDesc.cachedRow(link);
-        }
+                DataPageIO io = DataPageIO.VERSIONS.forPage(buf);
+
+                int dataOff = io.getDataOffset(buf, dwordsOffset(link));
+
+                buf.position(dataOff);
+
+                // Skip entry size.
+                buf.getShort();
+
+                CacheObject key = coctx.processor().toCacheObject(coctx, buf);
+                CacheObject val = coctx.processor().toCacheObject(coctx, buf);
+
+                int topVer = buf.getInt();
+                int nodeOrderDrId = buf.getInt();
+                long globalTime = buf.getLong();
+                long order = buf.getLong();
+
+                GridCacheVersion ver = new GridCacheVersion(topVer, 
nodeOrderDrId, globalTime, order);
+
+                GridH2Row row;
+
+                try {
+                    row = rowDesc.createRow(key, PageIdUtils.partId(link), 
val, ver, 0);
 
-        /** {@inheritDoc} */
-        @Override public GridH2Row createRow(CacheObject key,
-            CacheObject val,
-            GridCacheVersion ver,
-            long link,
-            long expirationTime) throws IgniteCheckedException {
-            GridH2Row row = rowDesc.createRow(key, PageIdUtils.partId(link), 
val, ver, 0);
+                    row.link = link;
+                }
+                catch (IgniteCheckedException e) {
+                    throw new IgniteException(e);
+                }
 
-            row.link = link;
+                assert row.ver != null;
 
-            rowDesc.cache(row);
+                rowDesc.cache(row);
 
-            return row;
+                return row;
+            }
+            finally {
+                page.releaseRead();
+            }
         }
     }
 }

Reply via email to