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/12/05 15:05:50 UTC

ignite git commit: ignite-1.8 drop

Repository: ignite
Updated Branches:
  refs/heads/ignite-1.8-drop1 [created] f36b8b920


ignite-1.8 drop


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

Branch: refs/heads/ignite-1.8-drop1
Commit: f36b8b92098db9feea704a058d873f2ca4c35568
Parents: 445cde7
Author: sboikov <sb...@gridgain.com>
Authored: Mon Dec 5 18:04:20 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Dec 5 18:04:20 2016 +0300

----------------------------------------------------------------------
 .../distributed/GridCacheTxRecoveryFuture.java  |   6 +-
 .../cache/distributed/dht/GridDhtGetFuture.java |   2 +-
 .../distributed/dht/GridDhtLockFuture.java      |  24 ++---
 .../distributed/dht/GridDhtTxPrepareFuture.java |  16 +--
 .../colocated/GridDhtColocatedLockFuture.java   |  12 +--
 .../distributed/near/GridNearLockFuture.java    |  12 +--
 ...arOptimisticSerializableTxPrepareFuture.java |   6 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |  18 ++--
 .../GridNearPessimisticTxPrepareFuture.java     |   6 +-
 .../near/GridNearTxFinishFuture.java            |   6 +-
 .../util/future/GridCompoundFuture.java         | 100 ++++---------------
 11 files changed, 74 insertions(+), 134 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java
