# IGNITE-200: Removed cache versioned entry.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/d70e59f0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d70e59f0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d70e59f0 Branch: refs/heads/ignite-128 Commit: d70e59f0867306f48859763444c10315dabca0c0 Parents: 4e60207 Author: vozerov-gridgain <voze...@gridgain.com> Authored: Tue Feb 10 15:15:26 2015 +0300 Committer: vozerov-gridgain <voze...@gridgain.com> Committed: Tue Feb 10 15:15:26 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheContext.java | 4 +- .../processors/cache/GridCacheMapEntry.java | 2 +- .../cache/GridCacheUpdateAtomicResult.java | 6 +- .../GridDistributedTxRemoteAdapter.java | 4 +- .../dht/atomic/GridDhtAtomicCache.java | 4 +- .../cache/transactions/IgniteTxAdapter.java | 6 +- .../transactions/IgniteTxLocalAdapter.java | 4 +- ...ridCacheVersionAbstractConflictResolver.java | 6 +- .../GridCacheVersionConflictContext.java | 166 +++++++++++++++- .../GridCacheVersionConflictContextImpl.java | 187 ------------------- .../GridCacheVersionConflictResolver.java | 2 +- 11 files changed, 175 insertions(+), 216 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/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 21e572d..8fe80e3 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 @@ -1581,11 +1581,11 @@ public class GridCacheContext<K, V> implements Externalizable { * @return Conflict resolution result. * @throws IgniteCheckedException In case of exception. */ - public GridCacheVersionConflictContextImpl<K, V> conflictResolve(GridCacheVersionedEntryEx<K, V> oldEntry, + public GridCacheVersionConflictContext<K, V> conflictResolve(GridCacheVersionedEntryEx<K, V> oldEntry, GridCacheVersionedEntryEx<K, V> newEntry, boolean atomicVerComparator) throws IgniteCheckedException { assert conflictRslvr != null : "Should not reach this place."; - GridCacheVersionConflictContextImpl<K, V> ctx = conflictRslvr.resolve(oldEntry, newEntry, atomicVerComparator); + GridCacheVersionConflictContext<K, V> ctx = conflictRslvr.resolve(oldEntry, newEntry, atomicVerComparator); if (ctx.isManualResolve()) drMgr.onReceiveCacheConflictResolved(ctx.isUseNew(), ctx.isUseOld(), ctx.isMerge()); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java index d57648b..ca7b740 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java @@ -1657,7 +1657,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> GridCacheVersion enqueueVer = null; - GridCacheVersionConflictContextImpl<K, V> drRes = null; + GridCacheVersionConflictContext<K, V> drRes = null; EntryProcessorResult<?> invokeRes = null; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUpdateAtomicResult.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUpdateAtomicResult.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUpdateAtomicResult.java index 16ab38d..cabfaa5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUpdateAtomicResult.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUpdateAtomicResult.java @@ -51,7 +51,7 @@ public class GridCacheUpdateAtomicResult<K, V> { /** DR resolution result. */ @GridToStringInclude - private final GridCacheVersionConflictContextImpl<K, V> drRes; + private final GridCacheVersionConflictContext<K, V> drRes; /** Whether update should be propagated to DHT node. */ private final boolean sndToDht; @@ -79,7 +79,7 @@ public class GridCacheUpdateAtomicResult<K, V> { long newTtl, long drExpireTime, @Nullable GridCacheVersion rmvVer, - @Nullable GridCacheVersionConflictContextImpl<K, V> drRes, + @Nullable GridCacheVersionConflictContext<K, V> drRes, boolean sndToDht) { this.success = success; this.oldVal = oldVal; @@ -144,7 +144,7 @@ public class GridCacheUpdateAtomicResult<K, V> { /** * @return DR conflict resolution context. */ - @Nullable public GridCacheVersionConflictContextImpl<K, V> drResolveResult() { + @Nullable public GridCacheVersionConflictContext<K, V> drResolveResult() { return drRes; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java index 3807cc9..be65c00 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java @@ -514,13 +514,13 @@ public class GridDistributedTxRemoteAdapter<K, V> extends IgniteTxAdapter<K, V> cacheCtx.conflictNeedResolve(cached.version(), explicitVer); if (drNeedResolve) { - IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContextImpl<K, V>> + IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContext<K, V>> drRes = conflictResolve(op, txEntry.key(), val, valBytes, txEntry.ttl(), txEntry.drExpireTime(), explicitVer, cached); assert drRes != null; - GridCacheVersionConflictContextImpl<K, V> drCtx = drRes.get2(); + GridCacheVersionConflictContext<K, V> drCtx = drRes.get2(); if (drCtx.isUseOld()) op = NOOP; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java index c757ad2..cf67c15 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java @@ -1709,7 +1709,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { if (dhtFut != null) { if (updRes.sendToDht()) { // Send to backups even in case of remove-remove scenarios. - GridCacheVersionConflictContextImpl<K, V> ctx = updRes.drResolveResult(); + GridCacheVersionConflictContext<K, V> ctx = updRes.drResolveResult(); long ttl = updRes.newTtl(); long expireTime = updRes.drExpireTime(); @@ -1755,7 +1755,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { if (hasNear) { if (primary && updRes.sendToDht()) { if (!ctx.affinity().belongs(node, entry.partition(), topVer)) { - GridCacheVersionConflictContextImpl<K, V> ctx = updRes.drResolveResult(); + GridCacheVersionConflictContext<K, V> ctx = updRes.drResolveResult(); long ttl = updRes.newTtl(); long expireTime = updRes.drExpireTime(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/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 01e06ba..eb5e662 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 @@ -1257,7 +1257,7 @@ public abstract class IgniteTxAdapter<K, V> extends GridMetadataAwareAdapter * @throws org.apache.ignite.IgniteCheckedException In case of eny exception. * @throws GridCacheEntryRemovedException If entry got removed. */ - protected IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContextImpl<K, V>> conflictResolve( + protected IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContext<K, V>> conflictResolve( GridCacheOperation op, K key, V newVal, byte[] newValBytes, long newTtl, long newDrExpireTime, GridCacheVersion newVer, GridCacheEntryEx<K, V> old) throws IgniteCheckedException, GridCacheEntryRemovedException { @@ -1271,9 +1271,9 @@ public abstract class IgniteTxAdapter<K, V> extends GridMetadataAwareAdapter long newExpireTime = newDrExpireTime >= 0L ? newDrExpireTime : CU.toExpireTime(newTtl); GridCacheVersionedEntryEx<K, V> newEntry = - new GridCachePlainVersionedEntry<K, V>(key, newVal, newTtl, newExpireTime, newVer); + new GridCachePlainVersionedEntry<>(key, newVal, newTtl, newExpireTime, newVer); - GridCacheVersionConflictContextImpl<K, V> ctx = old.context().conflictResolve(oldEntry, newEntry, false); + GridCacheVersionConflictContext<K, V> ctx = old.context().conflictResolve(oldEntry, newEntry, false); if (ctx.isMerge()) { V resVal = ctx.mergeValue(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java index 71eda97..f985753 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java @@ -737,13 +737,13 @@ public abstract class IgniteTxLocalAdapter<K, V> extends IgniteTxAdapter<K, V> boolean drNeedResolve = cacheCtx.conflictNeedResolve(cached.version(), explicitVer); if (drNeedResolve) { - IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContextImpl<K, V>> + IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContext<K, V>> drRes = conflictResolve(op, txEntry.key(), val, valBytes, txEntry.ttl(), txEntry.drExpireTime(), explicitVer, cached); assert drRes != null; - GridCacheVersionConflictContextImpl<K, V> conflictCtx = drRes.get2(); + GridCacheVersionConflictContext<K, V> conflictCtx = drRes.get2(); if (conflictCtx.isUseOld()) op = NOOP; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionAbstractConflictResolver.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionAbstractConflictResolver.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionAbstractConflictResolver.java index a91bd4d..8bc6425 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionAbstractConflictResolver.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionAbstractConflictResolver.java @@ -32,9 +32,9 @@ public abstract class GridCacheVersionAbstractConflictResolver { * @return Conflict resolution context. * @throws IgniteCheckedException If failed. */ - public <K, V> GridCacheVersionConflictContextImpl<K, V> resolve(GridCacheVersionedEntryEx<K, V> oldEntry, + public <K, V> GridCacheVersionConflictContext<K, V> resolve(GridCacheVersionedEntryEx<K, V> oldEntry, GridCacheVersionedEntryEx<K, V> newEntry, boolean atomicVerComparator) throws IgniteCheckedException { - GridCacheVersionConflictContextImpl<K, V> ctx = new GridCacheVersionConflictContextImpl<>(oldEntry, newEntry); + GridCacheVersionConflictContext<K, V> ctx = new GridCacheVersionConflictContext<>(oldEntry, newEntry); resolve0(ctx, oldEntry, newEntry, atomicVerComparator); @@ -50,7 +50,7 @@ public abstract class GridCacheVersionAbstractConflictResolver { * @param atomicVerComparator Whether to use atomic version comparator. * @throws IgniteCheckedException If failed. */ - protected abstract <K, V> void resolve0(GridCacheVersionConflictContextImpl<K, V> ctx, + protected abstract <K, V> void resolve0(GridCacheVersionConflictContext<K, V> ctx, GridCacheVersionedEntryEx<K, V> oldEntry, GridCacheVersionedEntryEx<K, V> newEntry, boolean atomicVerComparator) throws IgniteCheckedException; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/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 72c323b..ab690e6 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,38 +17,87 @@ package org.apache.ignite.internal.processors.cache.version; -import org.apache.ignite.cache.*; +import org.apache.ignite.internal.util.tostring.*; +import org.apache.ignite.internal.util.typedef.internal.*; import org.jetbrains.annotations.*; /** - * Cache version conflict context. + * Conflict context implementation. */ -public interface GridCacheVersionConflictContext<K, V> { +public class GridCacheVersionConflictContext<K, V> { + /** Old entry. */ + @GridToStringInclude + private final GridCacheVersionedEntry<K, V> oldEntry; + + /** New entry. */ + @GridToStringInclude + private final GridCacheVersionedEntry<K, V> newEntry; + + /** Current state. */ + private State state; + + /** Current merge value. */ + @GridToStringExclude + private V mergeVal; + + /** TTL. */ + private long ttl; + + /** Explicit TTL flag. */ + private boolean explicitTtl; + + /** Manual resolve flag. */ + private boolean manualResolve; + + /** + * Constructor. + * + * @param oldEntry Old entry. + * @param newEntry New entry. + */ + public GridCacheVersionConflictContext(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; + + // Set initial state. + useNew(); + } + /** * Gets old (existing) cache entry. * * @return Old (existing) cache entry. */ - public GridCacheVersionedEntry<K, V> oldEntry(); + public GridCacheVersionedEntry<K, V> oldEntry() { + return oldEntry; + } /** * Gets new cache entry. * * @return New cache entry. */ - public GridCacheVersionedEntry<K, V> newEntry(); + public GridCacheVersionedEntry<K, V> newEntry() { + return newEntry; + } /** * Force cache to ignore new entry and leave old (existing) entry unchanged. */ - public void useOld(); + public void useOld() { + state = State.USE_OLD; + } /** * Force cache to apply new entry overwriting old (existing) entry. * <p> * Note that updates from remote data centers always have explicit TTL , while local data center - * updates will only have explicit TTL in case {@link CacheEntry#timeToLive(long)} was called - * before update. In the latter case new entry will pick TTL of the old (existing) entry, even + * updates will only have explicit TTL in case {@link org.apache.ignite.cache.CacheEntry#timeToLive(long)} was + * called before update. In the latter case new entry will pick TTL of the old (existing) entry, even * if it was set through update from remote data center. it means that depending on concurrent * update timings new update might pick unexpected TTL. For example, consider that three updates * of the same key are performed: local update with explicit TTL (1) followed by another local @@ -58,7 +107,12 @@ public interface GridCacheVersionConflictContext<K, V> { * update (3). To have predictable TTL in such cases you should either always set it explicitly * through {@code GridCacheEntry.timeToLive(long)} or use {@link #merge(Object, long)}. */ - public void useNew(); + public void useNew() { + state = State.USE_NEW; + + if (!explicitTtl) + ttl = newEntry.ttl(); + } /** * Force cache to use neither old, nor new, but some other value passed as argument. In this case old @@ -69,5 +123,97 @@ public interface GridCacheVersionConflictContext<K, V> { * @param mergeVal Merge value or {@code null} to force remove. * @param ttl Time to live in milliseconds. */ - public void merge(@Nullable V mergeVal, long ttl); + public void merge(@Nullable V mergeVal, long ttl) { + state = State.MERGE; + + this.mergeVal = mergeVal; + this.ttl = ttl; + + explicitTtl = true; + } + + /** + * @return {@code True} in case old value should be used. + */ + public boolean isUseOld() { + return state == State.USE_OLD; + } + + /** + * @return {@code True} in case new value should be used. + */ + public boolean isUseNew() { + return state == State.USE_NEW; + } + + /** + * @return {@code True} in case merge is to be performed. + */ + public boolean isMerge() { + return state == State.MERGE; + } + + /** + * Set manual resolve class. + */ + public void manualResolve() { + this.manualResolve = true; + } + + /** + * @return Manual resolve flag. + */ + public boolean isManualResolve() { + return manualResolve; + } + + /** + * @return Value to merge (if any). + */ + @Nullable public V mergeValue() { + return mergeVal; + } + + /** + * @return TTL. + */ + public long ttl() { + return ttl; + } + + /** + * @return Expire time. + */ + public long expireTime() { + return explicitTtl ? CU.toExpireTime(ttl) : isUseNew() ? newEntry.expireTime() : + isUseOld() ? oldEntry.expireTime() : 0L; + } + + /** + * @return Explicit TTL flag. + */ + public boolean explicitTtl() { + return explicitTtl; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return state == State.MERGE ? + S.toString(GridCacheVersionConflictContext.class, this, "mergeValue", mergeVal) : + S.toString(GridCacheVersionConflictContext.class, this); + } + + /** + * State. + */ + private enum State { + /** Use old. */ + USE_OLD, + + /** Use new. */ + USE_NEW, + + /** Merge. */ + MERGE + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContextImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContextImpl.java deleted file mode 100644 index ed901ec..0000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictContextImpl.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal.processors.cache.version; - -import org.apache.ignite.internal.util.tostring.*; -import org.apache.ignite.internal.util.typedef.internal.*; -import org.jetbrains.annotations.*; - -/** - * Conflict context implementation. - */ -public class GridCacheVersionConflictContextImpl<K, V> implements GridCacheVersionConflictContext<K, V> { - /** Old entry. */ - @GridToStringInclude - private final GridCacheVersionedEntry<K, V> oldEntry; - - /** New entry. */ - @GridToStringInclude - private final GridCacheVersionedEntry<K, V> newEntry; - - /** Current state. */ - private State state; - - /** Current merge value. */ - @GridToStringExclude - private V mergeVal; - - /** TTL. */ - private long ttl; - - /** Explicit TTL flag. */ - private boolean explicitTtl; - - /** Manual resolve flag. */ - private boolean manualResolve; - - /** - * Constructor. - * - * @param oldEntry Old entry. - * @param newEntry New entry. - */ - public GridCacheVersionConflictContextImpl(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; - - // Set initial state. - useNew(); - } - - /** {@inheritDoc} */ - @Override public GridCacheVersionedEntry<K, V> oldEntry() { - return oldEntry; - } - - /** {@inheritDoc} */ - @Override public GridCacheVersionedEntry<K, V> newEntry() { - return newEntry; - } - - /** {@inheritDoc} */ - @Override public void useOld() { - state = State.USE_OLD; - } - - /** {@inheritDoc} */ - @Override public void useNew() { - state = State.USE_NEW; - - if (!explicitTtl) - ttl = newEntry.ttl(); - } - - /** {@inheritDoc} */ - @Override public void merge(@Nullable V mergeVal, long ttl) { - state = State.MERGE; - - this.mergeVal = mergeVal; - this.ttl = ttl; - - explicitTtl = true; - } - - /** - * @return {@code True} in case old value should be used. - */ - public boolean isUseOld() { - return state == State.USE_OLD; - } - - /** - * @return {@code True} in case new value should be used. - */ - public boolean isUseNew() { - return state == State.USE_NEW; - } - - /** - * @return {@code True} in case merge is to be performed. - */ - public boolean isMerge() { - return state == State.MERGE; - } - - /** - * Set manual resolve class. - */ - public void manualResolve() { - this.manualResolve = true; - } - - /** - * @return Manual resolve flag. - */ - public boolean isManualResolve() { - return manualResolve; - } - - /** - * @return Value to merge (if any). - */ - @Nullable public V mergeValue() { - return mergeVal; - } - - /** - * @return TTL. - */ - public long ttl() { - return ttl; - } - - /** - * @return Expire time. - */ - public long expireTime() { - return explicitTtl ? CU.toExpireTime(ttl) : isUseNew() ? newEntry.expireTime() : - isUseOld() ? oldEntry.expireTime() : 0L; - } - - /** - * @return Explicit TTL flag. - */ - public boolean explicitTtl() { - return explicitTtl; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return state == State.MERGE ? - S.toString(GridCacheVersionConflictContextImpl.class, this, "mergeValue", mergeVal) : - S.toString(GridCacheVersionConflictContextImpl.class, this); - } - - /** - * State. - */ - private enum State { - /** Use old. */ - USE_OLD, - - /** Use new. */ - USE_NEW, - - /** Merge. */ - MERGE - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d70e59f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictResolver.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictResolver.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictResolver.java index e327fb9..869993c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictResolver.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionConflictResolver.java @@ -25,7 +25,7 @@ import org.apache.ignite.internal.processors.cache.*; */ public class GridCacheVersionConflictResolver extends GridCacheVersionAbstractConflictResolver { /** {@inheritDoc} */ - @Override protected <K, V> void resolve0(GridCacheVersionConflictContextImpl<K, V> ctx, + @Override protected <K, V> void resolve0(GridCacheVersionConflictContext<K, V> ctx, GridCacheVersionedEntryEx<K, V> oldEntry, GridCacheVersionedEntryEx<K, V> newEntry, boolean atomicVerComparator) throws IgniteCheckedException { if (newEntry.dataCenterId() != oldEntry.dataCenterId())