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

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


The following commit(s) were added to refs/heads/master by this push:
     new 16b3e4d3f53 Isolate ingestion offset test trackers and ensure cleanup
16b3e4d3f53 is described below

commit 16b3e4d3f53f5ad6c06e7269eb97576163d59c94
Author: Xiang Fu <[email protected]>
AuthorDate: Sun Oct 11 18:22:52 2026 -0700

    Isolate ingestion offset test trackers and ensure cleanup
    
    Give the two-stream offset test its own table manager mock and always shut 
down both trackers. Use static assertion imports throughout the class.
    Reproduce: repeat IngestionDelayTrackerTest; shared mock stubbing can race 
live tracker tasks and fail offset assertions.
    Validation: all 9 focused tests passed with retries disabled, plus scoped 
style and license checks.
---
 .../realtime/IngestionDelayTrackerTest.java        | 200 +++++++++++----------
 1 file changed, 107 insertions(+), 93 deletions(-)

diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/data/manager/realtime/IngestionDelayTrackerTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/data/manager/realtime/IngestionDelayTrackerTest.java
index 80d5444e3ed..543a6c5b8ba 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/data/manager/realtime/IngestionDelayTrackerTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/data/manager/realtime/IngestionDelayTrackerTest.java
@@ -47,11 +47,14 @@ import org.apache.pinot.spi.utils.IngestionConfigUtils;
 import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
 import org.apache.pinot.spi.utils.builder.TableNameBuilder;
 import org.apache.pinot.util.TestUtils;
-import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 
 public class IngestionDelayTrackerTest {
@@ -164,27 +167,27 @@ public class IngestionDelayTrackerTest {
     ingestionDelayTracker.setClock(clock);
 
     // Untracked partitions should return null (metric not emitted)
-    Assert.assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
-    
Assert.assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
-    Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(0),
 0);
+    assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
+    assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
+    assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(0), 0);
     ingestionDelayTracker.shutdown();
     // Test constructor with timer arguments
     ingestionDelayTracker =
         new MockIngestionDelayTracker(_serverMetrics, REALTIME_TABLE_NAME, 
REALTIME_TABLE_DATA_MANAGER,
             METRICS_CLEANUP_TICK_INTERVAL_MS, 
METRICS_TRACKING_TICK_INTERVAL_MS, () -> true);
     // Untracked partitions should return null (metric not emitted)
-    Assert.assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
-    
Assert.assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
-    Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(0),
 0);
+    assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
+    assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
+    assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(0), 0);
     // Test bad timer args to the constructor
     try {
       new IngestionDelayTracker(_serverMetrics, REALTIME_TABLE_NAME, 
REALTIME_TABLE_DATA_MANAGER, 0, 0, () -> true);
-      Assert.fail("Must have asserted due to invalid arguments"); // 
Constructor must assert
+      fail("Must have asserted due to invalid arguments"); // Constructor must 
assert
     } catch (Exception e) {
       if ((e instanceof NullPointerException) || !(e instanceof 
RuntimeException)) {
-        Assert.fail(String.format("Unexpected exception: %s:%s", e.getClass(), 
e.getMessage()));
+        fail(String.format("Unexpected exception: %s:%s", e.getClass(), 
e.getMessage()));
       }
     }
   }
@@ -205,29 +208,29 @@ public class IngestionDelayTrackerTest {
     ingestionDelayTracker.setClock(clock);
 
     // Before any updates, hasData should be 0
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition0),
 0);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition0),
 0);
 
     // Test we follow a single partition up and down
     for (long ingestionTimeMs = 0; ingestionTimeMs <= maxTestDelay; 
ingestionTimeMs++) {
       long firstStreamIngestionTimeMs = ingestionTimeMs + 1;
       ingestionDelayTracker.updateMetrics(segment0, partition0, 
ingestionTimeMs, firstStreamIngestionTimeMs, null);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
           clock.millis() - ingestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
+      
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
           clock.millis() - firstStreamIngestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0),
 ingestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition0),
 1);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0), 
