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)