This is an automated email from the ASF dual-hosted git repository. cshannon pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push: new 802b6e948d Update TabletsMetadata stream() to autoclose TabletsMetadata (#4355) 802b6e948d is described below commit 802b6e948d818fb5a32a3a0cc1db9757200cdf34 Author: Christopher L. Shannon <cshan...@apache.org> AuthorDate: Mon Mar 11 11:13:18 2024 -0400 Update TabletsMetadata stream() to autoclose TabletsMetadata (#4355) Before this change if stream() was used the the TabletsMetadata close method still had to be called manually as the close method on the stream did not delegate. With this change if the stream is used in a try-with-resources to autoClsoe the stream or if the stream is closed manually, TabletsMetadata will also be closed. --- .../core/metadata/schema/TabletsMetadata.java | 2 +- .../core/metadata/schema/TabletMetadataTest.java | 25 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java index 5f8ce56a94..6ce050c222 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java @@ -603,6 +603,6 @@ public class TabletsMetadata implements Iterable<TabletMetadata>, AutoCloseable } public Stream<TabletMetadata> stream() { - return StreamSupport.stream(tablets.spliterator(), false); + return StreamSupport.stream(tablets.spliterator(), false).onClose(this::close); } } diff --git a/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java b/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java index f30ff5bd4d..67a22ccd3f 100644 --- a/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java +++ b/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java @@ -33,12 +33,16 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.lang.reflect.Constructor; import java.util.EnumSet; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Stream; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; @@ -255,6 +259,27 @@ public class TabletMetadataTest { assertFalse(tm.hasCurrent()); } + @Test + public void testTabletsMetadataAutoClose() throws Exception { + AtomicBoolean closeCalled = new AtomicBoolean(); + AutoCloseable autoCloseable = () -> closeCalled.set(true); + Constructor<TabletsMetadata> tmConstructor = + TabletsMetadata.class.getDeclaredConstructor(AutoCloseable.class, Iterable.class); + tmConstructor.setAccessible(true); + + try (TabletsMetadata ignored = tmConstructor.newInstance(autoCloseable, List.of())) { + // test autoCloseable used directly on TabletsMetadata + } + assertTrue(closeCalled.get()); + + closeCalled.set(false); + try (Stream<TabletMetadata> ignored = + tmConstructor.newInstance(autoCloseable, List.of()).stream()) { + // test stream delegates to close on TabletsMetadata + } + assertTrue(closeCalled.get()); + } + private SortedMap<Key,Value> toRowMap(Mutation mutation) { SortedMap<Key,Value> rowMap = new TreeMap<>(); mutation.getUpdates().forEach(cu -> {