ingestionTimeMs);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition0),
 1);
     }
 
     // Test tracking down a measure for a given partition
     for (long ingestionTimeMs = maxTestDelay; ingestionTimeMs >= 0; 
ingestionTimeMs--) {
       long firstStreamIngestionTimeMs = ingestionTimeMs + 1;
       ingestionDelayTracker.updateMetrics(segment0, partition0, 
ingestionTimeMs, firstStreamIngestionTimeMs, null);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
           clock.millis() - ingestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
+      
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
           clock.millis() - (ingestionTimeMs + 1));
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0),
 ingestionTimeMs);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0), 
ingestionTimeMs);
     }
 
     // Make the current partition maximum
@@ -237,26 +240,26 @@ public class IngestionDelayTrackerTest {
     for (long ingestionTimeMs = 0; ingestionTimeMs <= 2 * maxTestDelay; 
ingestionTimeMs++) {
       long firstStreamIngestionTimeMs = ingestionTimeMs + 1;
       ingestionDelayTracker.updateMetrics(segment1, partition1, 
ingestionTimeMs, firstStreamIngestionTimeMs, null);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
           clock.millis() - ingestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition1),
+      
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition1),
           clock.millis() - firstStreamIngestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition1),
 ingestionTimeMs);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition1), 
ingestionTimeMs);
     }
 
     // Bring down values of partition1 and verify values
     for (long ingestionTimeMs = 2 * maxTestDelay; ingestionTimeMs >= 0; 
ingestionTimeMs--) {
       long firstStreamIngestionTimeMs = ingestionTimeMs + 1;
       ingestionDelayTracker.updateMetrics(segment1, partition1, 
ingestionTimeMs, firstStreamIngestionTimeMs, null);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
           clock.millis() - ingestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition1),
+      
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition1),
           clock.millis() - firstStreamIngestionTimeMs);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition1),
 ingestionTimeMs);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition1), 
ingestionTimeMs);
     }
 
     ingestionDelayTracker.shutdown();
-    Assert.assertTrue(true);
+    assertTrue(true);
   }
 
   @Test
@@ -281,41 +284,41 @@ public class IngestionDelayTrackerTest {
     ingestionDelayTracker.setClock(clock);
     long ingestionTimeMs = clock.millis() - partition0Delay0;
     ingestionDelayTracker.updateMetrics(segment0, partition0, ingestionTimeMs, 
ingestionTimeMs, null);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
 partition0Delay0);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
 partition0Delay0);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0),
 ingestionTimeMs);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0), 
partition0Delay0);
+    
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
 partition0Delay0);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0), 
ingestionTimeMs);
 
     // Advance clock and test aging
     Clock offsetClock = Clock.offset(clock, 
Duration.ofMillis(partition0Offset0Ms));
     ingestionDelayTracker.setClock(offsetClock);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
         (partition0Delay0 + partition0Offset0Ms));
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
+    
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
         (partition0Delay0 + partition0Offset0Ms));
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0),
 ingestionTimeMs);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0), 
ingestionTimeMs);
 
     ingestionTimeMs = offsetClock.millis() - partition0Delay1;
     ingestionDelayTracker.updateMetrics(segment0, partition0, ingestionTimeMs, 
ingestionTimeMs, null);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
 partition0Delay1);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
 partition0Delay1);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0),
 ingestionTimeMs);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0), 
partition0Delay1);
+    
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition0),
 partition0Delay1);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition0), 
ingestionTimeMs);
 
     // Add some offset to the last sample and make sure we age that measure 
properly
     offsetClock = Clock.offset(offsetClock, 
Duration.ofMillis(partition0Offset1Ms));
     ingestionDelayTracker.setClock(offsetClock);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition0),
         (partition0Delay1 + partition0Offset1Ms));
 
     ingestionTimeMs = offsetClock.millis() - partition1Delay0;
     ingestionDelayTracker.updateMetrics(segment1, partition1, ingestionTimeMs, 
ingestionTimeMs, null);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
 partition1Delay0);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition1),
 partition1Delay0);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition1),
 ingestionTimeMs);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1), 
partition1Delay0);
+    
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partition1),
 partition1Delay0);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partition1), 
ingestionTimeMs);
 
     // Add some offset to the last sample and make sure we age that measure 
properly
     offsetClock = Clock.offset(offsetClock, 
Duration.ofMillis(partition1Offset0Ms));
     ingestionDelayTracker.setClock(offsetClock);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partition1),
         (partition1Delay0 + partition1Offset0Ms));
 
     ingestionDelayTracker.shutdown();
