You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by gv...@apache.org on 2018/11/29 09:02:09 UTC
ignite git commit: pending
Repository: ignite
Updated Branches:
refs/heads/ignite-10104 [created] fdd6caecb
pending
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fdd6caec
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fdd6caec
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fdd6caec
Branch: refs/heads/ignite-10104
Commit: fdd6caecbe3d8eb6324a37be06e21f45609ec086
Parents: 41f4225
Author: Igor Seliverstov <gv...@gmail.com>
Authored: Thu Nov 29 12:01:48 2018 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Thu Nov 29 12:01:48 2018 +0300
----------------------------------------------------------------------
.../processors/query/h2/IgniteH2Indexing.java | 114 ++++++++++---------
.../mvcc/CacheMvccBackupsAbstractTest.java | 2 -
2 files changed, 61 insertions(+), 55 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/fdd6caec/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 937363a..98f6661 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
@@ -1412,53 +1412,30 @@ public class IgniteH2Indexing implements GridQueryIndexing {
/**
* @param schemaName Schema name.
* @param qry Query.
- * @param keepCacheObj Flag to keep cache object.
- * @param enforceJoinOrder Enforce join order of tables.
- * @param startTx Start transaction flag.
- * @param qryTimeout Query timeout.
- * @param cancel Cancel object.
* @param params Query parameters.
* @param parts Partitions.
+ * @param qryTimeout Query timeout.
+ * @param tracker Query tracker.
+ * @param cancel Cancel object.
+ * @param keepCacheObj Flag to keep cache object.
+ * @param enforceJoinOrder Enforce join order of tables.
* @param lazy Lazy query execution flag.
- * @param mvccTracker Query tracker.
* @return Iterable result.
*/
private Iterable<List<?>> runQueryTwoStep(
- final String schemaName,
- final GridCacheTwoStepQuery qry,
- final boolean keepCacheObj,
- final boolean enforceJoinOrder,
- boolean startTx,
- final int qryTimeout,
- final GridQueryCancel cancel,
- final Object[] params,
- final int[] parts,
- final boolean lazy,
- MvccQueryTracker mvccTracker) {
- assert !qry.mvccEnabled() || !F.isEmpty(qry.cacheIds());
-
- try {
- final MvccQueryTracker tracker = mvccTracker == null && qry.mvccEnabled() ?
- MvccUtils.mvccTracker(ctx.cache().context().cacheContext(qry.cacheIds().get(0)), startTx) : mvccTracker;
-
- GridNearTxLocal tx = tx(ctx);
-
- if (qry.forUpdate())
- qry.forUpdate(checkActive(tx) != null);
+ final String schemaName, final GridCacheTwoStepQuery qry, final Object[] params, final int[] parts,
+ final int qryTimeout, MvccQueryTracker tracker, final GridQueryCancel cancel, final boolean keepCacheObj,
+ final boolean enforceJoinOrder, final boolean lazy) {
- int opTimeout = operationTimeout(qryTimeout, tx);
+ int opTimeout = operationTimeout(qryTimeout, tx(ctx));
- return new Iterable<List<?>>() {
- @SuppressWarnings("NullableProblems")
- @Override public Iterator<List<?>> iterator() {
- return rdcQryExec.query(schemaName, qry, keepCacheObj, enforceJoinOrder, opTimeout,
- cancel, params, parts, lazy, tracker);
- }
- };
- }
- catch (IgniteCheckedException e) {
- throw new CacheException(e);
- }
+ return new Iterable<List<?>>() {
+ @SuppressWarnings("NullableProblems")
+ @Override public Iterator<List<?>> iterator() {
+ return rdcQryExec.query(schemaName, qry, keepCacheObj, enforceJoinOrder, opTimeout,
+ cancel, params, parts, lazy, tracker);
+ }
+ };
}
/**
@@ -1802,6 +1779,20 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/** {@inheritDoc} */
@SuppressWarnings({"StringEquality", "unchecked"})
@Override public List<FieldsQueryCursor<List<?>>> querySqlFields(String schemaName, SqlFieldsQuery qry,
@@ -1821,7 +1812,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
if (nativeCmd != null)
return queryDistributedSqlFieldsNative(qry, nativeCmd, cliCtx);
-
List<FieldsQueryCursor<List<?>>> res;
{
@@ -1839,10 +1829,11 @@ public class IgniteH2Indexing implements GridQueryIndexing {
List<GridQueryFieldMetadata> meta = cachedQry.meta();
res = Collections.singletonList(doRunDistributedQuery(schemaName, qry, twoStepQry, meta, keepBinary,
- startTx, tracker, cancel));
+ startTx, tracker(tracker, twoStepQry, startTx), cancel));
- if (!twoStepQry.explain())
- twoStepCache.putIfAbsent(cachedQryKey, new H2TwoStepCachedQuery(meta, twoStepQry.copy()));
+ // It's possible the query was evicted from the cache
+ // while executing, let's return it into the cache.
+ twoStepCache.putIfAbsent(cachedQryKey, new H2TwoStepCachedQuery(meta, cachedQry.query()));
return res;
}
@@ -1880,27 +1871,26 @@ public class IgniteH2Indexing implements GridQueryIndexing {
// Let's avoid second reflection getter call by returning Prepared object too
Prepared prepared = parseRes.prepared();
+ H2TwoStepCachedQueryKey queryKey = parseRes.twoStepQueryKey();
GridCacheTwoStepQuery twoStepQry = parseRes.twoStepQuery();
-
List<GridQueryFieldMetadata> meta = parseRes.meta();
SqlFieldsQuery newQry = parseRes.newQuery();
-
remainingSql = parseRes.remainingSql();
if (remainingSql != null && failOnMultipleStmts)
throw new IgniteSQLException("Multiple statements queries are not supported");
+ assert twoStepQry == null || queryKey != null && meta != null;
+
+ // We cannot cache two-step query for multiple statements query except the last statement
+ if (twoStepQry != null && !twoStepQry.explain() && remainingSql == null)
+ twoStepCache.putIfAbsent(queryKey, new H2TwoStepCachedQuery(meta, twoStepQry.copy()));
+
firstArg += prepared.getParameters().size();
res.addAll(doRunPrepared(schemaName, prepared, newQry, twoStepQry, meta, keepBinary, startTx, tracker,
cancel));
-
- // We cannot cache two-step query for multiple statements query except the last statement
- if (parseRes.twoStepQuery() != null && parseRes.twoStepQueryKey() != null &&
- !parseRes.twoStepQuery().explain() && remainingSql == null)
- twoStepCache.putIfAbsent(parseRes.twoStepQueryKey(), new H2TwoStepCachedQuery(meta,
- twoStepQry.copy()));
}
return res;
@@ -1919,6 +1909,24 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
}
+ @Nullable private MvccQueryTracker tracker(MvccQueryTracker tracker, GridCacheTwoStepQuery qry, boolean startTx) {
+ if (tracker != null || !qry.mvccEnabled())
+ return tracker;
+
+ List<Integer> cacheIds = qry.cacheIds();
+
+ assert !F.isEmpty(cacheIds);
+
+ GridCacheContext<Object, Object> cctx = ctx.cache().context().cacheContext(cacheIds.get(0));
+
+ try {
+ return MvccUtils.mvccTracker(cctx, startTx);
+ }
+ catch (IgniteCheckedException e) {
+ throw new IgniteSQLException(e.getMessage(), IgniteQueryErrorCode.UNKNOWN, e);
+ }
+ }
+
/**
* Execute an all-ready {@link SqlFieldsQuery}.
* @param schemaName Schema name.
@@ -2320,8 +2328,8 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
QueryCursorImpl<List<?>> cursor = new QueryCursorImpl<>(
- runQueryTwoStep(schemaName, twoStepQry, keepBinary, qry.isEnforceJoinOrder(), startTx, qry.getTimeout(),
- cancel, qry.getArgs(), partitions, qry.isLazy(), mvccTracker), cancel);
+ runQueryTwoStep(schemaName, twoStepQry, qry.getArgs(), partitions, qry.getTimeout(), mvccTracker, cancel, keepBinary, qry.isEnforceJoinOrder(),
+ qry.isLazy()), cancel);
cursor.fieldsMeta(meta);
http://git-wip-us.apache.org/repos/asf/ignite/blob/fdd6caec/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccBackupsAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccBackupsAbstractTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccBackupsAbstractTest.java
index 894e4bb..998cb76 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccBackupsAbstractTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccBackupsAbstractTest.java
@@ -182,8 +182,6 @@ public abstract class CacheMvccBackupsAbstractTest extends CacheMvccAbstractTest
* @throws Exception If failed.
*/
public void testBackupsCoherenceWithLargeOperations() throws Exception {
- fail("https://issues.apache.org/jira/browse/IGNITE-10104");
-
disableScheduledVacuum = true;
ccfg = cacheConfiguration(cacheMode(), FULL_SYNC, 1, 10)