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

ankitsultana 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 c664074efe Add segmentCreationTimeMillis in validDocIdsMetadata 
(#15938)
c664074efe is described below

commit c664074efe917fffa646e06161e0c572a0daa382
Author: tarun11Mavani <35224468+tarun11mav...@users.noreply.github.com>
AuthorDate: Fri May 30 23:09:12 2025 +0530

    Add segmentCreationTimeMillis in validDocIdsMetadata (#15938)
---
 .../restlet/resources/ValidDocIdsMetadataInfo.java |  9 +++-
 .../UpsertCompactionTaskGeneratorTest.java         | 49 ++++++++++++----------
 .../pinot/server/api/resources/TablesResource.java |  1 +
 .../pinot/server/api/TablesResourceTest.java       |  2 +
 4 files changed, 39 insertions(+), 22 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/restlet/resources/ValidDocIdsMetadataInfo.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/restlet/resources/ValidDocIdsMetadataInfo.java
index 500cfff946..1038d45f55 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/restlet/resources/ValidDocIdsMetadataInfo.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/restlet/resources/ValidDocIdsMetadataInfo.java
@@ -31,12 +31,14 @@ public class ValidDocIdsMetadataInfo {
   private final String _segmentCrc;
   private final ValidDocIdsType _validDocIdsType;
   private final long _segmentSizeInBytes;
+  private final long _segmentCreationTimeMillis;
 
   public ValidDocIdsMetadataInfo(@JsonProperty("segmentName") String 
segmentName,
       @JsonProperty("totalValidDocs") long totalValidDocs, 
@JsonProperty("totalInvalidDocs") long totalInvalidDocs,
       @JsonProperty("totalDocs") long totalDocs, @JsonProperty("segmentCrc") 
String segmentCrc,
       @JsonProperty("validDocIdsType") ValidDocIdsType validDocIdsType,
-      @JsonProperty("segmentSizeInBytes") long segmentSizeInBytes) {
+      @JsonProperty("segmentSizeInBytes") long segmentSizeInBytes,
+      @JsonProperty("segmentCreationTimeMillis") long 
segmentCreationTimeMillis) {
     _segmentName = segmentName;
     _totalValidDocs = totalValidDocs;
     _totalInvalidDocs = totalInvalidDocs;
@@ -44,6 +46,7 @@ public class ValidDocIdsMetadataInfo {
     _segmentCrc = segmentCrc;
     _validDocIdsType = validDocIdsType;
     _segmentSizeInBytes = segmentSizeInBytes;
+    _segmentCreationTimeMillis = segmentCreationTimeMillis;
   }
 
   public String getSegmentName() {
@@ -73,4 +76,8 @@ public class ValidDocIdsMetadataInfo {
   public long getSegmentSizeInBytes() {
     return _segmentSizeInBytes;
   }
+
+  public long getSegmentCreationTimeMillis() {
+    return _segmentCreationTimeMillis;
+  }
 }
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskGeneratorTest.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskGeneratorTest.java
index 2cf90a8ff8..5436487e54 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskGeneratorTest.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskGeneratorTest.java
@@ -221,9 +221,11 @@ public class UpsertCompactionTaskGeneratorTest {
       throws IOException {
     Map<String, String> compactionConfigs = getCompactionConfigs("1", "10");
     String json = "{\"testTable__0\": [{\"totalValidDocs\": 50, 
\"totalInvalidDocs\": 50, "
-        + "\"segmentName\": \"testTable__0\", \"totalDocs\": 100, 
\"segmentCrc\": \"1000\"}], "
+        + "\"segmentName\": \"testTable__0\", \"totalDocs\": 100, 
\"segmentCrc\": \"1000\", "
+        + "\"segmentCreationTimeMillis\": 1234567890}], "
         + "\"testTable__1\": [{\"totalValidDocs\": 0, "
-        + "\"totalInvalidDocs\": 10, \"segmentName\": \"testTable__1\", 
\"totalDocs\": 10, \"segmentCrc\": \"2000\"}]}";
+        + "\"totalInvalidDocs\": 10, \"segmentName\": \"testTable__1\", 
\"totalDocs\": 10, \"segmentCrc\": \"2000\", "
+        + "\"segmentCreationTimeMillis\": 9876543210}]}";
 
     Map<String, List<ValidDocIdsMetadataInfo>> validDocIdsMetadataInfo =
         JsonUtils.stringToObject(json, new TypeReference<>() {
@@ -279,9 +281,10 @@ public class UpsertCompactionTaskGeneratorTest {
     // Test the case where the completedSegment from api has different crc 
than segment from zk metadata.
     json = "{\"" + _completedSegment.getSegmentName() + "\": 
[{\"totalValidDocs\": 50, \"totalInvalidDocs\": 50, "
         + "\"segmentName\": \"" + _completedSegment.getSegmentName() + "\", 
\"totalDocs\": 100, \"segmentCrc\": "
-        + "\"1234567890\"}], \"" + _completedSegment2.getSegmentName() + "\": 
[{\"totalValidDocs\": 0, "
-        + "\"totalInvalidDocs\": 10, \"segmentName\": \"" + 
_completedSegment2.getSegmentName() + "\", "
-        + "\"segmentCrc\": \"" + _completedSegment2.getCrc() + "\", 
\"totalDocs\": 10}]}";
+        + "\"1234567890\", \"segmentCreationTimeMillis\": 1111111111}], \"" + 
_completedSegment2.getSegmentName()
+        + "\": [{\"totalValidDocs\": 0, " + "\"totalInvalidDocs\": 10, 
\"segmentName\": \""
+        + _completedSegment2.getSegmentName() + "\", " + "\"segmentCrc\": \"" 
+ _completedSegment2.getCrc()
+        + "\", \"totalDocs\": 10, \"segmentCreationTimeMillis\": 
2222222222}]}";
     validDocIdsMetadataInfo = JsonUtils.stringToObject(json, new 
TypeReference<>() {
     });
     segmentSelectionResult =
@@ -293,16 +296,16 @@ public class UpsertCompactionTaskGeneratorTest {
 
     // completedSegment2 is still supposed to be deleted
     
Assert.assertEquals(segmentSelectionResult.getSegmentsForDeletion().size(), 1);
-    assertEquals(segmentSelectionResult.getSegmentsForDeletion().get(0),
-        _completedSegment2.getSegmentName());
+    assertEquals(segmentSelectionResult.getSegmentsForDeletion().get(0), 
_completedSegment2.getSegmentName());
 
     // check if both the candidates for compaction are coming in sorted 
descending order
     json = "{\"" + _completedSegment.getSegmentName() + "\": 
[{\"totalValidDocs\": 50, \"totalInvalidDocs\": 50, "
         + "\"segmentName\": \"" + _completedSegment.getSegmentName() + "\", 
\"totalDocs\": 100, \"segmentCrc\": \""
-        + _completedSegment.getCrc() + "\"}], \"" + 
_completedSegment2.getSegmentName() + "\": "
+        + _completedSegment.getCrc() + "\", \"segmentCreationTimeMillis\": 
1234567890}], \""
+        + _completedSegment2.getSegmentName() + "\": "
         + "[{\"totalValidDocs\": 10, \"totalInvalidDocs\": 40, 
\"segmentName\": \""
         + _completedSegment2.getSegmentName() + "\", \"segmentCrc\": \"" + 
_completedSegment2.getCrc() + "\", "
-        + "\"totalDocs\": 50}]}";
+        + "\"totalDocs\": 50, \"segmentCreationTimeMillis\": 9876543210}]}";
     validDocIdsMetadataInfo = JsonUtils.stringToObject(json, new 
TypeReference<>() {
     });
     compactionConfigs = getCompactionConfigs("30", "0");
@@ -315,6 +318,10 @@ public class UpsertCompactionTaskGeneratorTest {
         _completedSegment.getSegmentName());
     
assertEquals(segmentSelectionResult.getSegmentsForCompaction().get(1).getSegmentName(),
         _completedSegment2.getSegmentName());
+
+    // Check segmentCreationTimeMillis is deserialized correctly
+    
assertEquals(validDocIdsMetadataInfo.get("testTable__0").get(0).getSegmentCreationTimeMillis(),
 1234567890L);
+    
assertEquals(validDocIdsMetadataInfo.get("testTable__1").get(0).getSegmentCreationTimeMillis(),
 9876543210L);
   }
 
   @Test
@@ -324,27 +331,27 @@ public class UpsertCompactionTaskGeneratorTest {
             "1");
     UpsertConfig upsertConfig = new UpsertConfig(UpsertConfig.Mode.FULL);
     upsertConfig.setSnapshot(Enablement.ENABLE);
-    TableConfig tableConfig = new 
TableConfigBuilder(TableType.REALTIME).setTableName(RAW_TABLE_NAME)
-        .setUpsertConfig(upsertConfig)
-        .setTaskConfig(new 
TableTaskConfig(ImmutableMap.of("UpsertCompactionTask", 
upsertCompactionTaskConfig)))
-        .build();
+    TableConfig tableConfig =
+        new 
TableConfigBuilder(TableType.REALTIME).setTableName(RAW_TABLE_NAME).setUpsertConfig(upsertConfig)
+            .setTaskConfig(new 
TableTaskConfig(ImmutableMap.of("UpsertCompactionTask", 
upsertCompactionTaskConfig)))
+            .build();
 
     _taskGenerator.validateTaskConfigs(tableConfig, new Schema(), 
upsertCompactionTaskConfig);
 
     // test with invalidRecordsThresholdPercents as 0
     Map<String, String> upsertCompactionTaskConfig1 = 
ImmutableMap.of("invalidRecordsThresholdPercent", "0");
-    TableConfig zeroPercentTableConfig = new 
TableConfigBuilder(TableType.REALTIME).setTableName(RAW_TABLE_NAME)
-        .setUpsertConfig(upsertConfig)
-        .setTaskConfig(new 
TableTaskConfig(ImmutableMap.of("UpsertCompactionTask", 
upsertCompactionTaskConfig1)))
-        .build();
+    TableConfig zeroPercentTableConfig =
+        new 
TableConfigBuilder(TableType.REALTIME).setTableName(RAW_TABLE_NAME).setUpsertConfig(upsertConfig)
+            .setTaskConfig(new 
TableTaskConfig(ImmutableMap.of("UpsertCompactionTask", 
upsertCompactionTaskConfig1)))
+            .build();
     _taskGenerator.validateTaskConfigs(zeroPercentTableConfig, new Schema(), 
upsertCompactionTaskConfig1);
 
     // test with invalid invalidRecordsThresholdPercents as -1 and 110
     Map<String, String> upsertCompactionTaskConfig2 = 
ImmutableMap.of("invalidRecordsThresholdPercent", "-1");
-    TableConfig negativePercentTableConfig = new 
TableConfigBuilder(TableType.REALTIME).setTableName(RAW_TABLE_NAME)
-        .setUpsertConfig(upsertConfig)
-        .setTaskConfig(new 
TableTaskConfig(ImmutableMap.of("UpsertCompactionTask", 
upsertCompactionTaskConfig2)))
-        .build();
+    TableConfig negativePercentTableConfig =
+        new 
TableConfigBuilder(TableType.REALTIME).setTableName(RAW_TABLE_NAME).setUpsertConfig(upsertConfig)
+            .setTaskConfig(new 
TableTaskConfig(ImmutableMap.of("UpsertCompactionTask", 
upsertCompactionTaskConfig2)))
+            .build();
     Assert.assertThrows(IllegalStateException.class,
         () -> _taskGenerator.validateTaskConfigs(negativePercentTableConfig, 
new Schema(),
             upsertCompactionTaskConfig2));
diff --git 
a/pinot-server/src/main/java/org/apache/pinot/server/api/resources/TablesResource.java
 
b/pinot-server/src/main/java/org/apache/pinot/server/api/resources/TablesResource.java
index 3df7a4290e..da822cef86 100644
--- 
a/pinot-server/src/main/java/org/apache/pinot/server/api/resources/TablesResource.java
+++ 
b/pinot-server/src/main/java/org/apache/pinot/server/api/resources/TablesResource.java
@@ -718,6 +718,7 @@ public class TablesResource {
           validDocIdsMetadata.put("segmentSizeInBytes",
               ((ImmutableSegment) 
segmentDataManager.getSegment()).getSegmentSizeBytes());
         }
+        validDocIdsMetadata.put("segmentCreationTimeMillis", 
indexSegment.getSegmentMetadata().getIndexCreationTime());
         allValidDocIdsMetadata.add(validDocIdsMetadata);
       }
       if (nonImmutableSegmentCount > 0) {
diff --git 
a/pinot-server/src/test/java/org/apache/pinot/server/api/TablesResourceTest.java
 
b/pinot-server/src/test/java/org/apache/pinot/server/api/TablesResourceTest.java
index 42699a78c0..0d208cc695 100644
--- 
a/pinot-server/src/test/java/org/apache/pinot/server/api/TablesResourceTest.java
+++ 
b/pinot-server/src/test/java/org/apache/pinot/server/api/TablesResourceTest.java
@@ -348,6 +348,8 @@ public class TablesResourceTest extends BaseResourceTest {
     Assert.assertEquals(validDocIdsMetadata.get("segmentCrc").asText(), 
"1894900283");
     Assert.assertEquals(validDocIdsMetadata.get("validDocIdsType").asText(), 
"SNAPSHOT");
     
Assert.assertEquals(validDocIdsMetadata.get("segmentSizeInBytes").asLong(), 
1877636);
+    Assert.assertTrue(validDocIdsMetadata.has("segmentCreationTimeMillis"));
+    
Assert.assertTrue(validDocIdsMetadata.get("segmentCreationTimeMillis").asLong() 
> 0);
   }
 
   // Verify metadata file from segments.


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to