@@ -338,19 +341,19 @@ public class IngestionDelayTrackerTest {
       String segmentName = new LLCSegmentName(RAW_TABLE_NAME, partitionId, 0, 
123).getSegmentName();
       long ingestionTimeMs = clock.millis() - partitionId;
       ingestionDelayTracker.updateMetrics(segmentName, partitionId, 
ingestionTimeMs, ingestionTimeMs, null);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partitionId),
 partitionId);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partitionId),
 partitionId);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partitionId),
 ingestionTimeMs);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partitionId), 
partitionId);
+      
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partitionId),
 partitionId);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partitionId), 
ingestionTimeMs);
     }
     for (int partitionId = maxPartition; partitionId >= 0; partitionId--) {
       ingestionDelayTracker.stopTrackingPartition(partitionId);
     }
     for (int partitionId = 0; partitionId <= maxTestDelay; partitionId++) {
       // Untracked partitions must return null (metric not emitted)
-      
Assert.assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(partitionId));
-      
Assert.assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partitionId));
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partitionId),
 Long.MIN_VALUE);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partitionId),
 0);
+      
assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(partitionId));
+      
assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partitionId));
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(partitionId), 
Long.MIN_VALUE);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partitionId),
 0);
     }
   }
 
@@ -366,20 +369,20 @@ public class IngestionDelayTrackerTest {
     String segmentName = new LLCSegmentName(RAW_TABLE_NAME, 0, 0, 
123).getSegmentName();
     long ingestionTimeMs = clock.millis() - 10;
     ingestionDelayTracker.updateMetrics(segmentName, 0, ingestionTimeMs, 
ingestionTimeMs, null);
-    Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(0), 
10);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0),
 10);
-    Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
ingestionTimeMs);
+    assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(0), 10);
+    
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0), 10);
+    assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
ingestionTimeMs);
 
     ingestionDelayTracker.stopTrackingPartition(segmentName);
-    Assert.assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
-    
Assert.assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
-    Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
+    assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
+    assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
+    assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
 
     // Should not update metrics for removed segment
     ingestionDelayTracker.updateMetrics(segmentName, 0, ingestionTimeMs, 
ingestionTimeMs, null);
-    Assert.assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
-    
Assert.assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
-    Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
+    assertNull(ingestionDelayTracker.getPartitionIngestionDelayMs(0));
+    assertNull(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(0));
+    assertEquals(ingestionDelayTracker.getPartitionIngestionTimeMs(0), 
Long.MIN_VALUE);
   }
 
   @Test
@@ -398,8 +401,8 @@ public class IngestionDelayTrackerTest {
       String segmentName = new LLCSegmentName(RAW_TABLE_NAME, partitionId, 0, 
123).getSegmentName();
       long ingestionTimeMs = clock.millis() - partitionId;
       ingestionDelayTracker.updateMetrics(segmentName, partitionId, 
ingestionTimeMs, ingestionTimeMs, null);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partitionId),
 partitionId);
-      
Assert.assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partitionId),
 partitionId);
+      
assertEquals(ingestionDelayTracker.getPartitionIngestionDelayMs(partitionId), 
partitionId);
+      
assertEquals(ingestionDelayTracker.getPartitionEndToEndIngestionDelayMs(partitionId),
 partitionId);
     }
     ingestionDelayTracker.shutdown();
 
@@ -424,30 +427,30 @@ public class IngestionDelayTrackerTest {
     StreamPartitionMsgOffset latestOffset0 = new LongMsgOffset(150);
     partitionMsgOffsetMap.put(partition0, latestOffset0);
     ingestionDelayTracker.updateMetrics(segment0, partition0, Long.MIN_VALUE, 
Long.MIN_VALUE, msgOffset0);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionOffsetLag(partition0),
 100);
-    
Assert.assertEquals(ingestionDelayTracker.getLatestPartitionOffset(partition0), 
150);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionConsumingOffset(partition0),
 50);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionOffsetLag(partition0), 
100);
+    assertEquals(ingestionDelayTracker.getLatestPartitionOffset(partition0), 
150);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionConsumingOffset(partition0),
 50);
     // Consumer reported status (ingestionInfo != null), so hasData should be 
