This is an automated email from the ASF dual-hosted git repository. ilyak 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 1c3d0fe IGNITE-11110 Fixed stop case with collision SPI enabled - Fixes #8581. 1c3d0fe is described below commit 1c3d0feceb8a11cb9cfbd7f36d36c257d2395604 Author: antkr <antkr....@gmail.com> AuthorDate: Wed Dec 30 18:51:32 2020 +0300 IGNITE-11110 Fixed stop case with collision SPI enabled - Fixes #8581. Signed-off-by: Ilya Kasnacheev <ilya.kasnach...@gmail.com> --- .../internal/processors/job/GridJobProcessor.java | 15 +++-- .../internal/GridStopWithCollisionSpiTest.java | 66 ++++++++++++++++++++++ .../ignite/testsuites/IgniteBasicTestSuite.java | 2 + 3 files changed, 79 insertions(+), 4 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java index e290286..9b4ff3b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java @@ -166,7 +166,7 @@ public class GridJobProcessor extends GridProcessorAdapter { private final boolean jobAlwaysActivate; /** */ - private final ConcurrentMap<IgniteUuid, GridJobWorker> activeJobs; + private volatile ConcurrentMap<IgniteUuid, GridJobWorker> activeJobs; /** */ private final ConcurrentMap<IgniteUuid, GridJobWorker> passiveJobs; @@ -306,8 +306,7 @@ public class GridJobProcessor extends GridProcessorAdapter { metricsUpdateFreq = ctx.config().getMetricsUpdateFrequency(); - activeJobs = jobAlwaysActivate ? new ConcurrentHashMap<IgniteUuid, GridJobWorker>() : - new JobsMap(1024, 0.75f, 256); + activeJobs = initJobsMap(jobAlwaysActivate); passiveJobs = jobAlwaysActivate ? null : new JobsMap(1024, 0.75f, 256); @@ -377,7 +376,7 @@ public class GridJobProcessor extends GridProcessorAdapter { /** {@inheritDoc} */ @Override public void stop(boolean cancel) { // Clear collections. - activeJobs.clear(); + activeJobs = initJobsMap(jobAlwaysActivate); activeJobsMetric.reset(); @@ -508,6 +507,14 @@ public class GridJobProcessor extends GridProcessorAdapter { } /** + * @param collisionsDisabled If collision SPI is disabled. + */ + private ConcurrentMap<IgniteUuid, GridJobWorker> initJobsMap(boolean collisionsDisabled) { + return collisionsDisabled ? new ConcurrentHashMap<IgniteUuid, GridJobWorker>() : + new JobsMap(1024, 0.75f, 256); + } + + /** * @param ses Session. * @param attrs Attributes. * @throws IgniteCheckedException If failed. diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridStopWithCollisionSpiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridStopWithCollisionSpiTest.java new file mode 100644 index 0000000..eb22c86 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/GridStopWithCollisionSpiTest.java @@ -0,0 +1,66 @@ +/* + * 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; + +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpi; +import org.apache.ignite.testframework.ListeningTestLogger; +import org.apache.ignite.testframework.LogListener; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; +import org.apache.ignite.testframework.junits.common.GridCommonTest; +import org.junit.Test; + +/** + * Collision job context test. + */ +@GridCommonTest(group = "Kernal Self") +public class GridStopWithCollisionSpiTest extends GridCommonAbstractTest { + /** */ + private LogListener lsnr = null; + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); + + FifoQueueCollisionSpi collision = new FifoQueueCollisionSpi(); + collision.setParallelJobsNumber(1); + + cfg.setCollisionSpi(collision); + + lsnr = LogListener.matches(logStr -> logStr.contains("UnsupportedOperationException") + && logStr.contains("ConcurrentLinkedHashMap.clear")).build(); + + ListeningTestLogger listener = new ListeningTestLogger(log, lsnr); + + cfg.setGridLogger(listener); + + return cfg; + } + + /** + * @throws Exception If test failed. + */ + @Test + public void testCollisionJobContext() throws Exception { + startGrid(0); + + stopGrid(0); + + assertFalse(lsnr.check()); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java index 93ca870..0e1ce96 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java @@ -45,6 +45,7 @@ import org.apache.ignite.internal.GridReleaseTypeSelfTest; import org.apache.ignite.internal.GridSelfTest; import org.apache.ignite.internal.GridStartStopSelfTest; import org.apache.ignite.internal.GridStopWithCancelSelfTest; +import org.apache.ignite.internal.GridStopWithCollisionSpiTest; import org.apache.ignite.internal.IgniteLocalNodeMapBeforeStartTest; import org.apache.ignite.internal.IgniteSlowClientDetectionSelfTest; import org.apache.ignite.internal.IgniteThreadGroupNodeRestartTest; @@ -175,6 +176,7 @@ import org.junit.runners.Suite; GridSpiLocalHostInjectionTest.class, GridLifecycleBeanSelfTest.class, GridStopWithCancelSelfTest.class, + GridStopWithCollisionSpiTest.class, GridReduceSelfTest.class, GridEventConsumeSelfTest.class, GridSuppressedExceptionSelfTest.class,