You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/11/30 14:42:23 UTC

[7/7] ignite git commit: ignite-4285

ignite-4285


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5e56c3b6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5e56c3b6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5e56c3b6

Branch: refs/heads/ignite-4285
Commit: 5e56c3b6b022d50748b5c323fd9ca4c220a6f21c
Parents: 7435d1d
Author: sboikov <sb...@gridgain.com>
Authored: Wed Nov 30 17:41:58 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Nov 30 17:41:58 2016 +0300

----------------------------------------------------------------------
 .../internal/processors/cache/CacheLockCandidates.java | 11 +++++++++++
 .../processors/cache/CacheLockCandidatesList.java      |  4 +++-
 .../internal/processors/cache/GridCacheMvcc.java       | 13 +++++++++----
 .../cache/distributed/GridDistributedCacheEntry.java   |  6 +++---
 .../cache/distributed/near/GridNearCacheEntry.java     | 10 +++++-----
 .../distributed/near/GridNearTransactionalCache.java   |  4 +---
 .../processors/cache/local/GridLocalCacheEntry.java    | 11 +++++++----
 7 files changed, 39 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidates.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidates.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidates.java
index d139262..9cf16f4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidates.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidates.java
@@ -23,9 +23,20 @@ import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
  *
  */
 public interface CacheLockCandidates {
+    /**
+     * @param idx Candidate index.
+     * @return Candidate.
+     */
     public GridCacheMvccCandidate candidate(int idx);
 
+    /**
+     * @return Number of candidates.
+     */
     public int size();
 
+    /**
+     * @param ver Candidate version.
+     * @return {@code True} if contains candidate with given version.
+     */
     public boolean hasCandidate(GridCacheVersion ver);
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesList.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesList.java
index f127d43..e026bce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesList.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesList.java
@@ -35,13 +35,15 @@ class CacheLockCandidatesList implements CacheLockCandidates {
      * @param cand Candidate to add.
      */
     void add(GridCacheMvccCandidate cand) {
-        assert !hasCandidate(cand.version());
+        assert !hasCandidate(cand.version()) : cand;
 
         list.add(cand);
     }
 
     /** {@inheritDoc} */
     @Override public GridCacheMvccCandidate candidate(int idx) {
+        assert idx < list.size() : idx;
+
         return list.get(idx);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
index 0ef3f6f..498584c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
@@ -150,6 +150,7 @@ public final class GridCacheMvcc {
     @Nullable public CacheLockCandidates localOwners() {
         if (locs != null) {
             assert !locs.isEmpty();
+
             CacheLockCandidates owners = null;
 
             GridCacheMvccCandidate first = locs.getFirst();
@@ -160,15 +161,19 @@ public final class GridCacheMvcc {
                         assert cand.read() : this;
 
                         if (owners != null) {
+                            CacheLockCandidatesList list;
+
                             if (owners.size() == 1) {
                                 GridCacheMvccCandidate owner = owners.candidate(0);
 
-                                owners = new CacheLockCandidatesList();
+                                owners = list = new CacheLockCandidatesList();
 
                                 ((CacheLockCandidatesList)owners).add(owner);
                             }
+                            else
+                                list = ((CacheLockCandidatesList)owners);
 
-                            ((CacheLockCandidatesList)owners).add(cand);
+                            list.add(cand);
                         }
                         else
                             owners = cand;
@@ -1062,9 +1067,9 @@ public final class GridCacheMvcc {
 
                         return;
                     }
-                }
 
-                first = false;
+                    first = false;
+                }
 
                 if (cand.owner())
                     return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
index 6f8d0b5..3d55f31 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
@@ -67,7 +67,7 @@ public class GridDistributedCacheEntry extends GridCacheMapEntry {
     /**
      *
      */
-    protected void refreshRemotes() {
+    private void refreshRemotes() {
         GridCacheMvcc mvcc = mvccExtras();
 
         rmts = mvcc == null ? Collections.<GridCacheMvccCandidate>emptyList() : mvcc.remoteCandidates();
@@ -377,8 +377,6 @@ public class GridDistributedCacheEntry extends GridCacheMapEntry {
 
                 mvcc.remove(doomed.version());
 
-                owner = mvcc.allOwners();
-
                 boolean emptyAfter = mvcc.isEmpty();
 
                 if (!doomed.local())
@@ -388,6 +386,8 @@ public class GridDistributedCacheEntry extends GridCacheMapEntry {
 
                 if (emptyAfter)
                     mvccExtras(null);
+                else
+                    owner = mvcc.allOwners();
             }
 
             val = this.val;

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
index cad6f90..30fc213 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
@@ -487,7 +487,7 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry {
         boolean read)
         throws GridCacheEntryRemovedException {
         CacheLockCandidates prev;
-        CacheLockCandidates owner;
+        CacheLockCandidates owner = null;
         GridCacheMvccCandidate cand;
 
         CacheObject val;
@@ -531,8 +531,6 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry {
 
             cand.topologyVersion(topVer);
 
-            owner = mvcc.allOwners();
-
             boolean emptyAfter = mvcc.isEmpty();
 
             checkCallbacks(emptyBefore, emptyAfter);
@@ -541,6 +539,8 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry {
 
             if (emptyAfter)
                 mvccExtras(null);
+            else
+                owner = mvcc.allOwners();
         }
 
         // This call must be outside of synchronization.
@@ -652,7 +652,7 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry {
     /**
      * @throws GridCacheEntryRemovedException If entry was removed.
      */
-    public synchronized void reserveEviction() throws GridCacheEntryRemovedException {
+    synchronized void reserveEviction() throws GridCacheEntryRemovedException {
         checkObsolete();
 
         evictReservations++;
@@ -661,7 +661,7 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry {
     /**
      *
      */
-    public synchronized void releaseEviction() {
+    synchronized void releaseEviction() {
         assert evictReservations > 0 : this;
         assert !obsolete() : this;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
index d61915b..7ac3295 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
@@ -576,9 +576,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V>
                                     if (!primary.isLocal()) {
                                         assert req != null;
 
-                                        req.addKey(
-                                            entry.key(),
-                                            ctx);
+                                        req.addKey(entry.key(), ctx);
                                     }
                                     else
                                         locKeys.add(cacheKey);

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e56c3b6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
index b298819..bc61333 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
@@ -89,7 +89,7 @@ public class GridLocalCacheEntry extends GridCacheMapEntry {
         CacheObject val;
         GridCacheMvccCandidate cand;
         CacheLockCandidates prev;
-        CacheLockCandidates owner;
+        CacheLockCandidates owner = null;
 
         synchronized (this) {
             checkObsolete();
@@ -124,10 +124,10 @@ public class GridLocalCacheEntry extends GridCacheMapEntry {
                 read
             );
 
-            owner = mvcc.localOwners();
-
             if (mvcc.isEmpty())
                 mvccExtras(null);
+            else
+                owner = mvcc.localOwners();
 
             val = this.val;
         }
@@ -296,7 +296,10 @@ public class GridLocalCacheEntry extends GridCacheMapEntry {
             for (int i = 0; i < prev.size(); i++) {
                 GridCacheMvccCandidate cand = prev.candidate(i);
 
-                checkThreadChain(cand);
+                boolean unlocked = owner == null || !owner.hasCandidate(cand.version());
+
+                if (unlocked)
+                    checkThreadChain(cand);
             }
         }