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 -> {

Reply via email to