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

ibessonov 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 277fbb2234a IGNITE-17272 Fix logical recovery of encrypted caches 
(#10122)
277fbb2234a is described below

commit 277fbb2234a86c14f5e660ec8dfbedcee1540bd2
Author: Alexander Polovtcev <alex.polovt...@gmail.com>
AuthorDate: Fri Jul 1 11:41:23 2022 +0300

    IGNITE-17272 Fix logical recovery of encrypted caches (#10122)
---
 .../internal/pagemem/wal/record/WALRecord.java     |   4 +-
 .../wal/serializer/RecordV2Serializer.java         |  36 ++++---
 .../cache/mvcc/CacheMvccTxFailoverTest.java        |   4 +-
 .../db/IgniteLogicalRecoveryEncryptionTest.java    | 114 +++++++++++++++++++++
 .../wal/AbstractWalDeltaConsistencyTest.java       |   4 +-
 .../cache/transactions/TxStateChangeEventTest.java |   4 +-
 .../testframework/junits/GridAbstractTest.java     |  36 +++----
 .../H2DynamicColumnsAbstractBasicSelfTest.java     |  22 ++--
 .../IgnitePdsWithIndexingCoreTestSuite.java        |   2 +
 9 files changed, 174 insertions(+), 52 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
index fe3f1965478..c726ee24766 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
@@ -205,7 +205,7 @@ public abstract class WALRecord {
         MVCC_DATA_PAGE_NEW_TX_STATE_HINT_UPDATED_RECORD(51, PHYSICAL),
 
         /** Encrypted WAL-record. */
-        ENCRYPTED_RECORD(52, PHYSICAL),
+        ENCRYPTED_RECORD(52, MIXED),
 
         /**
          * Ecnrypted data record.
@@ -242,7 +242,7 @@ public abstract class WALRecord {
         OUT_OF_ORDER_UPDATE(62, LOGICAL),
 
         /** Encrypted WAL-record. */
-        ENCRYPTED_RECORD_V2(63, PHYSICAL),
+        ENCRYPTED_RECORD_V2(63, MIXED),
 
         /**
          * Ecnrypted data record.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java
index 35a89477e68..f2c8b7f50d5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java
@@ -37,9 +37,12 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteBiPredicate;
 
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType;
+import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.ENCRYPTED_RECORD;
+import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.ENCRYPTED_RECORD_V2;
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.SWITCH_SEGMENT_RECORD;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.CRC_SIZE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.REC_TYPE_SIZE;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.readRecordType;
 
 /**
  * Record V2 serializer.
@@ -72,15 +75,8 @@ public class RecordV2Serializer implements RecordSerializer {
     private final boolean skipPositionCheck;
 
     /** Thread-local heap byte buffer. */
-    private final ThreadLocal<ByteBuffer> heapTlb = new 
ThreadLocal<ByteBuffer>() {
-        @Override protected ByteBuffer initialValue() {
-            ByteBuffer buf = ByteBuffer.allocate(4096);
-
-            buf.order(GridUnsafe.NATIVE_BYTE_ORDER);
-
-            return buf;
-        }
-    };
+    private final ThreadLocal<ByteBuffer> heapTlb =
+        ThreadLocal.withInitial(() -> 
ByteBuffer.allocate(4096).order(GridUnsafe.NATIVE_BYTE_ORDER));
 
     /**
      * Record type filter.
@@ -107,7 +103,7 @@ public class RecordV2Serializer implements RecordSerializer 
{
             ByteBufferBackedDataInput in,
             WALPointer expPtr
         ) throws IOException, IgniteCheckedException {
-            WALRecord.RecordType recType = 
RecordV1Serializer.readRecordType(in);
+            RecordType recType = readRecordType(in);
 
             if (recType == SWITCH_SEGMENT_RECORD)
                 throw new SegmentEofException("Reached end of segment", null);
@@ -119,8 +115,22 @@ public class RecordV2Serializer implements 
RecordSerializer {
                     ", expected pointer [idx=" + expPtr.index() + ", offset=" 
+ expPtr.fileOffset() + "]");
             }
 
-            if (recType.purpose() != WALRecord.RecordPurpose.INTERNAL
-                && recordFilter != null && !recordFilter.apply(recType, ptr)) {
+            RecordType actualType = recType;
+
+            // In case of encrypted records we should check the type of the 
nested record
+            if (recType == ENCRYPTED_RECORD || recType == ENCRYPTED_RECORD_V2) 
{
+                in.buffer().mark();
+
+                // Ignore grpId (4 bytes) and record size (4 bytes)
+                in.skipBytes(4 + 4);
+
+                actualType = readRecordType(in);
+
+                in.buffer().reset();
+            }
+
+            if (actualType.purpose() != WALRecord.RecordPurpose.INTERNAL
+                && recordFilter != null && !recordFilter.apply(actualType, 
ptr)) {
                 int toSkip = ptr.length() - REC_TYPE_SIZE - 
FILE_WAL_POINTER_SIZE - CRC_SIZE;
 
                 assert toSkip >= 0 : "Too small saved record length: ptr=" + 
ptr + ", type=" + recType;
@@ -245,7 +255,7 @@ public class RecordV2Serializer implements RecordSerializer 
{
         DataInput in,
         WALPointer expPtr,
         boolean skipPositionCheck,
-        WALRecord.RecordType type
+        RecordType type
     ) throws IgniteCheckedException, IOException {
         long idx = in.readLong();
         int fileOff = in.readInt();
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTxFailoverTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTxFailoverTest.java
index fb5d5cd8ceb..bc1275e8c70 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTxFailoverTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTxFailoverTest.java
@@ -37,6 +37,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAhea
 import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.GridAbstractTest;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.apache.ignite.transactions.TransactionConcurrency;
@@ -75,9 +76,8 @@ public class CacheMvccTxFailoverTest extends 
GridCommonAbstractTest {
     /**
      * @return Cache configuration.
      */
-    @SuppressWarnings("unchecked")
     protected CacheConfiguration<Integer, Integer> cacheConfiguration() {
-        return defaultCacheConfiguration()
+        return GridAbstractTest.<Integer, Integer>defaultCacheConfiguration()
             .setNearConfiguration(null)
             .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT)
             
.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteLogicalRecoveryEncryptionTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteLogicalRecoveryEncryptionTest.java
new file mode 100644
index 00000000000..9274bc58e9d
--- /dev/null
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteLogicalRecoveryEncryptionTest.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache.persistence.db;
+
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cluster.ClusterState;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.DataRegionConfiguration;
+import org.apache.ignite.configuration.DataStorageConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.encryption.AbstractEncryptionTest;
+import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
+import org.apache.ignite.spi.encryption.keystore.KeystoreEncryptionSpi;
+import org.apache.ignite.testframework.junits.GridAbstractTest;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.junit.Test;
+
+/**
+ * Class containing tests for logical recovery of encrypted caches.
+ */
+public class IgniteLogicalRecoveryEncryptionTest extends 
GridCommonAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
+        KeystoreEncryptionSpi encSpi = new KeystoreEncryptionSpi();
+
+        encSpi.setKeyStorePath(AbstractEncryptionTest.KEYSTORE_PATH);
+        
encSpi.setKeyStorePassword(AbstractEncryptionTest.KEYSTORE_PASSWORD.toCharArray());
+
+        return super.getConfiguration(igniteInstanceName)
+            .setEncryptionSpi(encSpi)
+            .setDataStorageConfiguration(new DataStorageConfiguration()
+                .setDefaultDataRegionConfiguration(new 
DataRegionConfiguration()
+                    .setPersistenceEnabled(true)
+                ));
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        stopAllGrids();
+
+        cleanPersistenceDir();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        stopAllGrids();
+
+        cleanPersistenceDir();
+    }
+
+    /**
+     * Tests a scenario that partition states of encrypted caches are 
successfully restored by logical recovery.
+     */
+    @Test
+    public void testRecoverPartitionStates() throws Exception {
+        IgniteEx ignite = startTestGrid();
+
+        // Disable checkpoints to force logical recovery
+        GridCacheDatabaseSharedManager dbMgr = 
(GridCacheDatabaseSharedManager)ignite
+            .context()
+            .cache()
+            .context()
+            .database();
+
+        dbMgr.enableCheckpoints(false).get();
+
+        // Create a dynamic cache to ensure that partition states get restored 
(static caches may skip that step)
+        CacheConfiguration<Integer, Integer> cacheCfg = 
GridAbstractTest.<Integer, Integer>defaultCacheConfiguration()
+            .setEncryptionEnabled(true);
+
+        IgniteCache<Integer, Integer> cache = ignite.createCache(cacheCfg);
+
+        for (int i = 0; i < 100; i++)
+            cache.put(i, i);
+
+        stopAllGrids();
+
+        ignite = startTestGrid();
+
+        cache = ignite.cache(DEFAULT_CACHE_NAME);
+
+        for (int i = 0; i < 100; i++)
+            assertEquals(i, cache.get(i).intValue());
+    }
+
+    /**
+     * Creates a cluster of two nodes.
+     */
+    private IgniteEx startTestGrid() throws Exception {
+        IgniteEx ignite = startGrids(2);
+
+        ignite.cluster().state(ClusterState.ACTIVE);
+
+        awaitPartitionMapExchange();
+
+        return ignite;
+    }
+}
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalDeltaConsistencyTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalDeltaConsistencyTest.java
index 1d5b345896b..dc6894e85bc 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalDeltaConsistencyTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalDeltaConsistencyTest.java
@@ -27,6 +27,7 @@ import org.apache.ignite.failure.FailureHandler;
 import org.apache.ignite.failure.FailureType;
 import org.apache.ignite.failure.StopNodeFailureHandler;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.memtracker.PageMemoryTrackerConfiguration;
+import org.apache.ignite.testframework.junits.GridAbstractTest;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**
@@ -51,9 +52,8 @@ public abstract class AbstractWalDeltaConsistencyTest extends 
GridCommonAbstract
      * @param name Cache name.
      * @return Cache configuration.
      */
-    @SuppressWarnings("unchecked")
     protected <K, V> CacheConfiguration<K, V> cacheConfiguration(String name) {
-        return defaultCacheConfiguration().setName(name);
+        return GridAbstractTest.<K, 
V>defaultCacheConfiguration().setName(name);
     }
 
     /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxStateChangeEventTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxStateChangeEventTest.java
index 3761594f75c..e8eae496b49 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxStateChangeEventTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxStateChangeEventTest.java
@@ -31,6 +31,7 @@ import 
org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.MvccFeatureChecker;
+import org.apache.ignite.testframework.junits.GridAbstractTest;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.apache.ignite.transactions.TransactionConcurrency;
@@ -131,9 +132,8 @@ public class TxStateChangeEventTest extends 
GridCommonAbstractTest {
     }
 
     /** */
-    @SuppressWarnings("unchecked")
     private CacheConfiguration<Integer, Integer> getCacheConfig() {
-        return defaultCacheConfiguration().setBackups(2);
+        return GridAbstractTest.<Integer, 
Integer>defaultCacheConfiguration().setBackups(2);
     }
 
     /**
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 dfeb9c2c1f9..70144a12f41 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
@@ -199,10 +199,10 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
     private static final int DFLT_TOP_WAIT_TIMEOUT = 2000;
 
     /** */
-    private static final transient Map<Class<?>, IgniteTestResources> tests = 
new ConcurrentHashMap<>();
+    private static final Map<Class<?>, IgniteTestResources> tests = new 
ConcurrentHashMap<>();
 
     /** Loggers with changed log level for test's purposes. */
-    private static final transient Map<Logger, Level> changedLevels = new 
ConcurrentHashMap<>();
+    private static final Map<Logger, Level> changedLevels = new 
ConcurrentHashMap<>();
 
     /** */
     private static final MemoryMXBean memoryMxBean = 
ManagementFactory.getMemoryMXBean();
@@ -258,16 +258,16 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
         .around(runRule);
 
     /** */
-    private static transient boolean startGrid;
+    private static boolean startGrid;
 
     /** */
-    protected static transient IgniteLogger log;
+    protected static IgniteLogger log;
 
     /** */
-    private static transient ClassLoader clsLdr;
+    private static ClassLoader clsLdr;
 
     /** */
-    private static transient boolean stopGridErr;
+    private static boolean stopGridErr;
 
     /** Timestamp for tests. */
     private static long ts = System.currentTimeMillis();
@@ -345,8 +345,8 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
      */
     protected void afterTest() throws Exception {
         try {
-            for (Logger logger : changedLevels.keySet())
-                logger.setLevel(changedLevels.get(logger));
+            for (Map.Entry<Logger, Level> entry : changedLevels.entrySet())
+                entry.getKey().setLevel(entry.getValue());
         }
         finally {
             changedLevels.clear();
@@ -2112,9 +2112,8 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
     /**
      * @return New cache configuration with modified defaults.
      */
-    @SuppressWarnings("unchecked")
-    public static CacheConfiguration defaultCacheConfiguration() {
-        CacheConfiguration cfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
+    public static <K, V> CacheConfiguration<K, V> defaultCacheConfiguration() {
+        CacheConfiguration<K, V> cfg = new 
CacheConfiguration<>(DEFAULT_CACHE_NAME);
 
         if (MvccFeatureChecker.forcedMvcc())
             cfg.setAtomicityMode(TRANSACTIONAL_SNAPSHOT);
@@ -2403,13 +2402,8 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
     /**
      * @return Test resources.
      */
-    private synchronized IgniteTestResources getIgniteTestResources() throws 
IgniteCheckedException {
-        IgniteTestResources rsrcs = tests.get(getClass());
-
-        if (rsrcs == null)
-            tests.put(getClass(), rsrcs = new IgniteTestResources());
-
-        return rsrcs;
+    private IgniteTestResources getIgniteTestResources() {
+        return tests.computeIfAbsent(getClass(), cls -> new 
IgniteTestResources());
     }
 
     /**
@@ -2768,7 +2762,7 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
     /**
      *
      */
-    private static interface WriteReplaceOwner {
+    private interface WriteReplaceOwner {
         /**
          *
          */
@@ -2865,7 +2859,7 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
     }
 
     /** */
-    public static interface TestIgniteCallable<R> extends Serializable {
+    public interface TestIgniteCallable<R> extends Serializable {
         /**
          * @param ignite Ignite.
          */
@@ -2922,7 +2916,7 @@ public abstract class GridAbstractTest extends 
JUnitAssertAware {
     }
 
     /** */
-    public static interface TestCacheCallable<K, V, R> extends Serializable {
+    public interface TestCacheCallable<K, V, R> extends Serializable {
         /**
          * @param ignite Ignite.
          * @param cache Cache.
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicColumnsAbstractBasicSelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicColumnsAbstractBasicSelfTest.java
index f0953e2fb47..797a8383ed8 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicColumnsAbstractBasicSelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicColumnsAbstractBasicSelfTest.java
@@ -32,6 +32,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.processors.query.QueryField;
 import org.apache.ignite.internal.processors.query.QueryUtils;
 import org.apache.ignite.testframework.config.GridTestProperties;
+import org.apache.ignite.testframework.junits.GridAbstractTest;
 import org.h2.jdbc.JdbcSQLException;
 import org.junit.Assert;
 import org.junit.Test;
@@ -164,7 +165,6 @@ public abstract class H2DynamicColumnsAbstractBasicSelfTest 
extends DynamicColum
     }
 
     /** */
-    @SuppressWarnings("unchecked")
     @Test
     public void testComplexOperations() {
         IgniteCache<BinaryObject, BinaryObject> cache = ignite(nodeIndex())
@@ -178,8 +178,10 @@ public abstract class 
H2DynamicColumnsAbstractBasicSelfTest extends DynamicColum
 
         run(cache, "CREATE INDEX pidx1 ON Person(name, city desc)");
 
-        CacheConfiguration<Integer, City> ccfg = 
defaultCacheConfiguration().setName("City")
-            .setIndexedTypes(Integer.class, 
City.class).setSqlSchema(QueryUtils.DFLT_SCHEMA);
+        CacheConfiguration<Integer, City> ccfg = GridAbstractTest.<Integer, 
City>defaultCacheConfiguration()
+            .setName("City")
+            .setIndexedTypes(Integer.class, City.class)
+            .setSqlSchema(QueryUtils.DFLT_SCHEMA);
 
         ccfg.getQueryEntities().iterator().next().setKeyFieldName("id");
 
@@ -252,10 +254,10 @@ public abstract class 
H2DynamicColumnsAbstractBasicSelfTest extends DynamicColum
     /**
      * Test that we can add columns dynamically to tables associated with non 
dynamic caches storing user types as well.
      */
-    @SuppressWarnings("unchecked")
     @Test
     public void testAddColumnToNonDynamicCacheWithRealValueType() throws 
SQLException {
-        CacheConfiguration<Integer, City> ccfg = 
defaultCacheConfiguration().setName("City")
+        CacheConfiguration<Integer, City> ccfg = GridAbstractTest.<Integer, 
City>defaultCacheConfiguration()
+            .setName("City")
             .setIndexedTypes(Integer.class, City.class);
 
         IgniteCache<Integer, ?> cache = 
ignite(nodeIndex()).getOrCreateCache(ccfg);
@@ -299,11 +301,11 @@ public abstract class 
H2DynamicColumnsAbstractBasicSelfTest extends DynamicColum
      *
      * @throws SQLException If failed.
      */
-    @SuppressWarnings("unchecked")
     @Test
     public void testAddColumnUUID() throws SQLException {
-        CacheConfiguration<Integer, Object> ccfg = 
defaultCacheConfiguration().setName("GuidTest")
-                .setIndexedTypes(Integer.class, GuidTest.class);
+        CacheConfiguration<Integer, Object> ccfg = GridAbstractTest.<Integer, 
Object>defaultCacheConfiguration()
+            .setName("GuidTest")
+            .setIndexedTypes(Integer.class, GuidTest.class);
 
         Random rnd = new Random();
 
@@ -674,10 +676,10 @@ public abstract class 
H2DynamicColumnsAbstractBasicSelfTest extends DynamicColum
      *
      * @throws SQLException if failed.
      */
-    @SuppressWarnings("unchecked")
     @Test
     public void testDropColumnFromNonDynamicCacheWithRealValueType() throws 
SQLException {
-        CacheConfiguration<Integer, City> ccfg = 
defaultCacheConfiguration().setName("City")
+        CacheConfiguration<Integer, City> ccfg = GridAbstractTest.<Integer, 
City>defaultCacheConfiguration()
+            .setName("City")
             .setIndexedTypes(Integer.class, City.class);
 
         IgniteCache<Integer, ?> cache = 
ignite(nodeIndex()).getOrCreateCache(ccfg);
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java
 
b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java
index c84a63a1b1d..7790acd7015 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java
@@ -30,6 +30,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.IgnitePersistentS
 import 
org.apache.ignite.internal.processors.cache.persistence.PersistenceDirectoryWarningLoggingTest;
 import 
org.apache.ignite.internal.processors.cache.persistence.RestorePartitionStateDuringCheckpointTest;
 import 
org.apache.ignite.internal.processors.cache.persistence.db.IgniteCacheGroupsWithRestartsTest;
+import 
org.apache.ignite.internal.processors.cache.persistence.db.IgniteLogicalRecoveryEncryptionTest;
 import 
org.apache.ignite.internal.processors.cache.persistence.db.IgniteLogicalRecoveryTest;
 import 
org.apache.ignite.internal.processors.cache.persistence.db.IgniteLogicalRecoveryWithParamsTest;
 import 
org.apache.ignite.internal.processors.cache.persistence.db.IgnitePdsMultiNodePutGetRestartTest;
@@ -98,6 +99,7 @@ import org.junit.runners.Suite;
 
     IgniteLogicalRecoveryTest.class,
     IgniteLogicalRecoveryWithParamsTest.class,
+    IgniteLogicalRecoveryEncryptionTest.class,
 
     IgniteSequentialNodeCrashRecoveryTest.class,
 

Reply via email to