IGNITE-15205 Fix standalone records iterator for existing context (#9283)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/IgniteWalIteratorFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/IgniteWalIteratorFactory.java
index 9bbab22..8e01bac 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/IgniteWalIteratorFactory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/IgniteWalIteratorFactory.java
@@ -173,29 +173,46 @@
) throws IgniteCheckedException, IllegalArgumentException {
iteratorParametersBuilder.validate();
- GridCacheSharedContext<?, ?> sctx;
-
if (iteratorParametersBuilder.sharedCtx == null) {
- sctx = prepareSharedCtx(iteratorParametersBuilder);
+ GridCacheSharedContext<?, ?> sctx = prepareSharedCtx(iteratorParametersBuilder);
for (GridComponent comp : sctx.kernalContext())
comp.start();
- }
- else
- sctx = iteratorParametersBuilder.sharedCtx;
- return new StandaloneWalRecordsIterator(
- iteratorParametersBuilder.log == null ? log : iteratorParametersBuilder.log,
- sctx,
- iteratorParametersBuilder.ioFactory,
- resolveWalFiles(iteratorParametersBuilder),
- iteratorParametersBuilder.filter,
- iteratorParametersBuilder.lowBound,
- iteratorParametersBuilder.highBound,
- iteratorParametersBuilder.keepBinary,
- iteratorParametersBuilder.bufferSize,
- iteratorParametersBuilder.strictBoundsCheck
- );
+ return new StandaloneWalRecordsIterator(
+ iteratorParametersBuilder.log == null ? log : iteratorParametersBuilder.log,
+ sctx,
+ iteratorParametersBuilder.ioFactory,
+ resolveWalFiles(iteratorParametersBuilder),
+ iteratorParametersBuilder.filter,
+ iteratorParametersBuilder.lowBound,
+ iteratorParametersBuilder.highBound,
+ iteratorParametersBuilder.keepBinary,
+ iteratorParametersBuilder.bufferSize,
+ iteratorParametersBuilder.strictBoundsCheck
+ ) {
+ @Override protected void onClose() throws IgniteCheckedException {
+ super.onClose();
+
+ for (GridComponent comp : sctx.kernalContext())
+ comp.stop(true);
+ }
+ };
+ }
+ else {
+ return new StandaloneWalRecordsIterator(
+ iteratorParametersBuilder.log == null ? log : iteratorParametersBuilder.log,
+ iteratorParametersBuilder.sharedCtx,
+ iteratorParametersBuilder.ioFactory,
+ resolveWalFiles(iteratorParametersBuilder),
+ iteratorParametersBuilder.filter,
+ iteratorParametersBuilder.lowBound,
+ iteratorParametersBuilder.highBound,
+ iteratorParametersBuilder.keepBinary,
+ iteratorParametersBuilder.bufferSize,
+ iteratorParametersBuilder.strictBoundsCheck
+ );
+ }
}
/**
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 74c7a69..14e99bc 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
@@ -24,7 +24,6 @@
import java.util.stream.Collectors;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.internal.GridComponent;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.pagemem.wal.record.DataEntry;
import org.apache.ignite.internal.pagemem.wal.record.DataRecord;
@@ -518,9 +517,6 @@
closeCurrentWalSegment();
curWalSegmIdx = Integer.MAX_VALUE;
-
- for (GridComponent comp : sharedCtx.kernalContext())
- comp.stop(true);
}
/** {@inheritDoc} */