This is an automated email from the ASF dual-hosted git repository. sergeychugunov 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 f7c14f2 IGNITE-14080 Fix hung binary-metadata-writer after wal standalone iterator is closed - Fixes #8720. f7c14f2 is described below commit f7c14f2b447bc7e1744bc494fdf64d8a3c3f3111 Author: Mirza Aliev <alievmi...@gmail.com> AuthorDate: Wed Feb 3 14:58:45 2021 +0300 IGNITE-14080 Fix hung binary-metadata-writer after wal standalone iterator is closed - Fixes #8720. Signed-off-by: Sergey Chugunov <sergey.chugu...@gmail.com> --- .../wal/reader/StandaloneWalRecordsIterator.java | 2 ++ .../reader/StandaloneWalRecordsIteratorTest.java | 33 ++++++++++++++++++++++ .../ignite/testsuites/IgnitePdsTestSuite2.java | 3 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java index b2f9975..472afba 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java @@ -510,6 +510,8 @@ class StandaloneWalRecordsIterator extends AbstractWalRecordsIterator { closeCurrentWalSegment(); curWalSegmIdx = Integer.MAX_VALUE; + + sharedCtx.kernalContext().cacheObjects().stop(true); } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIteratorTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIteratorTest.java index 630d643..a8ca6a2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIteratorTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIteratorTest.java @@ -25,7 +25,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.configuration.DataRegionConfiguration; @@ -44,8 +46,10 @@ import org.apache.ignite.internal.processors.cache.persistence.file.RandomAccess import org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor; import org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager; import org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer; +import org.apache.ignite.internal.util.lang.GridAbsPredicate; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; +import org.apache.ignite.logger.NullLogger; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.junit.Test; @@ -195,6 +199,35 @@ public class StandaloneWalRecordsIteratorTest extends GridCommonAbstractTest { } /** + * Checks if binary-metadata-writer thread is not hung after standalone iterator is closed. + * + * @throws Exception if test failed. + */ + @Test + public void testBinaryMetadataWriterStopped() throws Exception { + String dir = createWalFiles(); + + final IgniteWalIteratorFactory factory = new IgniteWalIteratorFactory(new NullLogger()); + + IgniteWalIteratorFactory.IteratorParametersBuilder iterParametersBuilder = + new IgniteWalIteratorFactory.IteratorParametersBuilder().filesOrDirs(dir) + .pageSize(4096); + + try (WALIterator stIt = factory.iterator(iterParametersBuilder)) { + } + + boolean binaryMetadataWriterStopped = GridTestUtils.waitForCondition(new GridAbsPredicate() { + @Override public boolean apply() { + Set<String> threadNames = Thread.getAllStackTraces().keySet().stream().map(Thread::getName).collect(Collectors.toSet()); + + return threadNames.stream().noneMatch(t -> t.startsWith("binary-metadata-writer")); + } + }, 10_000L); + + assertTrue(binaryMetadataWriterStopped); + } + + /** * Creates WALIterator associated with files inside walDir. * * @param walDir - path to WAL directory. diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java index 2e8593f..1d7636b 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java @@ -172,6 +172,8 @@ public class IgnitePdsTestSuite2 { * @param ignoredTests Ignored tests. */ public static void addRealPageStoreTests(List<Class<?>> suite, Collection<Class> ignoredTests) { + GridTestUtils.addTestIfNeeded(suite, StandaloneWalRecordsIteratorTest.class, ignoredTests); + GridTestUtils.addTestIfNeeded(suite, IgnitePdsPageSizesTest.class, ignoredTests); // Metrics test. @@ -221,7 +223,6 @@ public class IgnitePdsTestSuite2 { GridTestUtils.addTestIfNeeded(suite, IgniteWalIteratorSwitchSegmentTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, IgniteWalIteratorExceptionDuringReadTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, IgniteNodeStoppedDuringDisableWALTest.class, ignoredTests); - GridTestUtils.addTestIfNeeded(suite, StandaloneWalRecordsIteratorTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, FilteredWalIteratorTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, WalScannerTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, IgniteWalRecoverySeveralRestartsTest.class, ignoredTests);