You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2021/02/03 12:00:36 UTC
[ignite] branch master updated: IGNITE-14080 Fix hung
binary-metadata-writer after wal standalone iterator is closed - Fixes
#8720.
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 <al...@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 <se...@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);