1 even with invalid timestamps
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition0),
 1);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition0),
 1);
 
     // Test tracking offset lag for another partition
     StreamPartitionMsgOffset msgOffset1 = new LongMsgOffset(50);
     StreamPartitionMsgOffset latestOffset1 = new LongMsgOffset(150);
     partitionMsgOffsetMap.put(partition1, latestOffset1);
     ingestionDelayTracker.updateMetrics(segment1, partition1, Long.MIN_VALUE, 
Long.MIN_VALUE, msgOffset1);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionOffsetLag(partition1),
 100);
-    
Assert.assertEquals(ingestionDelayTracker.getLatestPartitionOffset(partition1), 
150);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionConsumingOffset(partition1),
 50);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition1),
 1);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionOffsetLag(partition1), 
100);
+    assertEquals(ingestionDelayTracker.getLatestPartitionOffset(partition1), 
150);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionConsumingOffset(partition1),
 50);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionReportingStatus(partition1),
 1);
 
     // Update offset lag for partition0
     msgOffset0 = new LongMsgOffset(150);
     latestOffset0 = new LongMsgOffset(200);
     partitionMsgOffsetMap.put(partition0, latestOffset0);
     ingestionDelayTracker.updateMetrics(segment0, partition0, Long.MIN_VALUE, 
Long.MIN_VALUE, msgOffset0);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionOffsetLag(partition0),
 50);
-    
Assert.assertEquals(ingestionDelayTracker.getLatestPartitionOffset(partition0), 
200);
-    
Assert.assertEquals(ingestionDelayTracker.getPartitionIngestionConsumingOffset(partition0),
 150);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionOffsetLag(partition0), 
50);
+    assertEquals(ingestionDelayTracker.getLatestPartitionOffset(partition0), 
200);
+    
assertEquals(ingestionDelayTracker.getPartitionIngestionConsumingOffset(partition0),
 150);
 
     ingestionDelayTracker.shutdown();
   }
@@ -459,12 +462,16 @@ public class IngestionDelayTrackerTest {
     partitionsHosted.add(0);
     partitionsHosted.add(1);
 
-    ingestionDelayTracker.updateLatestStreamOffset(partitionsHosted);
-    
Assert.assertEquals(ingestionDelayTracker._partitionIdToLatestOffset.size(), 2);
-    Assert.assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(0))).getOffset(),
-        Integer.MAX_VALUE);
-    Assert.assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(1))).getOffset(),
-        Integer.MAX_VALUE);
+    try {
+      ingestionDelayTracker.updateLatestStreamOffset(partitionsHosted);
+      assertEquals(ingestionDelayTracker._partitionIdToLatestOffset.size(), 2);
+      assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(0))).getOffset(),
+          Integer.MAX_VALUE);
+      assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(1))).getOffset(),
+          Integer.MAX_VALUE);
+    } finally {
+      ingestionDelayTracker.shutdown();
+    }
 
     IngestionConfig ingestionConfig = new IngestionConfig();
     List<Map<String, String>> streamConfigMaps = new ArrayList<>();
@@ -478,17 +485,24 @@ public class IngestionDelayTrackerTest {
         .setIngestionConfig(ingestionConfig)
         .setStreamConfigs(getStreamConfigs())
         .build();
-    
when(REALTIME_TABLE_DATA_MANAGER.getCachedTableConfigAndSchema()).thenReturn(Pair.of(tableConfig,
 null));
-    ingestionDelayTracker = createTracker();
-    
partitionsHosted.add(IngestionConfigUtils.getPinotPartitionIdFromStreamPartitionId(0,
 1));
-    ingestionDelayTracker.updateLatestStreamOffset(partitionsHosted);
-    
Assert.assertEquals(ingestionDelayTracker._partitionIdToLatestOffset.size(), 3);
-    Assert.assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(0))).getOffset(),
-        Integer.MAX_VALUE);
-    Assert.assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(1))).getOffset(),
-        Integer.MAX_VALUE);
-    Assert.assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(
-        IngestionConfigUtils.getPinotPartitionIdFromStreamPartitionId(0, 
1)))).getOffset(), Integer.MAX_VALUE);
+    // Configure a separate mock before starting the tracker, so scheduled 
tasks never race with restubbing.
+    RealtimeTableDataManager realtimeTableDataManager = 
mock(RealtimeTableDataManager.class);
+    
when(realtimeTableDataManager.getCachedTableConfigAndSchema()).thenReturn(Pair.of(tableConfig,
 null));