index c07a817..7312386 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java
@@ -426,10 +426,10 @@ public class GridCacheTxRecoveryFuture extends GridCompoundIdentityFuture<Boolea
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<Boolean> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<Boolean> fut = futs.get(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetFuture.java
index d2a3b3c..086d988 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetFuture.java
@@ -275,7 +275,7 @@ public final class GridDhtGetFuture<K, V> extends GridCompoundIdentityFuture<Col
         // Optimization to avoid going through compound future,
         // if getAsync() has been completed and no other futures added to this
         // compound future.
-        if (fut.isDone() && futuresCount() == 0) {
+        if (fut.isDone() && futs.size() == 0) {
             if (fut.error() != null)
                 onDone(fut.error());
             else

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
index f2b5f49..d9218de 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
@@ -293,7 +293,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
      * @return Entries.
      */
     public Collection<GridDhtCacheEntry> entriesCopy() {
-        synchronized (sync) {
+        synchronized (futs) {
             return new ArrayList<>(entries());
         }
     }
@@ -408,7 +408,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
             return null;
         }
 
-        synchronized (sync) {
+        synchronized (futs) {
             entries.add(c == null || c.reentry() ? null : entry);
 
             if (c != null && !c.reentry())
@@ -542,10 +542,10 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                MiniFuture mini = (MiniFuture) future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                MiniFuture mini = (MiniFuture) futs.get(i);
 
                 if (mini.futureId().equals(miniId)) {
                     if (!mini.isDone())
@@ -610,7 +610,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
      * @param t Error.
      */
     public void onError(Throwable t) {
-        synchronized (sync) {
+        synchronized (futs) {
             if (err != null)
                 return;
 
@@ -657,7 +657,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
             log.debug("Received onOwnerChanged() callback [entry=" + entry + ", owner=" + owner + "]");
 
         if (owner != null && owner.version().equals(lockVer)) {
-            synchronized (sync) {
+            synchronized (futs) {
                 if (!pendingLocks.remove(entry.key()))
                     return false;
             }
@@ -675,7 +675,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
      * @return {@code True} if locks have been acquired.
      */
     private boolean checkLocks() {
-        synchronized (sync) {
+        synchronized (futs) {
             return pendingLocks.isEmpty();
         }
     }
@@ -708,7 +708,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
         if (isDone() || (err == null && success && !checkLocks()))
             return false;
 
-        synchronized (sync) {
+        synchronized (futs) {
             if (this.err == null)
                 this.err = err;
         }
@@ -787,7 +787,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
      * @param entries Entries.
      */
     private void map(Iterable<GridDhtCacheEntry> entries) {
-        synchronized (sync) {
+        synchronized (futs) {
             if (mapped)
                 return;
 
@@ -1119,13 +1119,13 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
             if (log.isDebugEnabled())
                 log.debug("Timed out waiting for lock response: " + this);
 
-            synchronized (sync) {
+            synchronized (futs) {
                 timedOut = true;
 
                 // Stop locks and responses processing.
                 pendingLocks.clear();
 
-                clear();
+                futs.clear();
             }
 
             boolean releaseLocks = !(inTx() && cctx.tm().deadlockDetectionEnabled());

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
index b2b4430..5c2783d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
@@ -278,7 +278,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
 
         boolean rmv;
 
-        synchronized (sync) {
+        synchronized (futs) {
             rmv = lockKeys.remove(entry.txKey());
         }
 
@@ -309,7 +309,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
         if (!locksReady)
             return false;
 
-        synchronized (sync) {
+        synchronized (futs) {
             return lockKeys.isEmpty();
         }
     }
@@ -563,10 +563,10 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<IgniteInternalTx> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<IgniteInternalTx> fut = futs.get(i);
 
                 if (!isMini(fut))
                     continue;
@@ -620,7 +620,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
             }
 
             if (tx.optimistic() && txEntry.explicitVersion() == null) {
-                synchronized (sync) {
+                synchronized (futs) {
                     lockKeys.add(txEntry.txKey());
                 }
             }
@@ -1795,8 +1795,8 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
 
         /** {@inheritDoc} */
         @Override public void onTimeout() {
-            synchronized (sync) {
-                clear();
+            synchronized (futs) {
+                futs.clear();
 
                 lockKeys.clear();
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
index ddb6500..b0eea01 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
@@ -444,7 +444,7 @@ public final class GridDhtColocatedLockFuture extends GridCompoundIdentityFuture
      * @return Keys for which locks requested from remote nodes but response isn't received.
      */
     public Set<IgniteTxKey> requestedKeys() {
-        synchronized (sync) {
+        synchronized (futs) {
             if (timeoutObj != null && timeoutObj.requestedKeys != null)
                 return timeoutObj.requestedKeys;
 
@@ -481,10 +481,10 @@ public final class GridDhtColocatedLockFuture extends GridCompoundIdentityFuture
     @SuppressWarnings({"ForLoopReplaceableByForEach", "IfMayBeConditional"})
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<Boolean> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<Boolean> fut = futs.get(i);
 
                 if (!isMini(fut))
                     continue;
@@ -1331,10 +1331,10 @@ public final class GridDhtColocatedLockFuture extends GridCompoundIdentityFuture
                 log.debug("Timed out waiting for lock response: " + this);
 
             if (inTx() && cctx.tm().deadlockDetectionEnabled()) {
-                synchronized (sync) {
+                synchronized (futs) {
                     requestedKeys = requestedKeys0();
 
-                    clear(); // Stop response processing.
+                    futs.clear(); // Stop response processing.
                 }
 
                 Set<IgniteTxKey> keys = new HashSet<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
index 02f6cce..3d9b6ab 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
@@ -490,7 +490,7 @@ public final class GridNearLockFuture extends GridCompoundIdentityFuture<Boolean
      * @return Keys for which locks requested from remote nodes but response isn't received.
      */
     public Set<IgniteTxKey> requestedKeys() {
-        synchronized (sync) {
+        synchronized (futs) {
             if (timeoutObj != null && timeoutObj.requestedKeys != null)
                 return timeoutObj.requestedKeys;
 
@@ -527,10 +527,10 @@ public final class GridNearLockFuture extends GridCompoundIdentityFuture<Boolean
     @SuppressWarnings({"ForLoopReplaceableByForEach", "IfMayBeConditional"})
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<Boolean> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<Boolean> fut = futs.get(i);
 
                 if (!isMini(fut))
                     continue;
@@ -1427,10 +1427,10 @@ public final class GridNearLockFuture extends GridCompoundIdentityFuture<Boolean
             timedOut = true;
 
             if (inTx() && cctx.tm().deadlockDetectionEnabled()) {
-                synchronized (sync) {
+                synchronized (futs) {
                     requestedKeys = requestedKeys0();
 
-                    clear(); // Stop response processing.
+                    futs.clear(); // Stop response processing.
                 }
 
                 Set<IgniteTxKey> keys = new HashSet<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
index 3676a3c..4cbfb27 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
@@ -229,10 +229,10 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futs.get(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
index 87c9e1d..ad6ad5d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
@@ -201,9 +201,9 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa
      */
     @SuppressWarnings("ForLoopReplaceableByForEach")
     public Set<IgniteTxKey> requestedKeys() {
-        synchronized (sync) {
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = future(i);
+        synchronized (futs) {
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futs.get(i);
 
                 if (isMini(fut) && !fut.isDone()) {
                     MiniFuture miniFut = (MiniFuture)fut;
@@ -232,10 +232,10 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futs.get(i);
 
                 if (!isMini(fut))
                     continue;
@@ -686,9 +686,9 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa
             if (keyLockFut != null)
                 keys = new HashSet<>(keyLockFut.lockKeys);
             else {
-                synchronized (sync) {
-                    for (int i = 0; i < futuresCount(); i++) {
-                        IgniteInternalFuture<GridNearTxPrepareResponse> fut = future(i);
+                synchronized (futs) {
+                    for (int i = 0; i < futs.size(); i++) {
+                        IgniteInternalFuture<GridNearTxPrepareResponse> fut = futs.get(i);
 
                         if (isMini(fut) && !fut.isDone()) {
                             MiniFuture miniFut = (MiniFuture)fut;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
index 01fb5fd..0a8baf2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
@@ -132,10 +132,10 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresCount(); i++) {
-                MiniFuture mini = (MiniFuture) future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                MiniFuture mini = (MiniFuture) futs.get(i);
 
                 if (mini.futureId().equals(miniId)) {
                     if (!mini.isDone())

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
index f14d747..46604c7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
@@ -200,9 +200,9 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu
         if (!isDone()) {
             FinishMiniFuture finishFut = null;
 
-            synchronized (sync) {
-                for (int i = 0; i < futuresCount(); i++) {
-                    IgniteInternalFuture<IgniteInternalTx> fut = future(i);
+            synchronized (futs) {
+                for (int i = 0; i < futs.size(); i++) {
+                    IgniteInternalFuture<IgniteInternalTx> fut = futs.get(i);
 
                     if (fut.getClass() == FinishMiniFuture.class) {
                         FinishMiniFuture f = (FinishMiniFuture)fut;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f36b8b92/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
index 0f7e020..3409341 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
@@ -33,8 +33,6 @@ import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 
 /**
@@ -55,11 +53,8 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     private static final AtomicIntegerFieldUpdater<GridCompoundFuture> LSNR_CALLS_UPD =
         AtomicIntegerFieldUpdater.newUpdater(GridCompoundFuture.class, "lsnrCalls");
 
-    /** Sync object */
-    protected final Object sync = new Object();
-
-    /** Possible values: null (no future), IgniteInternalFuture instance (single future) or List of futures  */
-    private volatile Object futs;
+    /** Futures. */
+    protected final ArrayList<IgniteInternalFuture<T>> futs = new ArrayList<>();
 
     /** Reducer. */
     @GridToStringInclude
@@ -159,16 +154,9 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      *
      * @return Collection of futures.
      */
-    @SuppressWarnings("unchecked")
     public Collection<IgniteInternalFuture<T>> futures() {
-        synchronized (sync) {
-            if(futs == null)
-                return Collections.emptyList();
-
-            if (futs instanceof IgniteInternalFuture)
-                return Collections.singletonList((IgniteInternalFuture<T>)futs);
-
-            return new ArrayList<>((Collection<IgniteInternalFuture<T>>)futs);
+        synchronized (futs) {
+            return new ArrayList<>(futs);
         }
     }
 
@@ -191,10 +179,10 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      */
     @SuppressWarnings("ForLoopReplaceableByForEach")
     public boolean hasPending() {
-        synchronized (sync) {
+        synchronized (futs) {
             // Avoid iterator creation and collection copy.
-            for (int i = 0; i < futuresCount(); i++) {
-                IgniteInternalFuture<T> fut = future(i);
+            for (int i = 0; i < futs.size(); i++) {
+                IgniteInternalFuture<T> fut = futs.get(i);
 
                 if (!fut.isDone())
                     return true;
@@ -209,23 +197,11 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      *
      * @param fut Future to add.
      */
-    @SuppressWarnings("unchecked")
     public void add(IgniteInternalFuture<T> fut) {
         assert fut != null;
 
-        synchronized (sync) {
-            if (futs == null)
-                futs = fut;
-            else if (futs instanceof IgniteInternalFuture) {
-                Collection<IgniteInternalFuture> futs0 = new ArrayList<>(4);
-
-                futs0.add((IgniteInternalFuture)futs);
-                futs0.add(fut);
-
-                futs = futs0;
-            }
-            else
-                ((Collection<IgniteInternalFuture>)futs).add(fut);
+        synchronized (futs) {
+            futs.add(fut);
         }
 
         fut.listen(this);
@@ -241,17 +217,8 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     }
 
     /**
-     * Clear futures.
-     */
-    protected void clear() {
-        synchronized (sync) {
-            futs = null;
-        }
-    }
-
-    /**
-     * @return {@code True} if this future was initialized. Initialization happens when {@link #markInitialized()}
-     * method is called on future.
+     * @return {@code True} if this future was initialized. Initialization happens when
+     *      {@link #markInitialized()} method is called on future.
      */
     public boolean initialized() {
         return initFlag == INIT_FLAG;
@@ -269,7 +236,7 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      * Check completeness of the future.
      */
     private void checkComplete() {
-        if (initialized() && !isDone() && lsnrCalls == futuresCount()) {
+        if (initialized() && !isDone() && lsnrCalls == futuresSize()) {
             try {
                 onDone(rdc != null ? rdc.reduce() : null);
             }
@@ -289,38 +256,11 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     }
 
     /**
-     * Returns future at the specified position in this list.
-     *
-     * @param idx - index index of the element to return
-     * @return Future.
-     */
-    @SuppressWarnings("unchecked")
-    protected IgniteInternalFuture<T> future(int idx) {
-        assert Thread.holdsLock(sync);
-        assert futs != null && idx >= 0 && idx < futuresCount();
-
-        if (futs instanceof IgniteInternalFuture) {
-            assert idx == 0;
-
-            return (IgniteInternalFuture<T>)futs;
-        }
-        else
-            return ((List<IgniteInternalFuture>)futs).get(idx);
-    }
-
-    /**
      * @return Futures size.
      */
-    @SuppressWarnings("unchecked")
-    protected int futuresCount() {
-        synchronized (sync) {
-            if (futs == null)
-                return 0;
-
-            if (futs instanceof IgniteInternalFuture)
-                return 1;
-
-            return ((Collection<IgniteInternalFuture>)futs).size();
+    protected int futuresSize() {
+        synchronized (futs) {
+            return futs.size();
         }
     }
 
@@ -331,11 +271,11 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
             "cancelled", isCancelled(),
             "err", error(),
             "futs",
-            F.viewReadOnly(futures(), new C1<IgniteInternalFuture<T>, String>() {
-                @Override public String apply(IgniteInternalFuture<T> f) {
-                    return Boolean.toString(f.isDone());
-                }
-            })
+                F.viewReadOnly(futures(), new C1<IgniteInternalFuture<T>, String>() {
+                    @Override public String apply(IgniteInternalFuture<T> f) {
+                        return Boolean.toString(f.isDone());
+                    }
+                })
         );
     }
 }