This is an automated email from the ASF dual-hosted git repository.

weichiu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 1bd721b2fd HDDS-12081. TestKeyInputStream repeats tests with default 
container layout (#7704)
1bd721b2fd is described below

commit 1bd721b2fdf1811246cf460d1cd21f533b206219
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Jan 24 22:01:17 2025 +0100

    HDDS-12081. TestKeyInputStream repeats tests with default container layout 
(#7704)
---
 .../keyvalue/ContainerLayoutTestInfo.java          |  2 +-
 .../client/rpc/read/TestChunkInputStream.java      | 18 ++---
 .../ozone/client/rpc/read/TestInputStreamBase.java | 48 ++++++++++--
 .../ozone/client/rpc/read/TestKeyInputStream.java  | 86 ++++++++--------------
 .../commandhandler/TestFinalizeBlock.java          | 28 ++-----
 5 files changed, 88 insertions(+), 94 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
index ab6e2c857c..8349005b87 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
@@ -122,7 +122,7 @@ private static void assertFileCount(File dir, long count) {
   }
 
   /**
-   * Composite annotation for tests parameterized with {@link  
ContainerLayoutTestInfo}.
+   * Composite annotation for tests parameterized with {@link 
ContainerLayoutVersion}.
    */
   @Target(ElementType.METHOD)
   @Retention(RetentionPolicy.RUNTIME)
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestChunkInputStream.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestChunkInputStream.java
index c5301ba419..7a6873dfd0 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestChunkInputStream.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestChunkInputStream.java
@@ -22,12 +22,13 @@
 
 import org.apache.hadoop.hdds.scm.storage.BlockInputStream;
 import org.apache.hadoop.hdds.scm.storage.ChunkInputStream;
-import org.apache.hadoop.ozone.MiniOzoneCluster;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.client.io.KeyInputStream;
 import org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion;
 import org.apache.hadoop.ozone.container.keyvalue.ContainerLayoutTestInfo;
 import org.apache.hadoop.ozone.om.TestBucket;
+import org.junit.jupiter.api.TestInstance;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -36,6 +37,7 @@
 /**
  * Tests {@link ChunkInputStream}.
  */
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 class TestChunkInputStream extends TestInputStreamBase {
 
   /**
@@ -44,16 +46,14 @@ class TestChunkInputStream extends TestInputStreamBase {
    */
   @ContainerLayoutTestInfo.ContainerTest
   void testAll(ContainerLayoutVersion layout) throws Exception {
-    try (MiniOzoneCluster cluster = newCluster(layout)) {
-      cluster.waitForClusterToBeReady();
+    try (OzoneClient client = getCluster().newClient()) {
+      updateConfig(layout);
 
-      try (OzoneClient client = cluster.newClient()) {
-        TestBucket bucket = TestBucket.newBuilder(client).build();
+      TestBucket bucket = TestBucket.newBuilder(client).build();
 
-        testChunkReadBuffers(bucket);
-        testBufferRelease(bucket);
-        testCloseReleasesBuffers(bucket);
-      }
+      testChunkReadBuffers(bucket);
+      testBufferRelease(bucket);
+      testCloseReleasesBuffers(bucket);
     }
   }
 
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestInputStreamBase.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestInputStreamBase.java
index 256148dfb8..4835d2c3ba 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestInputStreamBase.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestInputStreamBase.java
@@ -25,15 +25,22 @@
 import org.apache.hadoop.hdds.scm.OzoneClientConfig;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import 
org.apache.hadoop.hdds.scm.container.replication.ReplicationManager.ReplicationManagerConfiguration;
+import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
+import org.apache.hadoop.hdds.utils.IOUtils;
 import org.apache.hadoop.ozone.ClientConfigForTesting;
 import org.apache.hadoop.ozone.MiniOzoneCluster;
 import org.apache.hadoop.ozone.OzoneConfigKeys;
+import org.apache.hadoop.ozone.container.TestHelper;
 import org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.TestInstance;
 
+import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CONTAINER_LAYOUT_KEY;
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_DEADNODE_INTERVAL;
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_STALENODE_INTERVAL;
 
-// TODO remove this class, set config as default in integration tests
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 abstract class TestInputStreamBase {
 
   static final int CHUNK_SIZE = 1024 * 1024;          // 1MB
@@ -42,8 +49,7 @@ abstract class TestInputStreamBase {
   static final int BLOCK_SIZE = 2 * MAX_FLUSH_SIZE;   // 8MB
   static final int BYTES_PER_CHECKSUM = 256 * 1024;   // 256KB
 
-  protected static MiniOzoneCluster newCluster(
-      ContainerLayoutVersion containerLayout) throws Exception {
+  protected static MiniOzoneCluster newCluster() throws Exception {
     OzoneConfiguration conf = new OzoneConfiguration();
 
     OzoneClientConfig config = conf.getObject(OzoneClientConfig.class);
@@ -57,8 +63,6 @@ protected static MiniOzoneCluster newCluster(
     conf.setQuietMode(false);
     conf.setStorageSize(OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE, 64,
         StorageUnit.MB);
-    conf.set(ScmConfigKeys.OZONE_SCM_CONTAINER_LAYOUT_KEY,
-        containerLayout.toString());
 
     ReplicationManagerConfiguration repConf =
         conf.getObject(ReplicationManagerConfiguration.class);
@@ -81,4 +85,38 @@ static String getNewKeyName() {
     return UUID.randomUUID().toString();
   }
 
+  protected void updateConfig(ContainerLayoutVersion layout) {
+    cluster.getHddsDatanodes().forEach(dn -> 
dn.getConf().setEnum(OZONE_SCM_CONTAINER_LAYOUT_KEY, layout));
+    closeContainers();
+  }
+
+  private MiniOzoneCluster cluster;
+
+  protected MiniOzoneCluster getCluster() {
+    return cluster;
+  }
+
+  @BeforeAll
+  void setup() throws Exception {
+    cluster = newCluster();
+    cluster.waitForClusterToBeReady();
+  }
+
+  @AfterAll
+  void cleanup() {
+    IOUtils.closeQuietly(cluster);
+  }
+
+  private void closeContainers() {
+    StorageContainerManager scm = cluster.getStorageContainerManager();
+    scm.getContainerManager().getContainers().forEach(container -> {
+      if (container.isOpen()) {
+        try {
+          TestHelper.waitForContainerClose(getCluster(), 
container.getContainerID());
+        } catch (Exception e) {
+          throw new RuntimeException(e);
+        }
+      }
+    });
+  }
 }
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestKeyInputStream.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestKeyInputStream.java
index 3ab8ae3118..d9c310d8f5 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestKeyInputStream.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/read/TestKeyInputStream.java
@@ -34,7 +34,6 @@
 import org.apache.hadoop.hdds.scm.storage.BlockExtendedInputStream;
 import org.apache.hadoop.hdds.scm.storage.BlockInputStream;
 import org.apache.hadoop.hdds.scm.storage.ChunkInputStream;
-import org.apache.hadoop.ozone.MiniOzoneCluster;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.client.io.KeyInputStream;
 import org.apache.hadoop.ozone.common.utils.BufferUtils;
@@ -46,15 +45,16 @@
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
 import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestMethodOrder;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.apache.hadoop.hdds.client.ECReplicationConfig.EcCodec.RS;
 import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor.THREE;
 import static org.apache.hadoop.ozone.container.TestHelper.countReplicas;
-import static 
org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion.FILE_PER_BLOCK;
-import static 
org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion.FILE_PER_CHUNK;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -63,6 +63,8 @@
 /**
  * Tests {@link KeyInputStream}.
  */
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 class TestKeyInputStream extends TestInputStreamBase {
 
   /**
@@ -123,20 +125,18 @@ private void validate(TestBucket bucket, KeyInputStream 
keyInputStream,
    */
   @ContainerLayoutTestInfo.ContainerTest
   void testNonReplicationReads(ContainerLayoutVersion layout) throws Exception 
{
-    try (MiniOzoneCluster cluster = newCluster(layout)) {
-      cluster.waitForClusterToBeReady();
-
-      try (OzoneClient client = cluster.newClient()) {
-        TestBucket bucket = TestBucket.newBuilder(client).build();
-
-        testInputStreams(bucket);
-        testSeekRandomly(bucket);
-        testSeek(bucket);
-        testReadChunkWithByteArray(bucket);
-        testReadChunkWithByteBuffer(bucket);
-        testSkip(bucket);
-        testECSeek(bucket);
-      }
+    try (OzoneClient client = getCluster().newClient()) {
+      updateConfig(layout);
+
+      TestBucket bucket = TestBucket.newBuilder(client).build();
+
+      testInputStreams(bucket);
+      testSeekRandomly(bucket);
+      testSeek(bucket);
+      testReadChunkWithByteArray(bucket);
+      testReadChunkWithByteBuffer(bucket);
+      testSkip(bucket);
+      testECSeek(bucket);
     }
   }
 
@@ -379,32 +379,18 @@ private void testSkip(TestBucket bucket) throws Exception 
{
     }
   }
 
-  private static List<Arguments> readAfterReplicationArgs() {
-    return Arrays.asList(
-        Arguments.arguments(FILE_PER_BLOCK, false),
-        Arguments.arguments(FILE_PER_BLOCK, true),
-        Arguments.arguments(FILE_PER_CHUNK, false),
-        Arguments.arguments(FILE_PER_CHUNK, true)
-    );
-  }
-
   @ParameterizedTest
-  @MethodSource("readAfterReplicationArgs")
-  void readAfterReplication(ContainerLayoutVersion layout,
-      boolean doUnbuffer) throws Exception {
-    try (MiniOzoneCluster cluster = newCluster(layout)) {
-      cluster.waitForClusterToBeReady();
-
-      try (OzoneClient client = cluster.newClient()) {
-        TestBucket bucket = TestBucket.newBuilder(client).build();
+  @ValueSource(booleans = {false, true})
+  @Order(Integer.MAX_VALUE) // shuts down datanodes
+  void readAfterReplication(boolean doUnbuffer) throws Exception {
+    try (OzoneClient client = getCluster().newClient()) {
+      TestBucket bucket = TestBucket.newBuilder(client).build();
 
-        testReadAfterReplication(cluster, bucket, doUnbuffer);
-      }
+      testReadAfterReplication(bucket, doUnbuffer);
     }
   }
 
-  private void testReadAfterReplication(MiniOzoneCluster cluster,
-      TestBucket bucket, boolean doUnbuffer) throws Exception {
+  private void testReadAfterReplication(TestBucket bucket, boolean doUnbuffer) 
throws Exception {
     int dataLength = 2 * CHUNK_SIZE;
     String keyName = getNewKeyName();
     byte[] data = bucket.writeRandomBytes(keyName, dataLength);
@@ -415,7 +401,7 @@ private void testReadAfterReplication(MiniOzoneCluster 
cluster,
         .setKeyName(keyName)
         .setReplicationConfig(RatisReplicationConfig.getInstance(THREE))
         .build();
-    OmKeyInfo keyInfo = cluster.getOzoneManager()
+    OmKeyInfo keyInfo = getCluster().getOzoneManager()
         .getKeyInfo(keyArgs, false)
         .getKeyInfo();
 
@@ -425,24 +411,12 @@ private void testReadAfterReplication(MiniOzoneCluster 
cluster,
     assertEquals(1, locationInfoList.size());
     OmKeyLocationInfo loc = locationInfoList.get(0);
     long containerID = loc.getContainerID();
-    assertEquals(3, countReplicas(containerID, cluster));
+    assertEquals(3, countReplicas(containerID, getCluster()));
 
-    TestHelper.waitForContainerClose(cluster, containerID);
+    TestHelper.waitForContainerClose(getCluster(), containerID);
 
     List<DatanodeDetails> pipelineNodes = loc.getPipeline().getNodes();
 
-    // read chunk data
-    try (KeyInputStream keyInputStream = bucket.getKeyInputStream(keyName)) {
-      int b = keyInputStream.read();
-      assertNotEquals(-1, b);
-      if (doUnbuffer) {
-        keyInputStream.unbuffer();
-      }
-      cluster.shutdownHddsDatanode(pipelineNodes.get(0));
-      // check that we can still read it
-      assertReadFully(data, keyInputStream, dataLength - 1, 1);
-    }
-
     // read chunk data with ByteBuffer
     try (KeyInputStream keyInputStream = bucket.getKeyInputStream(keyName)) {
       int b = keyInputStream.read();
@@ -450,7 +424,7 @@ private void testReadAfterReplication(MiniOzoneCluster 
cluster,
       if (doUnbuffer) {
         keyInputStream.unbuffer();
       }
-      cluster.shutdownHddsDatanode(pipelineNodes.get(0));
+      getCluster().shutdownHddsDatanode(pipelineNodes.get(0));
       // check that we can still read it
       assertReadFullyUsingByteBuffer(data, keyInputStream, dataLength - 1, 1);
     }
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestFinalizeBlock.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestFinalizeBlock.java
index ca3733588a..8c3f0fd025 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestFinalizeBlock.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestFinalizeBlock.java
@@ -26,7 +26,6 @@
 import org.apache.hadoop.hdds.conf.StorageUnit;
 import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos;
 import org.apache.hadoop.hdds.scm.ScmConfig;
-import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import org.apache.hadoop.hdds.scm.XceiverClientManager;
 import org.apache.hadoop.hdds.scm.XceiverClientSpi;
 import org.apache.hadoop.hdds.scm.container.ContainerID;
@@ -41,7 +40,6 @@
 import org.apache.hadoop.ozone.client.OzoneClientFactory;
 import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
 import org.apache.hadoop.ozone.container.ContainerTestHelper;
-import org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion;
 import org.apache.hadoop.ozone.container.common.interfaces.Container;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeConfiguration;
 import org.apache.hadoop.ozone.container.keyvalue.KeyValueContainerData;
@@ -51,8 +49,7 @@
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import java.io.IOException;
 import java.time.Duration;
@@ -61,7 +58,6 @@
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import java.util.stream.Stream;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.concurrent.TimeUnit.SECONDS;
@@ -74,12 +70,9 @@
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CONTAINER_SIZE;
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_HEARTBEAT_PROCESS_INTERVAL;
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_STALENODE_INTERVAL;
-import static 
org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion.FILE_PER_BLOCK;
-import static 
org.apache.hadoop.ozone.container.common.impl.ContainerLayoutVersion.FILE_PER_CHUNK;
 import static 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeConfiguration.CONTAINER_SCHEMA_V3_ENABLED;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
-import static org.junit.jupiter.params.provider.Arguments.arguments;
 
 /**
  * Tests FinalizeBlock.
@@ -94,16 +87,7 @@ public class TestFinalizeBlock {
   private static String volumeName = UUID.randomUUID().toString();
   private static String bucketName = UUID.randomUUID().toString();
 
-  public static Stream<Arguments> dnLayoutParams() {
-    return Stream.of(
-        arguments(false, FILE_PER_CHUNK),
-        arguments(true, FILE_PER_CHUNK),
-        arguments(false, FILE_PER_BLOCK),
-        arguments(true, FILE_PER_BLOCK)
-    );
-  }
-
-  private void setup(boolean enableSchemaV3, ContainerLayoutVersion version) 
throws Exception {
+  private void setup(boolean enableSchemaV3) throws Exception {
     conf = new OzoneConfiguration();
     conf.set(OZONE_SCM_CONTAINER_SIZE, "1GB");
     conf.setStorageSize(OZONE_DATANODE_RATIS_VOLUME_FREE_SPACE_MIN,
@@ -116,7 +100,6 @@ private void setup(boolean enableSchemaV3, 
ContainerLayoutVersion version) throw
     conf.setTimeDuration(HDDS_NODE_REPORT_INTERVAL, 1, SECONDS);
     conf.setTimeDuration(OZONE_SCM_STALENODE_INTERVAL, 3, TimeUnit.SECONDS);
     conf.setBoolean(CONTAINER_SCHEMA_V3_ENABLED, enableSchemaV3);
-    conf.setEnum(ScmConfigKeys.OZONE_SCM_CONTAINER_LAYOUT_KEY, version);
 
     DatanodeConfiguration datanodeConfiguration = conf.getObject(
         DatanodeConfiguration.class);
@@ -150,10 +133,9 @@ public void shutdown() {
   }
 
   @ParameterizedTest
-  @MethodSource("dnLayoutParams")
-  public void testFinalizeBlock(boolean enableSchemaV3, ContainerLayoutVersion 
version)
-      throws Exception {
-    setup(enableSchemaV3, version);
+  @ValueSource(booleans = {false, true})
+  public void testFinalizeBlock(boolean enableSchemaV3) throws Exception {
+    setup(enableSchemaV3);
     String keyName = UUID.randomUUID().toString();
     // create key
     createKey(keyName);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to