You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2019/12/30 10:47:42 UTC

[ignite] branch master updated: IGNITE-12167: Move resetting of BPlusTree.pageHndWrapper to GridAbstractTest. This closes #6962.

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 06fe064  IGNITE-12167: Move resetting of BPlusTree.pageHndWrapper to GridAbstractTest. This closes #6962.
06fe064 is described below

commit 06fe064c141f72d930b0eedd85e33d5ff68be312
Author: denis-chudov <dc...@gridgain.com>
AuthorDate: Mon Dec 30 13:47:15 2019 +0300

    IGNITE-12167: Move resetting of BPlusTree.pageHndWrapper to GridAbstractTest. This closes #6962.
---
 .../cache/persistence/tree/BPlusTree.java          | 34 +++++++++++++++-------
 ...ionIntegrityWithPrimaryIndexCorruptionTest.java |  4 +--
 .../testframework/junits/GridAbstractTest.java     |  4 ++-
 .../index/H2TreeCorruptedTreeExceptionTest.java    | 26 ++++++++---------
 .../index/StopNodeOnRebuildIndexFailureTest.java   | 10 ++-----
 5 files changed, 44 insertions(+), 34 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
index fc14a5b..c98a7b0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
@@ -96,7 +96,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     private static final Object[] EMPTY = {};
 
     /** Wrapper for tree pages operations. Noop by default. Override for test purposes. */
-    public static volatile PageHandlerWrapper<Result> pageHndWrapper = (tree, hnd) -> hnd;
+    public static PageHandlerWrapper<Result> testHndWrapper = null;
 
     /** Destroy msg. */
     public static final String CONC_DESTROY_MSG = "Tree is being concurrently destroyed: ";
@@ -820,15 +820,29 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         this.failureProcessor = failureProcessor;
 
         // Initialize page handlers.
