You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ir...@apache.org on 2018/10/11 07:59:05 UTC

ignite git commit: IGNITE-9796 NPE if you call array() method on empty GridLongList - Fixes #4917.

Repository: ignite
Updated Branches:
  refs/heads/master ccf9c1ce3 -> 447ce47cc


IGNITE-9796 NPE if you call array() method on empty GridLongList - Fixes #4917.

Signed-off-by: Ivan Rakov <ir...@apache.org>


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

Branch: refs/heads/master
Commit: 447ce47cc2781fc4b95172ab386e87f2c08ce040
Parents: ccf9c1c
Author: Eduard Shangareev <es...@gridgain.com>
Authored: Thu Oct 11 10:58:15 2018 +0300
Committer: Ivan Rakov <ir...@apache.org>
Committed: Thu Oct 11 10:58:15 2018 +0300

----------------------------------------------------------------------
 .../processors/cluster/BaselineTopology.java    | 14 +++---
 .../ignite/internal/util/GridLongList.java      |  6 +++
 .../testframework/junits/GridAbstractTest.java  | 53 ++++++++++----------
 .../ignite/util/GridLongListSelfTest.java       | 23 +++++++++
 4 files changed, 63 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/447ce47c/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/BaselineTopology.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/BaselineTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/BaselineTopology.java
index fcb7a39..5a7e66a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/BaselineTopology.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/BaselineTopology.java
@@ -298,13 +298,15 @@ public class BaselineTopology implements Serializable {
      * @return Sorted list of baseline topology nodes.
      */
     public List<ClusterNode> createBaselineView(
-        List<ClusterNode> aliveNodes,
-        @Nullable IgnitePredicate<ClusterNode> nodeFilter)
-    {
+        Collection<ClusterNode> aliveNodes,
+        @Nullable IgnitePredicate<ClusterNode> nodeFilter
+    ) {
         List<ClusterNode> res = new ArrayList<>(nodeMap.size());
 
+        boolean nullNodeFilter = nodeFilter == null;
+
         for (ClusterNode node : aliveNodes) {
-            if (nodeMap.containsKey(node.consistentId()) && (nodeFilter == null || CU.affinityNode(node, nodeFilter)))
+            if (nodeMap.containsKey(node.consistentId()) && (nullNodeFilter || CU.affinityNode(node, nodeFilter)))
                 res.add(node);
         }
 
@@ -316,7 +318,7 @@ public class BaselineTopology implements Serializable {
         Map<Object, ClusterNode> consIdMap = new HashMap<>();
 
         for (ClusterNode node : aliveNodes) {
-            if (nodeMap.containsKey(node.consistentId()) && (nodeFilter == null || CU.affinityNode(node, nodeFilter)))
+            if (nodeMap.containsKey(node.consistentId()) && (nullNodeFilter || CU.affinityNode(node, nodeFilter)))
                 consIdMap.put(node.consistentId(), node);
         }
 
@@ -326,7 +328,7 @@ public class BaselineTopology implements Serializable {
             if (!consIdMap.containsKey(consId)) {
                 DetachedClusterNode node = new DetachedClusterNode(consId, e.getValue());
 
-                if (nodeFilter == null || CU.affinityNode(node, nodeFilter))
+                if (nullNodeFilter || CU.affinityNode(node, nodeFilter))
                     consIdMap.put(consId, node);
             }
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/447ce47c/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
index d1f20e6..8d09539 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
@@ -42,6 +42,9 @@ public class GridLongList implements Message, Externalizable {
     /** */
     private static final long serialVersionUID = 0L;
 
+    /** Empty array. */
+    public static final long[] EMPTY_ARRAY = new long[0];
+
     /** */
     private long[] arr;
 
@@ -390,6 +393,9 @@ public class GridLongList implements Message, Externalizable {
      * @return Array copy.
      */
     public long[] array() {
+        if (arr == null)
+            return EMPTY_ARRAY;
+
         long[] res = new long[idx];
 
         System.arraycopy(arr, 0, res, 0, idx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/447ce47c/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 13387de..f1d6682 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -17,6 +17,31 @@
 
 package org.apache.ignite.testframework.junits;
 
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Proxy;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import javax.cache.configuration.Factory;
+import javax.cache.configuration.FactoryBuilder;
 import junit.framework.TestCase;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
@@ -98,32 +123,6 @@ import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.FileSystemXmlApplicationContext;
 
-import javax.cache.configuration.Factory;
-import javax.cache.configuration.FactoryBuilder;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_CLIENT_CACHE_CHANGE_MESSAGE_TIMEOUT;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISCO_FAILED_CLIENT_RECONNECT_DELAY;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
@@ -604,7 +603,7 @@ public abstract class GridAbstractTest extends TestCase {
             info(">>> Starting test class: " + testClassDescription() + " <<<");
 
             if(isSafeTopology())
-                assert G.allGrids().isEmpty() : "Not all Ignite instances stopped before tests execution";
+                assert G.allGrids().isEmpty() : "Not all Ignite instances stopped before tests execution:" +  G.allGrids();
 
             if (startGrid) {
                 IgniteConfiguration cfg = optimize(getConfiguration());

http://git-wip-us.apache.org/repos/asf/ignite/blob/447ce47c/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
index 3b62e32..8849a3d 100644
--- a/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
@@ -150,4 +150,27 @@ public class GridLongListSelfTest extends TestCase {
         assertEquals(asList(1, 3, 4, 5, 0), list);
         assertEquals(asList(0, 1, 3, 4, 5), list.sort());
     }
+
+    /**
+     *
+     */
+    public void testArray() {
+        GridLongList list = new GridLongList();
+
+        long[] array = list.array();
+
+        assertNotNull(array);
+
+        assertEquals(0, array.length);
+
+        list.add(1L);
+
+        array = list.array();
+
+        assertNotNull(array);
+
+        assertEquals(1, array.length);
+
+        assertEquals(1L, array[0]);
+    }
 }
\ No newline at end of file