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/02/15 08:52:17 UTC
[33/50] [abbrv] ignite git commit: ignite-split2 - fixes
ignite-split2 - fixes
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9397c199
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9397c199
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9397c199
Branch: refs/heads/ignite-1232
Commit: 9397c199122e2cdccab89b4026eb40e965962a90
Parents: b1a38a9
Author: S.Vladykin <sv...@gridgain.com>
Authored: Sun Dec 20 18:41:51 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Sun Dec 20 18:41:51 2015 +0300
----------------------------------------------------------------------
.../processors/query/h2/IgniteH2Indexing.java | 93 ++++++++------------
.../query/h2/opt/GridH2CollocationModel.java | 28 +++---
.../query/h2/opt/GridH2TreeIndex.java | 7 +-
.../query/h2/twostep/GridMapQueryExecutor.java | 12 +--
.../h2/twostep/GridReduceQueryExecutor.java | 6 +-
5 files changed, 68 insertions(+), 78 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9397c199/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index b16b48e..23e7ec4 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -120,7 +120,6 @@ import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.spi.indexing.IndexingQueryFilter;
import org.h2.api.JavaObjectSerializer;
import org.h2.command.CommandInterface;
-import org.h2.command.dml.OptimizerHints;
import org.h2.engine.Session;
import org.h2.engine.SysProperties;
import org.h2.index.Index;
@@ -728,21 +727,12 @@ public class IgniteH2Indexing implements GridQueryIndexing {
@Override public GridQueryFieldsResult queryLocalSqlFields(@Nullable final String spaceName, final String qry,
@Nullable final Collection<Object> params, final IndexingQueryFilter filters, boolean enforceJoinOrder)
throws IgniteCheckedException {
- initLocalQueryContext(filters);
+ Connection conn = connectionForSpace(spaceName);
- try {
- Connection conn = connectionForSpace(spaceName);
-
- enforceJoinOrder(enforceJoinOrder);
-
- ResultSet rs;
+ initLocalQueryContext(conn, enforceJoinOrder, filters);
- try {
- rs = executeSqlQueryWithTimer(spaceName, conn, qry, params, true);
- }
- finally {
- enforceJoinOrder(false);
- }
+ try {
+ ResultSet rs = executeSqlQueryWithTimer(spaceName, conn, qry, params, true);
List<GridQueryFieldMetadata> meta = null;
@@ -888,25 +878,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
/**
- * Executes query.
- *
- * @param space Space.
- * @param qry Query.
- * @param params Query parameters.
- * @param tbl Target table of query to generate select.
- * @return Result set.
- * @throws IgniteCheckedException If failed.
- */
- private ResultSet executeQuery(String space, String qry, @Nullable Collection<Object> params,
- TableDescriptor tbl) throws IgniteCheckedException {
- Connection conn = connectionForThread(tbl.schema());
-
- String sql = generateQuery(qry, tbl);
-
- return executeSqlQueryWithTimer(space, conn, sql, params, true);
- }
-
- /**
* Binds parameters to prepared statement.
*
* @param stmt Prepared statement.
@@ -923,12 +894,28 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
/**
+ * @param conn Connection.
+ * @param enforceJoinOrder Enforce join order of tables.
* @param filter Filter.
*/
- private void initLocalQueryContext(IndexingQueryFilter filter) {
+ private void initLocalQueryContext(Connection conn, boolean enforceJoinOrder, IndexingQueryFilter filter) {
+ setupConnection(conn, false, enforceJoinOrder);
+
GridH2QueryContext.set(new GridH2QueryContext(nodeId, nodeId, 0, LOCAL).filter(filter).distributedJoins(false));
}
+ /**
+ * @param conn Connection to use.
+ * @param distributedJoins If distributed joins are enabled.
+ * @param enforceJoinOrder Enforce join order of tables.
+ */
+ public void setupConnection(Connection conn, boolean distributedJoins, boolean enforceJoinOrder) {
+ Session s = session(conn);
+
+ s.setForceJoinOrder(enforceJoinOrder);
+ s.setJoinBatchEnabled(distributedJoins);
+ }
+
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override public <K, V> GridCloseableIterator<IgniteBiTuple<K, V>> queryLocalSql(@Nullable String spaceName,
@@ -939,10 +926,14 @@ public class IgniteH2Indexing implements GridQueryIndexing {
if (tbl == null)
throw new CacheException("Failed to find SQL table for type: " + type.name());
- initLocalQueryContext(filter);
+ String sql = generateQuery(qry, tbl);
+
+ Connection conn = connectionForThread(tbl.schema());
+
+ initLocalQueryContext(conn, false, filter);
try {
- ResultSet rs = executeQuery(spaceName, qry, params, tbl);
+ ResultSet rs = executeSqlQueryWithTimer(spaceName, conn, sql, params, true);
return new KeyValIterator(rs);
}
@@ -1026,18 +1017,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
/**
- * @param enforce If {@code true}, then table join order will be enforced.
- */
- public void enforceJoinOrder(boolean enforce) {
- OptimizerHints hints = null;
- if (enforce) {
- hints = new OptimizerHints();
- hints.setJoinReorderEnabled(false);
- }
- OptimizerHints.set(hints);
- }
-
- /**
* @param cctx Cache context.
* @return {@code true} If the given cache is partitioned.
*/
@@ -1059,8 +1038,9 @@ public class IgniteH2Indexing implements GridQueryIndexing {
final String sqlQry = qry.getSql();
Connection c = connectionForSpace(space);
+
final boolean enforceJoinOrder = qry.isEnforceJoinOrder();
- final boolean distributedJoins = qry.isDistributedJoins();
+ final boolean distributedJoins = qry.isDistributedJoins() && isPartitioned(cctx);
final boolean groupByCollocated = qry.isCollocated();
GridCacheTwoStepQuery twoStepQry;
@@ -1076,12 +1056,11 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
else {
final UUID locNodeId = ctx.localNodeId();
- Session ses = session(c);
+
+ setupConnection(c, distributedJoins, enforceJoinOrder);
GridH2QueryContext.set(new GridH2QueryContext(locNodeId, locNodeId, 0, PREPARE)
- .distributedJoins(distributedJoins && isPartitioned(cctx)));
- enforceJoinOrder(enforceJoinOrder);
- ses.setJoinBatchEnabled(false);
+ .distributedJoins(distributedJoins));
PreparedStatement stmt;
@@ -1092,8 +1071,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
throw new CacheException("Failed to parse query: " + sqlQry, e);
}
finally {
- ses.setJoinBatchEnabled(true);
- enforceJoinOrder(false);
GridH2QueryContext.clear(false);
}
@@ -1429,7 +1406,11 @@ public class IgniteH2Indexing implements GridQueryIndexing {
if (tbl == null)
return -1;
- ResultSet rs = executeSqlQuery(connectionForSpace(spaceName),
+ Connection conn = connectionForSpace(spaceName);
+
+ setupConnection(conn, false, false);
+
+ ResultSet rs = executeSqlQuery(conn,
"SELECT COUNT(*) FROM " + tbl.fullTableName(), null, false);
try {
http://git-wip-us.apache.org/repos/asf/ignite/blob/9397c199/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
index 2a1437c..95a2432 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.h2.command.dml.Query;
import org.h2.command.dml.Select;
import org.h2.command.dml.SelectUnion;
+import org.h2.expression.Comparison;
import org.h2.expression.Expression;
import org.h2.expression.ExpressionColumn;
import org.h2.index.IndexCondition;
@@ -40,10 +41,10 @@ public final class GridH2CollocationModel {
public static final int MULTIPLIER_COLLOCATED = 1;
/** */
- private static final int MULTIPLIER_UNICAST = 20;
+ private static final int MULTIPLIER_UNICAST = 50;
/** */
- private static final int MULTIPLIER_BROADCAST = 80;
+ private static final int MULTIPLIER_BROADCAST = 200;
/** */
private final GridH2CollocationModel upper;
@@ -285,7 +286,7 @@ public final class GridH2CollocationModel {
for (int i = 0; i < idxConditions.size(); i++) {
IndexCondition c = idxConditions.get(i);
- if (c.getCompareType() == IndexCondition.EQUALITY &&
+ if (c.getCompareType() == Comparison.EQUAL &&
c.getColumn().getColumnId() == affColId && c.isEvaluatable()) {
affKeyConditionFound = true;
@@ -451,9 +452,13 @@ public final class GridH2CollocationModel {
if (child == null && create && isChildTableOrView(i, null)) {
TableFilter f = childFilters[i];
- children[i] = child = f.getTable().isView() ?
- buildCollocationModel(this, i, getSubQuery(f), null) :
- createChildModel(this, i, null);
+ if (f.getTable().isView())
+ child = buildCollocationModel(this, i, getSubQuery(f), null);
+ else
+ child = createChildModel(this, i, null);
+
+ assert child != null;
+ assert children[i] == child;
}
return child;
@@ -558,10 +563,13 @@ public final class GridH2CollocationModel {
SelectUnion union = (SelectUnion)qry;
- GridH2CollocationModel a = buildCollocationModel(upper, filter, union.getLeft(), unions);
- GridH2CollocationModel b = buildCollocationModel(upper, filter, union.getRight(), unions);
+ GridH2CollocationModel left = buildCollocationModel(upper, filter, union.getLeft(), unions);
+ GridH2CollocationModel right = buildCollocationModel(upper, filter, union.getRight(), unions);
+
+ assert left != null;
+ assert right != null;
- return a == null ? b : a;
+ return upper != null ? upper : left;
}
Select select = (Select)qry;
@@ -586,7 +594,7 @@ public final class GridH2CollocationModel {
createChildModel(cm, i, null);
}
- return upper == null ? cm : null;
+ return upper != null ? upper : cm;
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9397c199/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
index 5641222..13414bd 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
@@ -1423,7 +1423,7 @@ public class GridH2TreeIndex extends GridH2IndexBase implements Comparator<GridS
if (res != null) {
switch (res.status()) {
- case GridH2IndexRangeResponse.STATUS_OK:
+ case STATUS_OK:
List<GridH2RowRange> ranges0 = res.ranges();
remainingRanges -= ranges0.size();
@@ -1454,11 +1454,12 @@ public class GridH2TreeIndex extends GridH2IndexBase implements Comparator<GridS
throw new IgniteInterruptedException(e.getMessage());
}
+ // Retry to send the request once more after some time.
send(singletonList(node), req);
- continue;
+ break;
- case GridH2IndexRangeResponse.STATUS_ERROR:
+ case STATUS_ERROR:
throw new CacheException(res.error());
default:
http://git-wip-us.apache.org/repos/asf/ignite/blob/9397c199/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
index d8b1180..7b7711a 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.processors.query.h2.twostep;
import java.lang.reflect.Field;
+import java.sql.Connection;
import java.sql.ResultSet;
import java.util.AbstractCollection;
import java.util.ArrayList;
@@ -511,19 +512,22 @@ public class GridMapQueryExecutor {
}
}
+ Connection conn = h2.connectionForSpace(mainCache);
+
+ // Here we enforce join order to have the same behavior on all the nodes.
+ h2.setupConnection(conn, distributedJoins, true);
+
GridH2QueryContext.set(qctx);
// qctx is set, we have to release reservations inside of it.
reserved = null;
- h2.enforceJoinOrder(true);
-
try {
// Run queries.
int i = 0;
for (GridCacheSqlQuery qry : qrys) {
- ResultSet rs = h2.executeSqlQueryWithTimer(mainCache, h2.connectionForSpace(mainCache), qry.query(),
+ ResultSet rs = h2.executeSqlQueryWithTimer(mainCache, conn, qry.query(),
F.asList(qry.parameters()), true);
if (ctx.event().isRecordable(EVT_CACHE_QUERY_EXECUTED)) {
@@ -559,8 +563,6 @@ public class GridMapQueryExecutor {
}
}
finally {
- h2.enforceJoinOrder(false);
-
GridH2QueryContext.clear(distributedJoins);
if (!F.isEmpty(snapshotedTbls)) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/9397c199/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
----------------------------------------------------------------------
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 6004629..fffb822 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
@@ -679,11 +679,11 @@ public class GridReduceQueryExecutor {
else {
UUID locNodeId = ctx.localNodeId();
+ h2.setupConnection(r.conn, false, enforceJoinOrder);
+
GridH2QueryContext.set(new GridH2QueryContext(locNodeId, locNodeId, qryReqId, REDUCE)
.pageSize(r.pageSize).distributedJoins(false));
- h2.enforceJoinOrder(enforceJoinOrder);
-
try {
if (qry.explain())
return explainPlan(r.conn, space, qry);
@@ -699,8 +699,6 @@ public class GridReduceQueryExecutor {
resIter = new Iter(res);
}
finally {
- h2.enforceJoinOrder(false);
-
GridH2QueryContext.clear(false);
}
}