You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Mikhail Petrov (Jira)" <ji...@apache.org> on 2021/08/26 13:00:12 UTC

[jira] [Created] (IGNITE-15378) Node fail to restart in maintenance mode with security enabled.

Mikhail Petrov created IGNITE-15378:
---------------------------------------

             Summary: Node fail  to restart in maintenance mode with security enabled.
                 Key: IGNITE-15378
                 URL: https://issues.apache.org/jira/browse/IGNITE-15378
             Project: Ignite
          Issue Type: Bug
            Reporter: Mikhail Petrov


Exception: 
{code:java}
class org.apache.ignite.plugin.security.SecurityException: Security context isn't certain.
	at org.apache.ignite.internal.processors.security.SecurityUtils.nodeSecurityContext(SecurityUtils.java:158)
	at org.apache.ignite.internal.processors.security.IgniteSecurityProcessor.onLocalJoin(IgniteSecurityProcessor.java:399)
	at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.onDiscovery0(GridDiscoveryManager.java:799)
	at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.lambda$onDiscovery$0(GridDiscoveryManager.java:575)
	at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body0(GridDiscoveryManager.java:2793)
	at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body(GridDiscoveryManager.java:2831)
	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
	at java.lang.Thread.run(Thread.java:748)
{code}

Reproducer:

{code:java}
/** */
public class MaintenanceModeNodeSecurityTest extends AbstractSecurityTest {
    /** {@inheritDoc} */
    @Override protected IgniteConfiguration getConfiguration(
        String instanceName,
        AbstractTestSecurityPluginProvider pluginProv
    ) throws Exception {
        DataStorageConfiguration dataStorageConfiguration = new DataStorageConfiguration()
            .setDefaultDataRegionConfiguration(new DataRegionConfiguration()
                .setPersistenceEnabled(true));

        return super.getConfiguration(instanceName, pluginProv)
            .setDataStorageConfiguration(dataStorageConfiguration);
    }

    /** {@inheritDoc} */
    @Override protected void beforeTestsStarted() throws Exception {
        cleanPersistenceDir();

        super.beforeTestsStarted();
    }

    /** Tests that node can be successfully restarted in maintenance mode with security enabled. */
    @Test
    public void testNodeStartInMaintenanceMode() throws Exception {
        IgniteEx crd = startGridAllowAll(getTestIgniteInstanceName(0));
        IgniteEx srv = startGridAllowAll(getTestIgniteInstanceName(1));

        crd.cluster().baselineAutoAdjustEnabled(false);
        crd.cluster().state(ACTIVE);

        IgniteCache<Object, Object> cache = crd.getOrCreateCache(new CacheConfiguration<>(DEFAULT_CACHE_NAME)
            .setAffinity(new RendezvousAffinityFunction(false, 32))
            .setBackups(1));

        String srvPdsFolder = srv.context().pdsFolderResolver().resolveFolders().folderName();
        File dbDir = U.resolveWorkDirectory(srv.configuration().getWorkDirectory(), "db", false);

        File srvLfsDir = new File(dbDir, srvPdsFolder);

        for (int k = 0; k < 1000; k++)
            cache.put(k, k);

        GridCacheDatabaseSharedManager srvDbMgr = (GridCacheDatabaseSharedManager)crd.context().cache().context().database();
        GridCacheDatabaseSharedManager crdDbMgr = (GridCacheDatabaseSharedManager)srv.context().cache().context().database();

        srvDbMgr.forceCheckpoint("cp").futureFor(CheckpointState.FINISHED).get();
        crdDbMgr.forceCheckpoint("cp").futureFor(CheckpointState.FINISHED).get();

        crd.cluster().disableWal(cache.getName());

        for (int k = 1000; k < 2000; k++)
            cache.put(k, k);

        stopGrid(1);

        File[] cpMarkers = new File(srvLfsDir, "cp").listFiles();

        for (File cpMark : cpMarkers) {
            if (cpMark.getName().contains("-END"))
                cpMark.delete();
        }

        assertThrows(log, () -> startGridAllowAll(getTestIgniteInstanceName(1)), Exception.class, null);

        assertTrue(startGridAllowAll(getTestIgniteInstanceName(1)).context().maintenanceRegistry().isMaintenanceMode());
    }
}
{code}





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