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

smengcl 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 031e76aa2c9 HDDS-16933. Speed up TestKeyValueContainer, 
TestEventBufferOverflow, TestBlockInputStream and TestEventQueue (#11481)
031e76aa2c9 is described below

commit 031e76aa2c9a60b67185390b5b33499cbbb82e43
Author: Siyao Meng <[email protected]>
AuthorDate: Tue Oct 13 00:11:08 2026 -0700

    HDDS-16933. Speed up TestKeyValueContainer, TestEventBufferOverflow, 
TestBlockInputStream and TestEventQueue (#11481)
    
    Co-authored-by: Claude Opus 5.5 <[email protected]>
---
 .../hadoop/hdds/scm/storage/TestBlockInputStream.java  | 17 +++++++----------
 .../container/keyvalue/TestKeyValueContainer.java      |  4 +---
 .../hadoop/hdds/server/events/TestEventQueue.java      |  2 +-
 .../ozone/recon/tasks/TestEventBufferOverflow.java     | 18 +++++++++++-------
 4 files changed, 20 insertions(+), 21 deletions(-)

diff --git 
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockInputStream.java
 
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockInputStream.java
index 22416df3af4..506d26ac1d8 100644
--- 
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockInputStream.java
+++ 
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockInputStream.java
@@ -93,6 +93,7 @@ public class TestBlockInputStream {
   private Function<BlockID, BlockLocationInfo> refreshFunction;
 
   private OzoneConfiguration conf = new OzoneConfiguration();
+  private OzoneClientConfig clientConfig;
 
   @BeforeEach
   @SuppressWarnings("unchecked")
@@ -101,8 +102,9 @@ public void setup() throws Exception {
     BlockID blockID = new BlockID(new ContainerBlockID(1, 1));
     checksum = new Checksum(ChecksumType.NONE, CHUNK_SIZE);
     createChunkList(5);
-    OzoneClientConfig clientConfig = conf.getObject(OzoneClientConfig.class);
+    clientConfig = conf.getObject(OzoneClientConfig.class);
     clientConfig.setChecksumVerify(false);
+    clientConfig.setReadRetryInterval(0);
 
     Pipeline pipeline = MockPipeline.createSingleNodePipeline();
     blockStream = new DummyBlockInputStream(blockID, blockSize, pipeline, null,
@@ -275,14 +277,15 @@ public void testRefreshPipelineFunction() throws 
Exception {
     BlockID blockID = new BlockID(new ContainerBlockID(1, 1));
     AtomicBoolean isRefreshed = new AtomicBoolean();
     createChunkList(5);
-    OzoneClientConfig clientConfig = conf.getObject(OzoneClientConfig.class);
-    clientConfig.setChecksumVerify(false);
+    // default retry interval, the retry delay is logged only if it is positive
+    OzoneClientConfig retryDelayConfig = 
conf.getObject(OzoneClientConfig.class);
+    retryDelayConfig.setChecksumVerify(false);
 
     try (BlockInputStream blockInputStreamWithRetry =
              new DummyBlockInputStreamWithRetry(blockID, blockSize,
                  MockPipeline.createSingleNodePipeline(), null,
                  null, chunks, chunkDataMap, isRefreshed, null,
-                 clientConfig)) {
+                 retryDelayConfig)) {
       assertFalse(isRefreshed.get());
       seekAndVerify(50);
       byte[] b = new byte[200];
@@ -433,8 +436,6 @@ private static ChunkInputStream 
throwingChunkInputStream(IOException ex,
 
   private BlockInputStream createSubject(BlockID blockID, Pipeline pipeline,
       ChunkInputStream stream) throws IOException {
-    OzoneClientConfig clientConfig = conf.getObject(OzoneClientConfig.class);
-    clientConfig.setChecksumVerify(false);
     return new DummyBlockInputStream(blockID, blockSize, pipeline, null,
         null, refreshFunction, chunks, null, clientConfig) {
       @Override
@@ -493,8 +494,6 @@ public void 
testRefreshOnReadFailureAfterUnbuffer(IOException ex)
         .thenReturn(blockLocationInfo);
     when(blockLocationInfo.getPipeline()).thenReturn(newPipeline);
 
-    OzoneClientConfig clientConfig = conf.getObject(OzoneClientConfig.class);
-    clientConfig.setChecksumVerify(false);
     BlockInputStream subject = new BlockInputStream(
         new BlockLocationInfo(new 
BlockLocationInfo.Builder().setBlockID(blockID).setLength(blockSize)),
         pipeline, null, clientFactory, refreshFunction,
@@ -583,8 +582,6 @@ private BlockInputStream createLargeBlockStream() throws 
Exception {
     chunkDataMap.put(chunkName, blockData);
     chunks.add(chunkInfo);
 
-    OzoneClientConfig clientConfig = conf.getObject(OzoneClientConfig.class);
-    clientConfig.setChecksumVerify(false);
     Pipeline pipeline = MockPipeline.createSingleNodePipeline();
     return new DummyBlockInputStream(blockID, blockSize, pipeline, null,
         null, refreshFunction, chunks, chunkDataMap, clientConfig);
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java
index c0dff1dbeed..409fcfc92fb 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java
@@ -987,7 +987,7 @@ void testAutoCompactionSmallSstFile(
     long containerId = startContainerId;
 
     // Create containers on each volume and export all container on new volume
-    int count = 200;
+    int count = 10;
     long numberOfKeysToWrite = 500;
     KeyValueContainerData containerData;
     KeyValueContainer container;
@@ -1057,8 +1057,6 @@ void testAutoCompactionSmallSstFile(
       // After moving away from using Table.loadFromFile(), no SST files are 
generated unless the db is force flushed
       assertEquals(0, fileMetaDataList1.size());
       hddsVolume.compactDb();
-      // Sleep a while to wait for compaction to complete
-      Thread.sleep(7000);
       List<LiveFileMetaData> fileMetaDataList2 =
           ((RDBStore)(dnStore.getStore())).getDb().getLiveFilesMetaData();
       
assertThat(fileMetaDataList2).hasSizeLessThanOrEqualTo(fileMetaDataList1.size());
diff --git 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/events/TestEventQueue.java
 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/events/TestEventQueue.java
index 5cbd5fe0f37..474cdd89cb6 100644
--- 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/events/TestEventQueue.java
+++ 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/events/TestEventQueue.java
@@ -160,7 +160,7 @@ public class TestHandler implements EventHandler {
     @Override
     public void onMessage(Object payload, EventPublisher publisher) {
       try {
-        Thread.sleep(2000);
+        Thread.sleep(500);
       } catch (InterruptedException ex) {
         Thread.currentThread().interrupt();
       }
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestEventBufferOverflow.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestEventBufferOverflow.java
index 77fc6cdbb07..9d6fa9810ef 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestEventBufferOverflow.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestEventBufferOverflow.java
@@ -54,6 +54,7 @@
 import 
org.apache.hadoop.ozone.recon.tasks.updater.ReconTaskStatusUpdaterManager;
 import org.apache.ozone.recon.schema.generated.tables.daos.ReconTaskStatusDao;
 import org.apache.ozone.test.GenericTestUtils;
+import org.apache.ozone.test.MockClock;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -387,11 +388,12 @@ public void testCheckpointCreationFailureAndRetry() 
throws Exception {
     when(reconDbProvider.getDbStore()).thenReturn(mock(DBStore.class));
     
when(reconDbProvider.getStagedReconDBProvider()).thenReturn(reconDbProvider);
 
+    MockClock testClock = MockClock.newInstance();
     ReconTaskControllerImpl reconTaskController = new ReconTaskControllerImpl(
         config, new HashSet<>(), taskStatusUpdaterManager,
         reconDbProvider, mock(ReconContainerMetadataManager.class),
         mock(ReconNamespaceSummaryManager.class),
-        mock(ReconGlobalStatsManager.class), 
mock(ReconFileMetadataManager.class));
+        mock(ReconGlobalStatsManager.class), 
mock(ReconFileMetadataManager.class), testClock);
         
     // Set up a mock OM metadata manager
     ReconOMMetadataManager mockOMMetadataManager = 
mock(ReconOMMetadataManager.class);
@@ -409,7 +411,7 @@ reconDbProvider, mock(ReconContainerMetadataManager.class),
     // Attempts 1-6: should return RETRY_LATER
     for (int i = 1; i <= 6; i++) {
       if (i > 1) {
-        Thread.sleep(2100); // Wait for retry delay
+        testClock.fastForward(2100); // Wait for retry delay
       }
       result = controllerSpy.queueReInitializationEvent(
           
ReconTaskReInitializationEvent.ReInitializationReason.BUFFER_OVERFLOW);
@@ -418,7 +420,7 @@ reconDbProvider, mock(ReconContainerMetadataManager.class),
     }
     
     // Attempt 7: should return MAX_RETRIES_EXCEEDED
-    Thread.sleep(2100);
+    testClock.fastForward(2100);
     result = controllerSpy.queueReInitializationEvent(
         ReconTaskReInitializationEvent.ReInitializationReason.BUFFER_OVERFLOW);
     
assertEquals(ReconTaskController.ReInitializationResult.MAX_RETRIES_EXCEEDED, 
result,
@@ -449,11 +451,12 @@ public void testRetryMechanismWithFullSnapshotFallback() 
throws Exception {
     when(reconDbProvider.getDbStore()).thenReturn(mock(DBStore.class));
     
when(reconDbProvider.getStagedReconDBProvider()).thenReturn(reconDbProvider);
 
+    MockClock testClock = MockClock.newInstance();
     ReconTaskControllerImpl reconTaskController = new ReconTaskControllerImpl(
         config, new HashSet<>(), taskStatusUpdaterManager,
         reconDbProvider, mock(ReconContainerMetadataManager.class),
         mock(ReconNamespaceSummaryManager.class),
-        mock(ReconGlobalStatsManager.class), 
mock(ReconFileMetadataManager.class));
+        mock(ReconGlobalStatsManager.class), 
mock(ReconFileMetadataManager.class), testClock);
         
     ReconOMMetadataManager mockOMMetadataManager = 
mock(ReconOMMetadataManager.class);
     reconTaskController.updateOMMetadataManager(mockOMMetadataManager);
@@ -473,7 +476,7 @@ reconDbProvider, mock(ReconContainerMetadataManager.class),
     for (int attempt = 1; attempt <= maxReinitQueueFailures; attempt++) {
       if (attempt > 1) {
         // Wait for delay between iterations
-        Thread.sleep(2100);
+        testClock.fastForward(2100);
       }
       
       ReconTaskController.ReInitializationResult result = 
controllerSpy.queueReInitializationEvent(
@@ -519,11 +522,12 @@ public void testSuccessfulCheckpointAfterFailures() 
throws Exception {
     when(reconDbProvider.getDbStore()).thenReturn(mock(DBStore.class));
     
when(reconDbProvider.getStagedReconDBProvider()).thenReturn(reconDbProvider);
 
+    MockClock testClock = MockClock.newInstance();
     ReconTaskControllerImpl reconTaskController = new ReconTaskControllerImpl(
         config, new HashSet<>(), taskStatusUpdaterManager,
         reconDbProvider, mock(ReconContainerMetadataManager.class),
         mock(ReconNamespaceSummaryManager.class),
-        mock(ReconGlobalStatsManager.class), 
mock(ReconFileMetadataManager.class));
+        mock(ReconGlobalStatsManager.class), 
mock(ReconFileMetadataManager.class), testClock);
         
     // Set up properly mocked ReconOMMetadataManager with required dependencies
     ReconOMMetadataManager mockOMMetadataManager = 
mock(ReconOMMetadataManager.class);
@@ -558,7 +562,7 @@ reconDbProvider, mock(ReconContainerMetadataManager.class),
     }
     
     // Second attempt - should return RETRY_LATER (after delay)
-    Thread.sleep(2100);
+    testClock.fastForward(2100);
     ReconTaskController.ReInitializationResult result2 = 
controllerSpy.queueReInitializationEvent(
         ReconTaskReInitializationEvent.ReInitializationReason.BUFFER_OVERFLOW);
     if (result2 != ReconTaskController.ReInitializationResult.SUCCESS) {


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

Reply via email to