ignite-3478

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

Branch: refs/heads/ignite-3478
Commit: 685c688f7a1ec2ea1f5904c5c7df7baff41c15af
Parents: e8a5a08
Author: sboikov <[email protected]>
Authored: Mon Oct 2 12:39:29 2017 +0300
Committer: sboikov <[email protected]>
Committed: Mon Oct 2 12:39:29 2017 +0300

----------------------------------------------------------------------
 .../cache/IgniteCacheOffheapManager.java        | 40 ++++++++++++++-----
 .../cache/IgniteCacheOffheapManagerImpl.java    | 42 ++++++++++++++++++++
 .../persistence/GridCacheOffheapManager.java    | 14 +++++++
 .../processors/cache/tree/MvccDataRow.java      | 34 ++++++++++------
 4 files changed, 108 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/685c688f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
index 3febef7..116f422 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
@@ -17,11 +17,13 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import java.util.List;
 import java.util.Map;
 import javax.cache.Cache;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccCoordinatorVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccCounter;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import org.apache.ignite.internal.processors.cache.persistence.RootPage;
 import org.apache.ignite.internal.processors.cache.persistence.RowStore;
@@ -35,6 +37,7 @@ import 
org.apache.ignite.internal.util.lang.GridCloseableIterator;
 import org.apache.ignite.internal.util.lang.GridCursor;
 import org.apache.ignite.internal.util.lang.GridIterator;
 import org.apache.ignite.internal.util.lang.IgniteInClosure2X;
+import org.apache.ignite.internal.util.typedef.T2;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -111,15 +114,6 @@ public interface IgniteCacheOffheapManager {
     @Nullable public CacheDataRow read(GridCacheContext cctx, KeyCacheObject 
key) throws IgniteCheckedException;
 
     /**
-     * @param cctx Cache context.
-     * @param key Key.
-     * @return Cached row, if available, null otherwise.
-     * @throws IgniteCheckedException If failed.
-     */
-    @Nullable public CacheDataRow mvccRead(GridCacheContext cctx, 
KeyCacheObject key, MvccCoordinatorVersion ver)
-        throws IgniteCheckedException;
-
-    /**
      * @param p Partition.
      * @return Data store.
      * @throws IgniteCheckedException If failed.
@@ -175,6 +169,23 @@ public interface IgniteCacheOffheapManager {
         throws IgniteCheckedException;
 
     /**
+     * @param cctx Cache context.
+     * @param key Key.
+     * @return Cached row, if available, null otherwise.
+     * @throws IgniteCheckedException If failed.
+     */
+    @Nullable public CacheDataRow mvccRead(GridCacheContext cctx, 
KeyCacheObject key, MvccCoordinatorVersion ver)
+        throws IgniteCheckedException;
+
+    /**
+     * @param cctx
+     * @param key
+     * @return
+     */
+    public List<T2<CacheObject, MvccCounter>> mvccAllVersions(GridCacheContext 
cctx, KeyCacheObject key)
+        throws IgniteCheckedException;
+
+    /**
      * @param entry Entry.
      * @param val Value.
      * @param ver Cache version.
@@ -526,6 +537,17 @@ public interface IgniteCacheOffheapManager {
             throws IgniteCheckedException;
 
         /**
+         * For testing only.
+         *
+         * @param cctx Cache context.
+         * @param key Key.
+         * @return All stored versions for given key.
+         * @throws IgniteCheckedException If failed.
+         */
+        List<T2<CacheObject, MvccCounter>> 
mvccFindAllVersions(GridCacheContext cctx, KeyCacheObject key)
+            throws IgniteCheckedException;
+
+        /**
          * @return Data cursor.
          * @throws IgniteCheckedException If failed.
          */

http://git-wip-us.apache.org/repos/asf/ignite/blob/685c688f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index 714c4bc..88aad8e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -17,9 +17,11 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
@@ -38,6 +40,7 @@ import 
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtInvalidPartitionException;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLocalPartition;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccCoordinatorVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccCounter;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccLongList;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import 
org.apache.ignite.internal.processors.cache.persistence.CacheDataRowAdapter;
@@ -68,6 +71,7 @@ import org.apache.ignite.internal.util.lang.GridCursor;
 import org.apache.ignite.internal.util.lang.GridIterator;
 import org.apache.ignite.internal.util.lang.IgniteInClosure2X;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteClosure;
@@ -436,6 +440,15 @@ public class IgniteCacheOffheapManagerImpl implements 
IgniteCacheOffheapManager
         return row;
     }
 
