Repository: incubator-ignite Updated Branches: refs/heads/ignite-45 629560086 -> 963e9c261
IGNITE-45 - Fixed version comparison in PRIMARY mode. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/963e9c26 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/963e9c26 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/963e9c26 Branch: refs/heads/ignite-45 Commit: 963e9c26185e631186d9d2935445845f239f403b Parents: 6295600 Author: Alexey Goncharuk <agoncha...@gridgain.com> Authored: Sat Mar 21 14:22:18 2015 -0700 Committer: Alexey Goncharuk <agoncha...@gridgain.com> Committed: Sat Mar 21 14:22:18 2015 -0700 ---------------------------------------------------------------------- .../affinity/GridAffinityProcessor.java | 12 ---------- .../cache/GridCacheAtomicVersionComparator.java | 21 +++++++++-------- .../processors/cache/GridCacheMapEntry.java | 24 ++++++++++++-------- .../GridCacheVersionConflictResolver.java | 2 +- 4 files changed, 26 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/963e9c26/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java index 82491a6..869f30e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java @@ -131,18 +131,6 @@ public class GridAffinityProcessor extends GridProcessorAdapter { } /** - * Maps keys to nodes on default cache. - * - * @param keys Keys to map. - * @return Map of nodes to keys. - * @throws IgniteCheckedException If failed. - */ - public <K> Map<ClusterNode, Collection<K>> mapKeysToNodes(@Nullable Collection<? extends K> keys) - throws IgniteCheckedException { - return keysToNodes(null, keys); - } - - /** * Maps single key to a node. * * @param cacheName Cache name. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/963e9c26/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAtomicVersionComparator.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAtomicVersionComparator.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAtomicVersionComparator.java index 56feb9c..3a06100 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAtomicVersionComparator.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAtomicVersionComparator.java @@ -19,18 +19,19 @@ package org.apache.ignite.internal.processors.cache; import org.apache.ignite.internal.processors.cache.version.*; -import java.io.*; -import java.util.*; - /** * Atomic cache version comparator. */ -public class GridCacheAtomicVersionComparator implements Comparator<GridCacheVersion>, Serializable { - /** */ - private static final long serialVersionUID = 0L; - - /** {@inheritDoc} */ - @Override public int compare(GridCacheVersion one, GridCacheVersion other) { +public class GridCacheAtomicVersionComparator { + /** + * Compares two cache versions. + * + * @param one First version. + * @param other Second version. + * @param ignoreTime {@code True} if global time should be ignored. + * @return Comparison value. + */ + public int compare(GridCacheVersion one, GridCacheVersion other, boolean ignoreTime) { int topVer = one.topologyVersion(); int otherTopVer = other.topologyVersion(); @@ -38,7 +39,7 @@ public class GridCacheAtomicVersionComparator implements Comparator<GridCacheVer long globalTime = one.globalTime(); long otherGlobalTime = other.globalTime(); - if (globalTime == otherGlobalTime) { + if (globalTime == otherGlobalTime || ignoreTime) { long locOrder = one.order(); long otherLocOrder = other.order(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/963e9c26/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 a52c7e0..4ca6ba5 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 @@ -63,7 +63,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { private static final byte IS_UNSWAPPED_MASK = 0x02; /** */ - public static final Comparator<GridCacheVersion> ATOMIC_VER_COMPARATOR = new GridCacheAtomicVersionComparator(); + public static final GridCacheAtomicVersionComparator ATOMIC_VER_COMPARATOR = new GridCacheAtomicVersionComparator(); /** * NOTE @@ -1710,17 +1710,19 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { assert conflictCtx != null; + boolean ignoreTime = cctx.config().getAtomicWriteOrderMode() == CacheAtomicWriteOrderMode.PRIMARY; + // Use old value? if (conflictCtx.isUseOld()) { GridCacheVersion newConflictVer = conflictVer != null ? conflictVer : newVer; // Handle special case with atomic comparator. - if (!isNew() && // Not initial value, - verCheck && // and atomic version check, - oldConflictVer.dataCenterId() == newConflictVer.dataCenterId() && // and data centers are equal, - ATOMIC_VER_COMPARATOR.compare(oldConflictVer, newConflictVer) == 0 && // and both versions are equal, - cctx.writeThrough() && // and store is enabled, - primary) // and we are primary. + if (!isNew() && // Not initial value, + verCheck && // and atomic version check, + oldConflictVer.dataCenterId() == newConflictVer.dataCenterId() && // and data centers are equal, + ATOMIC_VER_COMPARATOR.compare(oldConflictVer, newConflictVer, ignoreTime) == 0 && // and both versions are equal, + cctx.writeThrough() && // and store is enabled, + primary) // and we are primary. { CacheObject val = rawGetOrUnmarshalUnlocked(false); @@ -1763,11 +1765,13 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { conflictVer = null; } + boolean ignoreTime = cctx.config().getAtomicWriteOrderMode() == CacheAtomicWriteOrderMode.PRIMARY; + // Perform version check only in case there was no explicit conflict resolution. if (conflictCtx == null) { if (verCheck) { - if (!isNew() && ATOMIC_VER_COMPARATOR.compare(ver, newVer) >= 0) { - if (ATOMIC_VER_COMPARATOR.compare(ver, newVer) == 0 && cctx.writeThrough() && primary) { + if (!isNew() && ATOMIC_VER_COMPARATOR.compare(ver, newVer, ignoreTime) >= 0) { + if (ATOMIC_VER_COMPARATOR.compare(ver, newVer, ignoreTime) == 0 && cctx.writeThrough() && primary) { if (log.isDebugEnabled()) log.debug("Received entry update with same version as current (will update store) " + "[entry=" + this + ", newVer=" + newVer + ']'); @@ -1800,7 +1804,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { } } else - assert isNew() || ATOMIC_VER_COMPARATOR.compare(ver, newVer) <= 0 : + assert isNew() || ATOMIC_VER_COMPARATOR.compare(ver, newVer, ignoreTime) <= 0 : "Invalid version for inner update [entry=" + this + ", newVer=" + newVer + ']'; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/963e9c26/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 869993c..776a9a1 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 @@ -36,7 +36,7 @@ public class GridCacheVersionConflictResolver extends GridCacheVersionAbstractCo else { if (atomicVerComparator) { // Handle special case when version check using ATOMIC cache comparator is required. - if (GridCacheMapEntry.ATOMIC_VER_COMPARATOR.compare(oldEntry.version(), newEntry.version()) >= 0) + if (GridCacheMapEntry.ATOMIC_VER_COMPARATOR.compare(oldEntry.version(), newEntry.version(), false) >= 0) ctx.useOld(); else ctx.useNew();