You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/08/09 07:45:43 UTC

[1/6] ignite git commit: IGNITE-2545 : Allocate ArrayList for futures only after second future is added

Repository: ignite
Updated Branches:
  refs/heads/ignite-2545 [created] d2518fdee


IGNITE-2545 : Allocate ArrayList for futures only after second future is added


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

Branch: refs/heads/ignite-2545
Commit: 07186d288b5d90034b280b2c9d53e4c572853595
Parents: 043c3a2
Author: Andrey V. Mashenkov <an...@gmail.com>
Authored: Mon Aug 8 18:23:22 2016 +0300
Committer: Andrey V. Mashenkov <an...@gmail.com>
Committed: Mon Aug 8 18:23:22 2016 +0300

----------------------------------------------------------------------
 .../distributed/GridCacheTxRecoveryFuture.java  |  6 +-
 .../distributed/dht/GridDhtLockFuture.java      |  6 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |  6 +-
 .../colocated/GridDhtColocatedLockFuture.java   |  6 +-
 .../distributed/near/GridNearLockFuture.java    |  6 +-
 ...arOptimisticSerializableTxPrepareFuture.java |  6 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |  6 +-
 .../GridNearPessimisticTxPrepareFuture.java     |  6 +-
 .../near/GridNearTxFinishFuture.java            |  6 +-
 .../util/future/GridCompoundFuture.java         | 88 ++++++++++++++++----
 10 files changed, 97 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 7312386..2065233 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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<Boolean> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<Boolean> fut = futureGet(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 64b8745..185d530 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
@@ -546,10 +546,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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                MiniFuture mini = (MiniFuture)futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                MiniFuture mini = (MiniFuture)futureGet(i);
 
                 if (mini.futureId().equals(miniId)) {
                     if (!mini.isDone())

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 e9805aa..87357cc 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
@@ -526,10 +526,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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<IgniteInternalTx> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<IgniteInternalTx> fut = futureGet(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 f77efee..79389fd 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
@@ -471,10 +471,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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<Boolean> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<Boolean> fut = futureGet(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 4b6448b..9c53ffb 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
@@ -489,10 +489,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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<Boolean> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<Boolean> fut = futureGet(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 6515140..3e36e1a 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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futureGet(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 1ea99c4..cfe9542 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
@@ -190,10 +190,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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futureGet(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 5d347d7..711bec2 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 (futs) {
+        synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futs.size(); i++) {
-                MiniFuture mini = (MiniFuture)futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                MiniFuture mini = (MiniFuture)futureGet(i);
 
                 if (mini.futureId().equals(miniId)) {
                     if (!mini.isDone())

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 39f3ff3..0a8a7ce 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
@@ -195,9 +195,9 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu
         if (!isDone()) {
             FinishMiniFuture finishFut = null;
 
-            synchronized (futs) {
-                for (int i = 0; i < futs.size(); i++) {
-                    IgniteInternalFuture<IgniteInternalTx> fut = futs.get(i);
+            synchronized (sync) {
+                for (int i = 0; i < futuresSize(); i++) {
+                    IgniteInternalFuture<IgniteInternalTx> fut = futureGet(i);
 
                     if (fut.getClass() == FinishMiniFuture.class) {
                         FinishMiniFuture f = (FinishMiniFuture)fut;

http://git-wip-us.apache.org/repos/asf/ignite/blob/07186d28/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 3409341..b50fd55 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,6 +33,8 @@ 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;
 
 /**
@@ -53,8 +55,11 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     private static final AtomicIntegerFieldUpdater<GridCompoundFuture> LSNR_CALLS_UPD =
         AtomicIntegerFieldUpdater.newUpdater(GridCompoundFuture.class, "lsnrCalls");
 
-    /** Futures. */
-    protected final ArrayList<IgniteInternalFuture<T>> futs = new ArrayList<>();
+    /** 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;
 
     /** Reducer. */
     @GridToStringInclude
@@ -155,8 +160,14 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      * @return Collection of futures.
      */
     public Collection<IgniteInternalFuture<T>> futures() {
-        synchronized (futs) {
-            return new ArrayList<>(futs);
+        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);
         }
     }
 
@@ -179,10 +190,10 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      */
     @SuppressWarnings("ForLoopReplaceableByForEach")
     public boolean hasPending() {
-        synchronized (futs) {
+        synchronized (sync) {
             // Avoid iterator creation and collection copy.
-            for (int i = 0; i < futs.size(); i++) {
-                IgniteInternalFuture<T> fut = futs.get(i);
+            for (int i = 0; i < futuresSize(); i++) {
+                IgniteInternalFuture<T> fut = futureGet(i);
 
                 if (!fut.isDone())
                     return true;
@@ -200,8 +211,19 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     public void add(IgniteInternalFuture<T> fut) {
         assert fut != null;
 
-        synchronized (futs) {
-            futs.add(fut);
+        synchronized (sync) {
+            if (futs == null)
+                futs = fut;
+            else if (futs instanceof IgniteInternalFuture) {
+                Collection<IgniteInternalFuture<T>> list = new ArrayList<>(2);
+
+                list.add((IgniteInternalFuture<T>)futs);
+                list.add(fut);
+
+                futs = list;
+            }
+            else
+                ((Collection<IgniteInternalFuture>)futs).add(fut);
         }
 
         fut.listen(this);
@@ -217,8 +239,8 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     }
 
     /**
-     * @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;
@@ -256,11 +278,41 @@ 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.
+     */
+    protected IgniteInternalFuture<T> futureGet(int idx) {
+        assert idx >= 0;
+
+        Object futs0 = futs;
+
+        if (futs0 == null)
+            throw new IndexOutOfBoundsException("Index: " + idx + ", Size: 0");
+
+        if (futs0 instanceof IgniteInternalFuture) {
+            if (idx > 0)
+                throw new IndexOutOfBoundsException("Index: " + idx + ", Size: 1");
+
+            return (IgniteInternalFuture<T>)futs0;
+        }
+
+        return ((List<IgniteInternalFuture<T>>)futs0).get(idx);
+    }
+
+    /**
      * @return Futures size.
      */
     protected int futuresSize() {
-        synchronized (futs) {
-            return futs.size();
+        synchronized (sync) {
+            if(futs==null)
+                return 0;
+
+            if (futs instanceof IgniteInternalFuture)
+                return 1;
+
+            return ((Collection<IgniteInternalFuture<T>>)futs).size();
         }
     }
 
@@ -271,11 +323,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());
+                }
+            })
         );
     }
 }


[4/6] ignite git commit: Minors.

Posted by vo...@apache.org.
Minors.


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

Branch: refs/heads/ignite-2545
Commit: 5fb0a54d1ce498ec54d999046179029db1748682
Parents: 65d1b9d
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Aug 9 10:39:50 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Aug 9 10:39:50 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/util/future/GridCompoundFuture.java     | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5fb0a54d/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 a78e5a8..941d88b 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
@@ -208,6 +208,7 @@ 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;
 
@@ -215,12 +216,12 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
             if (futs == null)
                 futs = fut;
             else if (futs instanceof IgniteInternalFuture) {
-                Collection<IgniteInternalFuture<T>> list = new ArrayList<>(2);
+                Collection<IgniteInternalFuture> futs0 = new ArrayList<>(4);
 
-                list.add((IgniteInternalFuture<T>)futs);
-                list.add(fut);
+                futs0.add((IgniteInternalFuture)futs);
+                futs0.add(fut);
 
-                futs = list;
+                futs = futs0;
             }
             else
                 ((Collection<IgniteInternalFuture>)futs).add(fut);


[2/6] ignite git commit: Merge branch 'ignite-2545' of https://github.com/AMashenkov/ignite into ignite-2545

Posted by vo...@apache.org.
Merge branch 'ignite-2545' of https://github.com/AMashenkov/ignite into ignite-2545


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

Branch: refs/heads/ignite-2545
Commit: ebe52afc0b2066b31537433764f4df3c7da1ea46
Parents: 789b2f3 07186d2
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Aug 9 10:25:10 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Aug 9 10:25:10 2016 +0300

----------------------------------------------------------------------
 .../distributed/GridCacheTxRecoveryFuture.java  |  6 +-
 .../distributed/dht/GridDhtLockFuture.java      |  6 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |  6 +-
 .../colocated/GridDhtColocatedLockFuture.java   |  6 +-
 .../distributed/near/GridNearLockFuture.java    |  6 +-
 ...arOptimisticSerializableTxPrepareFuture.java |  6 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |  6 +-
 .../GridNearPessimisticTxPrepareFuture.java     |  6 +-
 .../near/GridNearTxFinishFuture.java            |  6 +-
 .../util/future/GridCompoundFuture.java         | 88 ++++++++++++++++----
 10 files changed, 97 insertions(+), 45 deletions(-)
----------------------------------------------------------------------



[3/6] ignite git commit: Minors.

Posted by vo...@apache.org.
Minors.


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

Branch: refs/heads/ignite-2545
Commit: 65d1b9d772db23209a0d23d29da451a3436b55a2
Parents: ebe52af
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Aug 9 10:37:53 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Aug 9 10:37:53 2016 +0300

----------------------------------------------------------------------
 .../cache/distributed/GridCacheTxRecoveryFuture.java    |  4 ++--
 .../cache/distributed/dht/GridDhtGetFuture.java         |  4 +---
 .../cache/distributed/dht/GridDhtLockFuture.java        |  4 ++--
 .../cache/distributed/dht/GridDhtTxPrepareFuture.java   |  4 ++--
 .../dht/colocated/GridDhtColocatedLockFuture.java       |  4 ++--
 .../cache/distributed/near/GridNearLockFuture.java      |  4 ++--
 .../GridNearOptimisticSerializableTxPrepareFuture.java  |  4 ++--
 .../near/GridNearOptimisticTxPrepareFuture.java         |  4 ++--
 .../near/GridNearPessimisticTxPrepareFuture.java        |  4 ++--
 .../cache/distributed/near/GridNearTxFinishFuture.java  |  4 ++--
 .../ignite/internal/util/future/GridCompoundFuture.java | 12 ++++++------
 11 files changed, 25 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 2065233..c07a817 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
@@ -428,8 +428,8 @@ public class GridCacheTxRecoveryFuture extends GridCompoundIdentityFuture<Boolea
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<Boolean> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<Boolean> fut = future(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 913580f..d2a3b3c 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
@@ -29,7 +29,6 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -50,7 +49,6 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteBiClosure;
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -277,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() && futuresSize() == 0) {
+        if (fut.isDone() && futuresCount() == 0) {
             if (fut.error() != null)
                 onDone(fut.error());
             else

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 185d530..187c8a4 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
@@ -548,8 +548,8 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                MiniFuture mini = (MiniFuture)futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                MiniFuture mini = (MiniFuture) future(i);
 
                 if (mini.futureId().equals(miniId)) {
                     if (!mini.isDone())

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 87357cc..2800897 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
@@ -528,8 +528,8 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<IgniteInternalTx> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<IgniteInternalTx> fut = future(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 79389fd..05b4a2b 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
@@ -473,8 +473,8 @@ public final class GridDhtColocatedLockFuture extends GridCompoundIdentityFuture
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<Boolean> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<Boolean> fut = future(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 9c53ffb..3b53c5e 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
@@ -491,8 +491,8 @@ public final class GridNearLockFuture extends GridCompoundIdentityFuture<Boolean
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<Boolean> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<Boolean> fut = future(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 3e36e1a..cd0ce44 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
@@ -231,8 +231,8 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = future(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 cfe9542..7a49422 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
@@ -192,8 +192,8 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<GridNearTxPrepareResponse> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<GridNearTxPrepareResponse> fut = future(i);
 
                 if (!isMini(fut))
                     continue;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 711bec2..a353ed5 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
@@ -134,8 +134,8 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (sync) {
             // Avoid iterator creation.
-            for (int i = 0; i < futuresSize(); i++) {
-                MiniFuture mini = (MiniFuture)futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                MiniFuture mini = (MiniFuture) future(i);
 
                 if (mini.futureId().equals(miniId)) {
                     if (!mini.isDone())

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 0a8a7ce..c96651c 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
@@ -196,8 +196,8 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu
             FinishMiniFuture finishFut = null;
 
             synchronized (sync) {
-                for (int i = 0; i < futuresSize(); i++) {
-                    IgniteInternalFuture<IgniteInternalTx> fut = futureGet(i);
+                for (int i = 0; i < futuresCount(); i++) {
+                    IgniteInternalFuture<IgniteInternalTx> fut = future(i);
 
                     if (fut.getClass() == FinishMiniFuture.class) {
                         FinishMiniFuture f = (FinishMiniFuture)fut;

http://git-wip-us.apache.org/repos/asf/ignite/blob/65d1b9d7/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 b50fd55..a78e5a8 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
@@ -192,8 +192,8 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     public boolean hasPending() {
         synchronized (sync) {
             // Avoid iterator creation and collection copy.
-            for (int i = 0; i < futuresSize(); i++) {
-                IgniteInternalFuture<T> fut = futureGet(i);
+            for (int i = 0; i < futuresCount(); i++) {
+                IgniteInternalFuture<T> fut = future(i);
 
                 if (!fut.isDone())
                     return true;
@@ -258,7 +258,7 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      * Check completeness of the future.
      */
     private void checkComplete() {
-        if (initialized() && !isDone() && lsnrCalls == futuresSize()) {
+        if (initialized() && !isDone() && lsnrCalls == futuresCount()) {
             try {
                 onDone(rdc != null ? rdc.reduce() : null);
             }
@@ -283,7 +283,7 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      * @param idx - index index of the element to return
      * @return Future.
      */
-    protected IgniteInternalFuture<T> futureGet(int idx) {
+    protected IgniteInternalFuture<T> future(int idx) {
         assert idx >= 0;
 
         Object futs0 = futs;
@@ -304,9 +304,9 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     /**
      * @return Futures size.
      */
-    protected int futuresSize() {
+    protected int futuresCount() {
         synchronized (sync) {
-            if(futs==null)
+            if (futs==null)
                 return 0;
 
             if (futs instanceof IgniteInternalFuture)


[6/6] ignite git commit: MInors.

Posted by vo...@apache.org.
MInors.


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

Branch: refs/heads/ignite-2545
Commit: d2518fdeea4833585db0cab1c3dfec69a1fccf37
Parents: a01391c
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Aug 9 10:44:54 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Aug 9 10:44:54 2016 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/util/future/GridCompoundFuture.java  | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d2518fde/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 80fac56..14b6a16 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
@@ -286,11 +286,8 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      */
     @SuppressWarnings("unchecked")
     protected IgniteInternalFuture<T> future(int idx) {
-        assert idx >= 0;
-        assert idx < futuresCount();
-        assert futs != null;
-
         assert Thread.holdsLock(sync);
+        assert futs != null && idx >= 0 && idx < futuresCount();
 
         if (futs instanceof IgniteInternalFuture) {
             assert idx == 0;


[5/6] ignite git commit: MInors.

Posted by vo...@apache.org.
MInors.


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

Branch: refs/heads/ignite-2545
Commit: a01391c8cc8828666424c667638310ad4fcd0d16
Parents: 5fb0a54
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Aug 9 10:43:37 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Aug 9 10:43:37 2016 +0300

----------------------------------------------------------------------
 .../util/future/GridCompoundFuture.java         | 22 ++++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a01391c8/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 941d88b..80fac56 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
@@ -284,27 +284,27 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      * @param idx - index index of the element to return
      * @return Future.
      */
+    @SuppressWarnings("unchecked")
     protected IgniteInternalFuture<T> future(int idx) {
         assert idx >= 0;
+        assert idx < futuresCount();
+        assert futs != null;
 
-        Object futs0 = futs;
-
-        if (futs0 == null)
-            throw new IndexOutOfBoundsException("Index: " + idx + ", Size: 0");
+        assert Thread.holdsLock(sync);
 
-        if (futs0 instanceof IgniteInternalFuture) {
-            if (idx > 0)
-                throw new IndexOutOfBoundsException("Index: " + idx + ", Size: 1");
+        if (futs instanceof IgniteInternalFuture) {
+            assert idx == 0;
 
-            return (IgniteInternalFuture<T>)futs0;
+            return (IgniteInternalFuture<T>)futs;
         }
-
-        return ((List<IgniteInternalFuture<T>>)futs0).get(idx);
+        else
+            return ((List<IgniteInternalFuture>)futs).get(idx);
     }
 
     /**
      * @return Futures size.
      */
+    @SuppressWarnings("unchecked")
     protected int futuresCount() {
         synchronized (sync) {
             if (futs==null)
@@ -313,7 +313,7 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
             if (futs instanceof IgniteInternalFuture)
                 return 1;
 
-            return ((Collection<IgniteInternalFuture<T>>)futs).size();
+            return ((Collection<IgniteInternalFuture>)futs).size();
         }
     }