ignite-db - fix for NPE GG-11088
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndex.java
index 12c2240..3914bd7 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndex.java
@@ -28,6 +28,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import javax.cache.CacheException;
import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.GridKernalContext;
import org.h2.engine.Constants;
import org.h2.engine.Session;
import org.h2.index.BaseIndex;
@@ -69,21 +70,31 @@
/** */
private int fetchedCnt;
+ /** */
+ private final GridKernalContext ctx;
+
/**
+ * @param ctx Context.
* @param tbl Table.
* @param name Index name.
* @param type Type.
* @param cols Columns.
*/
- public GridMergeIndex(GridMergeTable tbl, String name, IndexType type, IndexColumn[] cols) {
+ public GridMergeIndex(GridKernalContext ctx,
+ GridMergeTable tbl,
+ String name,
+ IndexType type,
+ IndexColumn[] cols) {
+ this.ctx = ctx;
+
initBaseIndex(tbl, 0, name, cols, type);
}
/**
- *
+ * @param ctx Context.
*/
- protected GridMergeIndex() {
- // No-op.
+ protected GridMergeIndex(GridKernalContext ctx) {
+ this.ctx = ctx;
}
/**
@@ -94,6 +105,19 @@
}
/**
+ * Fails index if any source node is left.
+ */
+ protected final void checkSourceNodesAlive() {
+ for (UUID nodeId : sources()) {
+ if (!ctx.discovery().alive(nodeId)) {
+ fail(nodeId);
+
+ return;
+ }
+ }
+ }
+
+ /**
* @param nodeId Node ID.
* @return {@code true} If this index needs data from the given source node.
*/
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndexUnsorted.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndexUnsorted.java
index 501480a..5639340 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndexUnsorted.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndexUnsorted.java
@@ -24,6 +24,7 @@
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import javax.cache.CacheException;
+import org.apache.ignite.internal.GridKernalContext;
import org.h2.index.Cursor;
import org.h2.index.IndexType;
import org.h2.result.Row;
@@ -40,25 +41,27 @@
private final BlockingQueue<GridResultPage> queue = new LinkedBlockingQueue<>();
/**
+ * @param ctx Context.
* @param tbl Table.
* @param name Index name.
*/
- public GridMergeIndexUnsorted(GridMergeTable tbl, String name) {
- super(tbl, name, IndexType.createScan(false), IndexColumn.wrap(tbl.getColumns()));
+ public GridMergeIndexUnsorted(GridKernalContext ctx, GridMergeTable tbl, String name) {
+ super(ctx, tbl, name, IndexType.createScan(false), IndexColumn.wrap(tbl.getColumns()));
}
/**
+ * @param ctx Context.
* @return Dummy index instance.
*/
- public static GridMergeIndexUnsorted createDummy() {
- return new GridMergeIndexUnsorted();
+ public static GridMergeIndexUnsorted createDummy(GridKernalContext ctx) {
+ return new GridMergeIndexUnsorted(ctx);
}
/**
- *
+ * @param ctx Context.
*/
- private GridMergeIndexUnsorted() {
- // No-op.
+ private GridMergeIndexUnsorted(GridKernalContext ctx) {
+ super(ctx);
}
/** {@inheritDoc} */
@@ -94,7 +97,7 @@
if (page != null)
break;
- ((GridMergeTable)table).checkSourceNodesAlive();
+ checkSourceNodesAlive();
}
if (page.isLast())
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeTable.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeTable.java
index adfd220..a86cbcd 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeTable.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeTable.java
@@ -18,7 +18,6 @@
package org.apache.ignite.internal.processors.query.h2.twostep;
import java.util.ArrayList;
-import java.util.UUID;
import org.apache.ignite.internal.GridKernalContext;
import org.h2.command.ddl.CreateTableData;
import org.h2.engine.Session;
@@ -47,20 +46,7 @@
super(data);
this.ctx = ctx;
- idx = new GridMergeIndexUnsorted(this, "merge_scan");
- }
-
- /**
- * Fails merge table if any source node is left.
- */
- public void checkSourceNodesAlive() {
- for (UUID nodeId : idx.sources()) {
- if (!ctx.discovery().alive(nodeId)) {
- idx.fail(nodeId);
-
- return;
- }
- }
+ idx = new GridMergeIndexUnsorted(ctx, this, "merge_scan");
}
/** {@inheritDoc} */
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
index 828d9bd..47ab083 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
@@ -532,7 +532,7 @@
fakeTable(r.conn, tblIdx++).setInnerTable(tbl);
}
else
- idx = GridMergeIndexUnsorted.createDummy();
+ idx = GridMergeIndexUnsorted.createDummy(ctx);
for (ClusterNode node : nodes)
idx.addSource(node.id());