Fixed serialization of conflict version.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ba809d22 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ba809d22 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ba809d22 Branch: refs/heads/ignite-2.1.2-exchange Commit: ba809d2276b1cf2ffab4260dfffaf709a7faa37a Parents: 8c04df6 Author: Konstantin Dudkov <[email protected]> Authored: Fri Jun 16 22:27:22 2017 +0300 Committer: devozerov <[email protected]> Committed: Fri Jun 16 22:27:22 2017 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheContext.java | 3 +- .../processors/cache/GridCacheProcessor.java | 7 ++ .../cache/IgniteCacheOffheapManagerImpl.java | 7 +- .../persistence/freelist/FreeListImpl.java | 11 ++- .../persistence/tree/io/CacheVersionIO.java | 99 +++++++++++++++++--- .../cache/transactions/IgniteTxAdapter.java | 31 +++--- .../version/CacheVersionConflictResolver.java | 2 + .../GridCacheLazyPlainVersionedEntry.java | 5 +- .../version/GridCachePlainVersionedEntry.java | 3 +- .../version/GridCacheRawVersionedEntry.java | 5 +- .../GridCacheVersionConflictContext.java | 16 +++- .../cache/version/GridCacheVersionedEntry.java | 4 +- 12 files changed, 151 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java index 2dc575a..33db2ff 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java @@ -1608,7 +1608,8 @@ public class GridCacheContext<K, V> implements Externalizable { GridCacheVersionedEntryEx<K, V> newEntry, boolean atomicVerComp) throws IgniteCheckedException { assert conflictRslvr != null : "Should not reach this place."; - GridCacheVersionConflictContext<K, V> ctx = conflictRslvr.resolve(oldEntry, newEntry, atomicVerComp); + GridCacheVersionConflictContext<K, V> ctx = conflictRslvr.resolve(cacheObjCtx, oldEntry, newEntry, + atomicVerComp); if (ctx.isManualResolve()) drMgr.onReceiveCacheConflictResolved(ctx.isUseNew(), ctx.isUseOld(), ctx.isMerge()); http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index 2729829..6750582 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -3191,6 +3191,13 @@ public class GridCacheProcessor extends GridProcessorAdapter { if (ctx.discovery().localNode().isClient()) { IgniteCacheProxy<K, V> proxy = (IgniteCacheProxy<K, V>)jCacheProxies.get(name); + if (proxy == null) { + GridCacheAdapter<?, ?> cacheAdapter = caches.get(name); + + if (cacheAdapter != null) + proxy = new IgniteCacheProxy(cacheAdapter.context(), cacheAdapter, null, false); + } + assert proxy != null; return proxy.internalProxy(); http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/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 74863f8..e90a6c4 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 @@ -42,6 +42,7 @@ import org.apache.ignite.internal.processors.cache.persistence.CacheSearchRow; import org.apache.ignite.internal.processors.cache.persistence.RootPage; import org.apache.ignite.internal.processors.cache.persistence.RowStore; import org.apache.ignite.internal.processors.cache.persistence.freelist.FreeList; +import org.apache.ignite.internal.processors.cache.persistence.freelist.FreeListImpl; import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree; import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusInnerIO; @@ -1081,14 +1082,12 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager if (oldRow.expireTime() != dataRow.expireTime()) return false; - CacheObjectContext coCtx = cctx.cacheObjectContext(); - - int oldLen = oldRow.key().valueBytesLength(coCtx) + oldRow.value().valueBytesLength(coCtx); + int oldLen = FreeListImpl.getRowSize(oldRow); if (oldLen > updateValSizeThreshold) return false; - int newLen = dataRow.key().valueBytesLength(coCtx) + dataRow.value().valueBytesLength(coCtx); + int newLen = FreeListImpl.getRowSize(dataRow); return oldLen == newLen; } http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java index 4e8b8d8..139c6f3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java @@ -28,6 +28,8 @@ import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertFragmen import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertRecord; import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageRemoveRecord; import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageUpdateRecord; +import org.apache.ignite.internal.processors.cache.CacheObject; +import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow; import org.apache.ignite.internal.processors.cache.persistence.MemoryMetricsImpl; import org.apache.ignite.internal.processors.cache.persistence.MemoryPolicy; @@ -580,9 +582,12 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { * @return Entry size on page. * @throws IgniteCheckedException If failed. */ - private static int getRowSize(CacheDataRow row) throws IgniteCheckedException { - int keyLen = row.key().valueBytesLength(null); - int valLen = row.value().valueBytesLength(null); + public static int getRowSize(CacheDataRow row) throws IgniteCheckedException { + KeyCacheObject key = row.key(); + CacheObject val = row.value(); + + int keyLen = key.valueBytesLength(null); + int valLen = val.valueBytesLength(null); return keyLen + valLen + CacheVersionIO.size(row.version(), false) + 8 + (row.cacheId() == 0 ? 0 : 4); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java index fef5612..d9fdf0e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java @@ -21,6 +21,7 @@ import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; +import org.apache.ignite.internal.processors.cache.version.GridCacheVersionEx; /** * Utility to read and write {@link GridCacheVersion} instances. @@ -30,7 +31,7 @@ public class CacheVersionIO { private static final byte NULL_PROTO_VER = 0; /** */ - private static final byte MAX_PROTO_VER = 1; + private static final byte MAX_PROTO_VER = 2; /** */ private static final int NULL_SIZE = 1; @@ -38,6 +39,9 @@ public class CacheVersionIO { /** Serialized size in bytes. */ private static final int SIZE_V1 = 17; + /** Serialized size in bytes. */ + private static final int SIZE_V2 = 33; + /** * @param ver Version. * @param allowNull Is {@code null} version allowed. @@ -51,7 +55,7 @@ public class CacheVersionIO { throw new IllegalStateException("Cache version is null"); } - return SIZE_V1; + return ver instanceof GridCacheVersionEx ? SIZE_V2 : SIZE_V1; } /** @@ -66,6 +70,18 @@ public class CacheVersionIO { else throw new IllegalStateException("Cache version is null"); } + else if (ver instanceof GridCacheVersionEx) { + byte protoVer = 2; // Version of serialization protocol. + + buf.put(protoVer); + buf.putInt(ver.topologyVersion()); + buf.putInt(ver.nodeOrderAndDrIdRaw()); + buf.putLong(ver.order()); + + buf.putInt(ver.conflictVersion().topologyVersion()); + buf.putInt(ver.conflictVersion().nodeOrderAndDrIdRaw()); + buf.putLong(ver.conflictVersion().order()); + } else { byte protoVer = 1; // Version of serialization protocol. @@ -88,6 +104,18 @@ public class CacheVersionIO { else throw new IllegalStateException("Cache version is null"); } + else if (ver instanceof GridCacheVersionEx) { + byte protoVer = 2; // Version of serialization protocol. + + PageUtils.putByte(addr, 0, protoVer); + PageUtils.putInt(addr, 1, ver.topologyVersion()); + PageUtils.putInt(addr, 5, ver.nodeOrderAndDrIdRaw()); + PageUtils.putLong(addr, 9, ver.order()); + + PageUtils.putInt(addr, 17, ver.conflictVersion().topologyVersion()); + PageUtils.putInt(addr, 21, ver.conflictVersion().nodeOrderAndDrIdRaw()); + PageUtils.putLong(addr, 25, ver.conflictVersion().order()); + } else { byte protoVer = 1; // Version of serialization protocol. @@ -134,6 +162,9 @@ public class CacheVersionIO { case 1: return SIZE_V1; + case 2: + return SIZE_V2; + default: throw new IllegalStateException(); } @@ -151,14 +182,34 @@ public class CacheVersionIO { public static GridCacheVersion read(ByteBuffer buf, boolean allowNull) throws IgniteCheckedException { byte protoVer = checkProtocolVersion(buf.get(), allowNull); - if (protoVer == NULL_PROTO_VER) - return null; + switch (protoVer) { + case NULL_PROTO_VER: + return null; + + case 1: { + int topVer = buf.getInt(); + int nodeOrderDrId = buf.getInt(); + long order = buf.getLong(); + + return new GridCacheVersion(topVer, nodeOrderDrId, order); + } + + case 2: { + int topVer = buf.getInt(); + int nodeOrderDrId = buf.getInt(); + long order = buf.getLong(); + + int conflictTop = buf.getInt(); + int conflictNodeOrderDrId = buf.getInt(); + long conflictOrder = buf.getLong(); - int topVer = buf.getInt(); - int nodeOrderDrId = buf.getInt(); - long order = buf.getLong(); + return new GridCacheVersionEx(topVer, nodeOrderDrId, order, + new GridCacheVersion(conflictTop, conflictNodeOrderDrId, conflictOrder)); + } - return new GridCacheVersion(topVer, nodeOrderDrId, order); + default: + throw new IllegalStateException(); + } } /** @@ -172,13 +223,33 @@ public class CacheVersionIO { public static GridCacheVersion read(long pageAddr, boolean allowNull) throws IgniteCheckedException { byte protoVer = checkProtocolVersion(PageUtils.getByte(pageAddr, 0), allowNull); - if (protoVer == NULL_PROTO_VER) - return null; + switch (protoVer) { + case NULL_PROTO_VER: + return null; + + case 1: { + int topVer = PageUtils.getInt(pageAddr, 1); + int nodeOrderDrId = PageUtils.getInt(pageAddr, 5); + long order = PageUtils.getLong(pageAddr, 9); + + return new GridCacheVersion(topVer, nodeOrderDrId, order); + } + + case 2: { + int topVer = PageUtils.getInt(pageAddr, 1); + int nodeOrderDrId = PageUtils.getInt(pageAddr, 5); + long order = PageUtils.getLong(pageAddr, 9); - int topVer = PageUtils.getInt(pageAddr, 1); - int nodeOrderDrId = PageUtils.getInt(pageAddr, 5); - long order = PageUtils.getLong(pageAddr, 9); + int conflictTop = PageUtils.getInt(pageAddr, 17); + int conflictNodeOrderDrId = PageUtils.getInt(pageAddr, 21); + long conflictOrder = PageUtils.getLong(pageAddr, 25); - return new GridCacheVersion(topVer, nodeOrderDrId, order); + return new GridCacheVersionEx(topVer, nodeOrderDrId, order, + new GridCacheVersion(conflictTop, conflictNodeOrderDrId, conflictOrder)); + } + + default: + throw new IllegalStateException(); + } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java index 96af425..ee8afb0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java @@ -415,24 +415,29 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement */ @SuppressWarnings({"CatchGenericClass"}) protected void uncommit() { - for (IgniteTxEntry e : writeMap().values()) { - try { - GridCacheEntryEx Entry = e.cached(); + try { + for (IgniteTxEntry e : writeMap().values()) { + try { + GridCacheEntryEx Entry = e.cached(); - if (e.op() != NOOP) - Entry.invalidate(null, xidVer); - } - catch (Throwable t) { - U.error(log, "Failed to invalidate transaction entries while reverting a commit.", t); + if (e.op() != NOOP) + Entry.invalidate(null, xidVer); + } + catch (Throwable t) { + U.error(log, "Failed to invalidate transaction entries while reverting a commit.", t); - if (t instanceof Error) - throw (Error)t; + if (t instanceof Error) + throw (Error)t; - break; + break; + } } - } - cctx.tm().uncommitTx(this); + cctx.tm().uncommitTx(this); + } + catch (Exception ex) { + U.error(log, "Failed to do uncommit.", ex); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/CacheVersionConflictResolver.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/CacheVersionConflictResolver.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/CacheVersionConflictResolver.java index 0fb3ebf..0559937 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/CacheVersionConflictResolver.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/CacheVersionConflictResolver.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache.version; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; /** * Cache version conflict resolver. @@ -33,6 +34,7 @@ public interface CacheVersionConflictResolver { * @throws IgniteCheckedException If failed. */ public <K, V> GridCacheVersionConflictContext<K, V> resolve( + CacheObjectValueContext ctx, GridCacheVersionedEntryEx<K, V> oldEntry, GridCacheVersionedEntryEx<K, V> newEntry, boolean atomicVerComparator http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java index dae50bf..0fa2f7e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache.version; import org.apache.ignite.internal.processors.cache.CacheObject; +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.typedef.internal.S; @@ -87,7 +88,7 @@ public class GridCacheLazyPlainVersionedEntry<K, V> extends GridCachePlainVersio } /** {@inheritDoc} */ - @Override public V value() { + @Override public V value(CacheObjectValueContext ctx) { return value(keepBinary); } @@ -108,6 +109,6 @@ public class GridCacheLazyPlainVersionedEntry<K, V> extends GridCachePlainVersio /** {@inheritDoc} */ @Override public String toString() { return S.toString(GridCacheLazyPlainVersionedEntry.class, this, - "super", super.toString(), "key", key(), "val", value()); + "super", super.toString(), "key", key(), "val", value(keepBinary)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java index f4d7e08..d8034a8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.version; +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.jetbrains.annotations.Nullable; @@ -80,7 +81,7 @@ public class GridCachePlainVersionedEntry<K, V> implements GridCacheVersionedEnt } /** {@inheritDoc} */ - @Override public V value() { + @Override public V value(CacheObjectValueContext ctx) { return val; } http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java index 1146496..586a043 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java @@ -26,6 +26,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.GridDirectTransient; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.datastreamer.DataStreamerEntry; import org.apache.ignite.internal.util.typedef.internal.S; @@ -133,8 +134,8 @@ public class GridCacheRawVersionedEntry<K, V> extends DataStreamerEntry implemen } /** {@inheritDoc} */ - @Override public V value() { - return val != null ? val.<V>value(null, false) : null; + @Override public V value(CacheObjectValueContext ctx) { + return val != null ? val.<V>value(ctx, false) : null; } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContext.java index fa40206..c666b1f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContext.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.version; +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.CU; @@ -35,6 +36,9 @@ public class GridCacheVersionConflictContext<K, V> { @GridToStringInclude private final GridCacheVersionedEntry<K, V> newEntry; + /** Object context. */ + private final CacheObjectValueContext ctx; + /** Current state. */ private State state; @@ -54,13 +58,14 @@ public class GridCacheVersionConflictContext<K, V> { * @param oldEntry Old entry. * @param newEntry New entry. */ - public GridCacheVersionConflictContext(GridCacheVersionedEntry<K, V> oldEntry, + public GridCacheVersionConflictContext(CacheObjectValueContext ctx, GridCacheVersionedEntry<K, V> oldEntry, GridCacheVersionedEntry<K, V> newEntry) { assert oldEntry != null && newEntry != null; assert oldEntry.ttl() >= 0 && newEntry.ttl() >= 0; this.oldEntry = oldEntry; this.newEntry = newEntry; + this.ctx = ctx; // Set initial state. useNew(); @@ -85,6 +90,15 @@ public class GridCacheVersionConflictContext<K, V> { } /** + * Gets cache object context. + * + * @return Cache object context. + */ + public CacheObjectValueContext valueContext() { + return ctx; + } + + /** * Force cache to ignore new entry and leave old (existing) entry unchanged. */ public void useOld() { http://git-wip-us.apache.org/repos/asf/ignite/blob/ba809d22/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionedEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionedEntry.java index e685d79..5016393 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionedEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionedEntry.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.version; +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; import org.jetbrains.annotations.Nullable; /** @@ -33,9 +34,10 @@ public interface GridCacheVersionedEntry<K, V> { /** * Gets entry's value. * + * @param ctx Object value context. * @return Entry's value. */ - @Nullable public V value(); + @Nullable public V value(CacheObjectValueContext ctx); /** * Gets entry's TTL.