+    /** {@inheritDoc} */
+    @Override public List<T2<CacheObject, MvccCounter>> 
mvccAllVersions(GridCacheContext cctx, KeyCacheObject key)
+        throws IgniteCheckedException {
+        CacheDataStore dataStore = dataStore(cctx, key);
+
+        return dataStore != null ? dataStore.mvccFindAllVersions(cctx, key) :
+            Collections.<T2<CacheObject,MvccCounter>>emptyList();
+    }
+
     /**
      * @param cctx Cache context.
      * @param key Key.
@@ -1652,6 +1665,35 @@ public class IgniteCacheOffheapManagerImpl implements 
IgniteCacheOffheapManager
         }
 
         /** {@inheritDoc} */
+        @Override public List<T2<CacheObject, MvccCounter>> 
mvccFindAllVersions(
+            GridCacheContext cctx,
+            KeyCacheObject key)
+            throws IgniteCheckedException
+        {
+            assert grp.mvccEnabled();
+
+            key.valueBytes(cctx.cacheObjectContext());
+
+            int cacheId = grp.sharedGroup() ? cctx.cacheId() : 
CU.UNDEFINED_CACHE_ID;
+
+            GridCursor<CacheDataRow> cur = dataTree.find(
+                new MvccSearchRow(cacheId, key, Long.MAX_VALUE, 
Long.MAX_VALUE),
+                new MvccSearchRow(cacheId, key, 1, 1));
+
+            List<T2<CacheObject, MvccCounter>> res = new ArrayList<>();
+
+            while (cur.next()) {
+                CacheDataRow row = cur.get();
+
+                MvccCounter mvccCntr = new 
MvccCounter(row.mvccCoordinatorVersion(), row.mvccCounter());
+
+                res.add(new T2<>(row.value(), mvccCntr));
+            }
+
+            return res;
+        }
+
+        /** {@inheritDoc} */
         @Override public CacheDataRow mvccFind(GridCacheContext cctx,
             KeyCacheObject key,
             MvccCoordinatorVersion ver) throws IgniteCheckedException {

http://git-wip-us.apache.org/repos/asf/ignite/blob/685c688f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 93d7f5d..49fb243 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -17,8 +17,10 @@
 
 package org.apache.ignite.internal.processors.cache.persistence;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
@@ -51,6 +53,7 @@ import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLocalP
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccCoordinatorVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccCounter;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.FreeListImpl;
 import 
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryEx;
 import 
org.apache.ignite.internal.processors.cache.persistence.partstate.GroupPartitionId;
@@ -1316,6 +1319,17 @@ public class GridCacheOffheapManager extends 
IgniteCacheOffheapManagerImpl imple
         }
 
         /** {@inheritDoc} */
+        @Override public List<T2<CacheObject, MvccCounter>> 
mvccFindAllVersions(GridCacheContext cctx, KeyCacheObject key)
+            throws IgniteCheckedException {
+            CacheDataStore delegate = init0(true);
+
+            if (delegate != null)
+                return delegate.mvccFindAllVersions(cctx, key);
+
+            return Collections.emptyList();
+        }
+
+        /** {@inheritDoc} */
         @Override public GridCursor<? extends CacheDataRow> cursor() throws 
IgniteCheckedException {
             CacheDataStore delegate = init0(true);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/685c688f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
index 50f1475..eb1ee10 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
@@ -22,6 +22,7 @@ import 
org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import 
org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+import org.apache.ignite.internal.util.typedef.internal.S;
 
 /**
  *
@@ -34,15 +35,15 @@ public class MvccDataRow extends DataRow {
     private long mvccCntr;
 
     /**
-     * @param grp
-     * @param hash
-     * @param link
-     * @param part
-     * @param rowData
-     * @param crdVer
-     * @param mvccCntr
+     * @param grp Context.
+     * @param hash Key hash.
+     * @param link Link.
+     * @param part Partition number.
+     * @param rowData Data.
+     * @param crdVer Mvcc coordinator version.
+     * @param mvccCntr Mvcc counter.
      */
-    public MvccDataRow(CacheGroupContext grp, int hash, long link, int part, 
RowData rowData, long crdVer, long mvccCntr) {
+    MvccDataRow(CacheGroupContext grp, int hash, long link, int part, RowData 
rowData, long crdVer, long mvccCntr) {
         super(grp, hash, link, part, rowData);
 
         assert crdVer > 0 : crdVer;
@@ -53,11 +54,13 @@ public class MvccDataRow extends DataRow {
     }
 
     /**
-     * @param key
-     * @param val
-     * @param ver
-     * @param part
-     * @param cacheId
+     * @param key Key.
+     * @param val Value.
+     * @param ver Version.
+     * @param part Partition.
+     * @param cacheId Cache ID.
+     * @param crdVer Mvcc coordinator version.
+     * @param mvccCntr Mvcc counter.
      */
     public MvccDataRow(KeyCacheObject key,
         CacheObject val,
@@ -81,4 +84,9 @@ public class MvccDataRow extends DataRow {
     @Override public long mvccCounter() {
         return mvccCntr;
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(MvccDataRow.class, this, "super", super.toString());
+    }
 }

Reply via email to