-        askNeighbor = (PageHandler<Get, Result>) pageHndWrapper.wrap(this, new AskNeighbor());
-        search = (PageHandler<Get, Result>) pageHndWrapper.wrap(this, new Search());
-        lockTail = (PageHandler<Remove, Result>) pageHndWrapper.wrap(this, new LockTail());
-        lockTailForward = (PageHandler<Remove, Result>) pageHndWrapper.wrap(this, new LockTailForward());
-        lockBackAndTail = (PageHandler<Remove, Result>) pageHndWrapper.wrap(this, new LockBackAndTail());
-        lockBackAndRmvFromLeaf = (PageHandler<Remove, Result>) pageHndWrapper.wrap(this, new LockBackAndRmvFromLeaf());
-        rmvFromLeaf = (PageHandler<Remove, Result>) pageHndWrapper.wrap(this, new RemoveFromLeaf());
-        insert = (PageHandler<Put, Result>) pageHndWrapper.wrap(this, new Insert());
-        replace = (PageHandler<Put, Result>) pageHndWrapper.wrap(this, new Replace());
+        askNeighbor = (PageHandler<Get, Result>) wrap(this, new AskNeighbor());
+        search = (PageHandler<Get, Result>) wrap(this, new Search());
+        lockTail = (PageHandler<Remove, Result>) wrap(this, new LockTail());
+        lockTailForward = (PageHandler<Remove, Result>) wrap(this, new LockTailForward());
+        lockBackAndTail = (PageHandler<Remove, Result>) wrap(this, new LockBackAndTail());
+        lockBackAndRmvFromLeaf = (PageHandler<Remove, Result>) wrap(this, new LockBackAndRmvFromLeaf());
+        rmvFromLeaf = (PageHandler<Remove, Result>) wrap(this, new RemoveFromLeaf());
+        insert = (PageHandler<Put, Result>) wrap(this, new Insert());
+        replace = (PageHandler<Put, Result>) wrap(this, new Replace());
+    }
+
+    /**
+     * Returns a wrapper for page handler. By default, there is no wrapper.
+     *
+     * @param tree B-plus tree.
+     * @param hnd Page handler.
+     * @return Page handler wrapper.
+     */
+    private PageHandler<?, Result> wrap(BPlusTree<?, ?> tree, PageHandler<?, Result> hnd) {
+        if (testHndWrapper == null)
+            return hnd;
+        else
+            return testHndWrapper.wrap(tree, hnd);
     }
 
     /**
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TransactionIntegrityWithPrimaryIndexCorruptionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TransactionIntegrityWithPrimaryIndexCorruptionTest.java
index f33dda9..105a5ba 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TransactionIntegrityWithPrimaryIndexCorruptionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TransactionIntegrityWithPrimaryIndexCorruptionTest.java
@@ -197,7 +197,7 @@ public class TransactionIntegrityWithPrimaryIndexCorruptionTest extends Abstract
 
         /** {@inheritDoc} */
         @Override public void beforeNodesStarted() {
-            BPlusTree.pageHndWrapper = (tree, hnd) -> {
+            BPlusTree.testHndWrapper = (tree, hnd) -> {
                 final IgniteEx locIgnite = (IgniteEx)Ignition.localIgnite();
 
                 if (getTestIgniteInstanceIndex(locIgnite.name()) != failedNodeIdx)
@@ -251,7 +251,7 @@ public class TransactionIntegrityWithPrimaryIndexCorruptionTest extends Abstract
         /** {@inheritDoc} */
         @Override public void afterTransactionsFinished() throws Exception {
             // Disable index corruption.
-            BPlusTree.pageHndWrapper = (tree, hnd) -> hnd;
+            BPlusTree.testHndWrapper = null;
 
             // Wait until node with corrupted index will left cluster.
             GridTestUtils.waitForCondition(() -> {
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 8173f43..54e810a 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -79,6 +79,7 @@ import org.apache.ignite.internal.binary.BinaryEnumCache;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheGroupContext;
+import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
 import org.apache.ignite.internal.processors.resource.GridSpringResourceContext;
 import org.apache.ignite.internal.util.GridClassLoaderCache;
 import org.apache.ignite.internal.util.GridTestClockTimer;
@@ -330,7 +331,8 @@ public abstract class GridAbstractTest extends JUnitAssertAware {
      * @throws Exception If failed. {@link #afterTestsStopped()} will be called in this case.
      */
     protected void beforeTestsStarted() throws Exception {
-        // No-op.
+        // Checking that no test wrapper is set before test execution.
+        assert BPlusTree.testHndWrapper == null;
     }
 
     /**
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2TreeCorruptedTreeExceptionTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2TreeCorruptedTreeExceptionTest.java
index 82bcce9..1fc34b4 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2TreeCorruptedTreeExceptionTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2TreeCorruptedTreeExceptionTest.java
@@ -30,7 +30,6 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
 import org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException;
 import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
 import org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandler;
-import org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandlerWrapper;
 import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.testframework.ListeningTestLogger;
@@ -40,6 +39,7 @@ import org.apache.ignite.testframework.junits.WithSystemProperty;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
+import static java.lang.String.format;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_TO_STRING_INCLUDE_SENSITIVE;
 
 /** */
@@ -57,16 +57,18 @@ public class H2TreeCorruptedTreeExceptionTest extends GridCommonAbstractTest {
     private final AtomicBoolean failWithCorruptTree = new AtomicBoolean(false);
 
     /** */
-    private PageHandlerWrapper<BPlusTree.Result> regularWrapper;
-
-    /** */
     private final LogListener logListener = new MessageOrderLogListener(
-        String.format(".*?Tree is corrupted.*?cacheId=65, cacheName=A, indexName=%s, groupName=%s.*%s.*",
-            IDX_NAME, GRP_NAME, IGNITE_TO_STRING_INCLUDE_SENSITIVE)
+        format(
+                ".*?Tree is corrupted.*?cacheId=65, cacheName=A, indexName=%s, groupName=%s" +
+                    ", msg=Runtime failure on row: Row@.*?key: 1, val: .*?%s.*",
+                IDX_NAME,
+                GRP_NAME,
+                IGNITE_TO_STRING_INCLUDE_SENSITIVE
+        )
     );
 
     /** */
-    private final LogListener logSensListener = new MessageOrderLogListener(String.format(".*%s.*", VERY_SENS_STR_DATA));
+    private final LogListener logSensListener = new MessageOrderLogListener(format(".*%s.*", VERY_SENS_STR_DATA));
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
@@ -99,9 +101,7 @@ public class H2TreeCorruptedTreeExceptionTest extends GridCommonAbstractTest {
 
         cleanPersistenceDir();
 
-        regularWrapper = BPlusTree.pageHndWrapper;
-
-        BPlusTree.pageHndWrapper = (tree, hnd) -> {
+        BPlusTree.testHndWrapper = (tree, hnd) -> {
             if (hnd instanceof BPlusTree.Insert) {
                 PageHandler<Object, BPlusTree.Result> delegate = (PageHandler<Object, BPlusTree.Result>)hnd;
 
@@ -134,15 +134,14 @@ public class H2TreeCorruptedTreeExceptionTest extends GridCommonAbstractTest {
 
     /** {@inheritDoc} */
     @Override protected void afterTest() throws Exception {
-        //restoring wrapper
-        BPlusTree.pageHndWrapper = regularWrapper;
-
         stopAllGrids();
 
         cleanPersistenceDir();
 
         clearGridToStringClassCache();
 
+        BPlusTree.testHndWrapper = null;
+
         super.afterTest();
     }
 
@@ -177,6 +176,7 @@ public class H2TreeCorruptedTreeExceptionTest extends GridCommonAbstractTest {
         assertFalse(logSensListener.check());
 
         System.setProperty(IGNITE_TO_STRING_INCLUDE_SENSITIVE, Boolean.TRUE.toString());
+
         clearGridToStringClassCache();
 
         logListener.reset();
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/StopNodeOnRebuildIndexFailureTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/StopNodeOnRebuildIndexFailureTest.java
index 82f9247..bffab83 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/StopNodeOnRebuildIndexFailureTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/StopNodeOnRebuildIndexFailureTest.java
@@ -33,7 +33,6 @@ import org.apache.ignite.internal.metric.IoStatisticsHolder;
 import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
 import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
 import org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandler;
-import org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandlerWrapper;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -56,9 +55,6 @@ public class StopNodeOnRebuildIndexFailureTest extends GridCommonAbstractTest {
     /** Create index sql. */
     private static final String CREATE_INDEX_SQL = "CREATE INDEX " + INDEX_NAME + " ON " + SQL_TABLE + " (name)";
 
-    /** Normal BPlusTree page handler wrapper. */
-    private PageHandlerWrapper<BPlusTree.Result> prevPageHndWrapper;
-
     /** */
     private final AtomicBoolean exceptionWasThrown = new AtomicBoolean();
 
@@ -91,11 +87,9 @@ public class StopNodeOnRebuildIndexFailureTest extends GridCommonAbstractTest {
 
         cleanPersistenceDir();
 
-        prevPageHndWrapper = BPlusTree.pageHndWrapper;
-
         exceptionWasThrown.set(false);
 
-        BPlusTree.pageHndWrapper = (tree, hnd) -> {
+        BPlusTree.testHndWrapper = (tree, hnd) -> {
             if (tree.getName().toUpperCase().contains(INDEX_NAME)) {
                 PageHandler<Object, BPlusTree.Result> delegate = (PageHandler<Object, BPlusTree.Result>)hnd;
 
@@ -161,7 +155,7 @@ public class StopNodeOnRebuildIndexFailureTest extends GridCommonAbstractTest {
 
         cleanPersistenceDir();
 
-        BPlusTree.pageHndWrapper = prevPageHndWrapper;
+        BPlusTree.testHndWrapper = null;
     }
 
     /**