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

Reply via email to