Pavel Pereslegin created IGNITE-13127:
-----------------------------------------

             Summary: Master key change can produce exception in discovery 
notyfier worker when WAL is disabled.
                 Key: IGNITE-13127
                 URL: https://issues.apache.org/jira/browse/IGNITE-13127
             Project: Ignite
          Issue Type: Task
            Reporter: Pavel Pereslegin


When WALMode is set to NONE, master key change may produce the following error.

{noformat}
Critical system error detected. Will be handled accordingly to configured 
handler [hnd=NoOpFailureHandler [super=AbstractFailureHandler 
[ignoredFailureTypes=UnmodifiableSet [SYSTEM_WORKER_BLOCKED, 
SYSTEM_CRITICAL_OPERATION_TIMEOUT]]], failureCtx=FailureContext 
[type=SYSTEM_WORKER_TERMINATION, err=java.lang.AssertionError]]
java.lang.AssertionError
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.writeKeysToWal(GridEncryptionManager.java:1679)
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.doChangeMasterKey(GridEncryptionManager.java:1642)
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.performMasterKeyChange(GridEncryptionManager.java:1821)
        at 
org.apache.ignite.internal.util.distributed.DistributedProcess.lambda$new$2(DistributedProcess.java:150)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.onDiscovery0(GridDiscoveryManager.java:732)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.lambda$onDiscovery$0(GridDiscoveryManager.java:533)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body0(GridDiscoveryManager.java:2641)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body(GridDiscoveryManager.java:2679)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at java.lang.Thread.run(Thread.java:748)
{noformat}

Reproducer

{code:java}
    @Override protected IgniteConfiguration getConfiguration(String name) 
throws Exception {
        KeystoreEncryptionSpi encSpi = new KeystoreEncryptionSpi();

        
encSpi.setKeyStorePath(resolveIgnitePath("modules/core/src/test/resources/tde.jks").getAbsolutePath());
        encSpi.setKeyStorePassword("love_sex_god".toCharArray());

        DataStorageConfiguration memCfg = new DataStorageConfiguration()
            .setDefaultDataRegionConfiguration(
                new DataRegionConfiguration()
                    .setMaxSize(10L * 1024 * 1024)
                    .setPersistenceEnabled(true))
            .setWalMode(NONE);

        return super.getConfiguration(name).
            setDataStorageConfiguration(memCfg).
            setEncryptionSpi(encSpi);
    }

    @Test
    public void testChangeMasterKey() throws Exception {
        Ignite node0 = startGrid(0);

        node0.cluster().state(ClusterState.ACTIVE);

        node0.encryption().changeMasterKey(MASTER_KEY_NAME_2).get();
    }
{code}

For in-memory cluster master key rotation produces the following error:
{noformat}
Critical system error detected. Will be handled accordingly to configured 
handler [hnd=NoOpFailureHandler [super=AbstractFailureHandler 
[ignoredFailureTypes=UnmodifiableSet [SYSTEM_WORKER_BLOCKED, 
SYSTEM_CRITICAL_OPERATION_TIMEOUT]]], failureCtx=FailureContext 
[type=CRITICAL_ERROR, err=class o.a.i.IgniteException: Unable to change master 
key locally.]]
class org.apache.ignite.IgniteException: Unable to change master key locally.
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.doChangeMasterKey(GridEncryptionManager.java:1658)
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.performMasterKeyChange(GridEncryptionManager.java:1821)
        at 
org.apache.ignite.internal.util.distributed.DistributedProcess.lambda$new$2(DistributedProcess.java:150)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.onDiscovery0(GridDiscoveryManager.java:732)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.lambda$onDiscovery$0(GridDiscoveryManager.java:533)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body0(GridDiscoveryManager.java:2641)
        at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body(GridDiscoveryManager.java:2679)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.writeKeysToWal(GridEncryptionManager.java:1677)
        at 
org.apache.ignite.internal.managers.encryption.GridEncryptionManager.doChangeMasterKey(GridEncryptionManager.java:1642)
{noformat}
It seems rotation should not start for in-memory cluster with some user 
friendly message.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to