+    ingestionDelayTracker =
+        new MockIngestionDelayTracker(_serverMetrics, REALTIME_TABLE_NAME, 
realtimeTableDataManager);
+    try {
+      
partitionsHosted.add(IngestionConfigUtils.getPinotPartitionIdFromStreamPartitionId(0,
 1));
+      ingestionDelayTracker.updateLatestStreamOffset(partitionsHosted);
+      assertEquals(ingestionDelayTracker._partitionIdToLatestOffset.size(), 3);
+      assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(0))).getOffset(),
+          Integer.MAX_VALUE);
+      assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(1))).getOffset(),
+          Integer.MAX_VALUE);
+      assertEquals(((LongMsgOffset) 
(ingestionDelayTracker._partitionIdToLatestOffset.get(
+          IngestionConfigUtils.getPinotPartitionIdFromStreamPartitionId(0, 
1)))).getOffset(), Integer.MAX_VALUE);
+    } finally {
+      ingestionDelayTracker.shutdown();
+    }
   }
 
   @Test
@@ -532,7 +546,7 @@ public class IngestionDelayTrackerTest {
   }
 
   private void verifyMetrics(Map<Integer, Map<String, List<Long>>> 
partitionToMetricToValues) {
-    Assert.assertEquals(partitionToMetricToValues.size(), 2);
+    assertEquals(partitionToMetricToValues.size(), 2);
     verifyPartition0(partitionToMetricToValues.get(0));
     verifyPartition1(partitionToMetricToValues.get(1));
   }
@@ -542,7 +556,7 @@ public class IngestionDelayTrackerTest {
     assertMinMax(metrics, 
ServerGauge.REALTIME_INGESTION_UPSTREAM_OFFSET.getGaugeName(), 200L, 350L);
     assertEqualsFirstAndLast(metrics, 
ServerGauge.REALTIME_INGESTION_CONSUMING_OFFSET.getGaugeName(), 50L);
     assertIncreasing(metrics, 
ServerGauge.REALTIME_INGESTION_DELAY_MS.getGaugeName());
-    
Assert.assertTrue(metrics.get(ServerGauge.REALTIME_INGESTION_DELAY_MS.getGaugeName()).get(0)
 > 0);
+    
assertTrue(metrics.get(ServerGauge.REALTIME_INGESTION_DELAY_MS.getGaugeName()).get(0)
 > 0);
     assertEqualsFirstAndLast(metrics, 
ServerGauge.REALTIME_INGESTION_DELAY_REPORTING_STATUS.getGaugeName(), 1L);
   }
 
@@ -558,18 +572,18 @@ public class IngestionDelayTrackerTest {
 
   private void assertMinMax(Map<String, List<Long>> metrics, String key, long 
minFirst, long minLast) {
     List<Long> values = metrics.get(key);
-    Assert.assertTrue(values.get(0) >= minFirst, key + " first value too 
small");
-    Assert.assertTrue(values.get(values.size() - 1) >= minLast, key + " last 
value too small");
+    assertTrue(values.get(0) >= minFirst, key + " first value too small");
+    assertTrue(values.get(values.size() - 1) >= minLast, key + " last value 
too small");
   }
 
   private void assertEqualsFirstAndLast(Map<String, List<Long>> metrics, 
String key, long expected) {
     List<Long> values = metrics.get(key);
-    Assert.assertEquals(values.get(0), expected, key + " first value 
mismatch");
-    Assert.assertEquals(values.get(values.size() - 1), expected, key + " last 
value mismatch");
+    assertEquals(values.get(0), expected, key + " first value mismatch");
+    assertEquals(values.get(values.size() - 1), expected, key + " last value 
mismatch");
   }
 
   private void assertIncreasing(Map<String, List<Long>> metrics, String key) {
     List<Long> values = metrics.get(key);
-    Assert.assertTrue(values.get(values.size() - 1) > values.get(0), key + " 
not increasing");
+    assertTrue(values.get(values.size() - 1) > values.get(0), key + " not 
increasing");
   }
 }


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

Reply via email to