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()); + } }
