You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by zs...@apache.org on 2022/02/02 05:43:52 UTC
[ignite-3] branch main updated: IGNITE-16349 Sql. Check for potential NPE after IGNITE-15462 - Fixes #585.
This is an automated email from the ASF dual-hosted git repository.
zstan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 0cef02c IGNITE-16349 Sql. Check for potential NPE after IGNITE-15462 - Fixes #585.
0cef02c is described below
commit 0cef02c935e56216834fbc2758bd3f81f8e271a6
Author: vladimirermakov <vl...@gmail.com>
AuthorDate: Wed Feb 2 08:38:19 2022 +0300
IGNITE-16349 Sql. Check for potential NPE after IGNITE-15462 - Fixes #585.
Signed-off-by: zstan <st...@gmail.com>
---
.../ignite/internal/sql/engine/exec/ExchangeServiceImpl.java | 3 ++-
.../ignite/internal/sql/engine/exec/ExecutionContext.java | 3 ++-
.../org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java | 1 +
.../internal/sql/engine/metadata/FragmentDescription.java | 8 ++++----
.../ignite/internal/sql/engine/metadata/IgniteMdCollation.java | 10 ++++++----
.../internal/sql/engine/exec/rel/AbstractExecutionTest.java | 3 ++-
6 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
index 6d6c1c1..3d5fcb5 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.sql.engine.exec;
import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -262,7 +263,7 @@ public class ExchangeServiceImpl implements ExchangeService {
fragmentId,
null,
null,
- null),
+ Long2ObjectMaps.emptyMap()),
null,
Map.of());
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java
index 456dce2..9b20c90 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java
@@ -154,8 +154,9 @@ public class ExecutionContext<RowT> extends AbstractQueryContext implements Data
* Get remote nodes for the given exchange id.
*
* @param exchangeId ExchangeId to find remote nodes for.
- * @return Remote nodes for given exchangeId.
+ * @return Remote nodes for given exchangeId, or {@code null}, when remote nodes not found for given exchangeId.
*/
+ @Nullable
public List<String> remotes(long exchangeId) {
return fragmentDesc.remotes().get(exchangeId);
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java
index 27d1434..6b42626 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java
@@ -104,6 +104,7 @@ public class Inbox<RowT> extends AbstractNode<RowT> implements Mailbox<RowT>, Si
*/
public void init(
ExecutionContext<RowT> ctx, RelDataType rowType, Collection<String> srcNodeIds, @Nullable Comparator<RowT> comp) {
+ assert srcNodeIds != null : "Collection srcNodeIds not found for exchangeId: " + exchangeId;
assert context().fragmentId() == ctx.fragmentId() : "different fragments unsupported: previous=" + context().fragmentId()
+ " current=" + ctx.fragmentId();
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/FragmentDescription.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/FragmentDescription.java
index 3713eb9..0cd845e 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/FragmentDescription.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/FragmentDescription.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.metadata;
-import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import java.io.Serializable;
import java.util.List;
@@ -32,7 +32,7 @@ public class FragmentDescription implements Serializable {
private ColocationGroup target;
- private Long2ObjectOpenHashMap<List<String>> remoteSources;
+ private Long2ObjectMap<List<String>> remoteSources;
/**
* Constructor.
@@ -46,7 +46,7 @@ public class FragmentDescription implements Serializable {
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
*/
public FragmentDescription(long fragmentId, FragmentMapping mapping, ColocationGroup target,
- Long2ObjectOpenHashMap<List<String>> remoteSources) {
+ Long2ObjectMap<List<String>> remoteSources) {
this.fragmentId = fragmentId;
this.mapping = mapping;
this.target = target;
@@ -77,7 +77,7 @@ public class FragmentDescription implements Serializable {
/**
* Get remotes.
*/
- public Long2ObjectOpenHashMap<List<String>> remotes() {
+ public Long2ObjectMap<List<String>> remotes() {
return remoteSources;
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdCollation.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdCollation.java
index b1f15f1..0163996 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdCollation.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdCollation.java
@@ -23,9 +23,10 @@ import com.google.common.collect.ImmutableList;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
+import it.unimi.dsi.fastutil.ints.IntLists;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
@@ -311,7 +312,7 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
if (inputCollations == null || inputCollations.isEmpty()) {
return List.of();
}
- final Int2ObjectOpenHashMap<List<Integer>> targets = new Int2ObjectOpenHashMap<>();
+ final Int2ObjectOpenHashMap<IntList> targets = new Int2ObjectOpenHashMap<>();
final Int2ObjectOpenHashMap<SqlMonotonicity> targetsWithMonotonicity =
new Int2ObjectOpenHashMap<>();
for (Ord<RexNode> project : Ord.<RexNode>zip(projects)) {
@@ -342,14 +343,15 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
fieldCollations.clear();
boolean skip = false;
for (RelFieldCollation ifc : ic.getFieldCollations()) {
- final Collection<Integer> integers = targets.get(ifc.getFieldIndex());
+ final IntList integers = targets.getOrDefault(ifc.getFieldIndex(),
+ IntLists.emptyList());
if (integers.isEmpty()) {
skip = true; // cannot do this collation
break;
}
- fieldCollations.add(ifc.withFieldIndex(integers.iterator().next()));
+ fieldCollations.add(ifc.withFieldIndex(integers.intIterator().nextInt()));
}
if (skip) {
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractExecutionTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractExecutionTest.java
index cc35f1d..be35c16 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractExecutionTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractExecutionTest.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.sql.engine.exec.rel;
import com.google.common.collect.ImmutableMap;
+import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
@@ -92,7 +93,7 @@ public class AbstractExecutionTest extends IgniteAbstractTest {
IgniteTestUtils.setFieldValue(taskExecutor, "stripedThreadPoolExecutor", testExecutor);
}
- FragmentDescription fragmentDesc = new FragmentDescription(0, null, null, null);
+ FragmentDescription fragmentDesc = new FragmentDescription(0, null, null, Long2ObjectMaps.emptyMap());
return new ExecutionContext<>(
BaseQueryContext.builder()
.logger(log)