Jackie-Jiang commented on code in PR #17380:
URL: https://github.com/apache/pinot/pull/17380#discussion_r2684105554


##########
pinot-common/src/main/java/org/apache/pinot/common/metadata/segment/SegmentZKMetadata.java:
##########
@@ -182,6 +182,22 @@ public void setDataCrc(long dataCrc) {
     setNonNegativeValue(Segment.DATA_CRC, dataCrc);
   }
 
+  public boolean isUseDataCrcForReplace() {
+    String useDataCrcForReplaceString = 
_simpleFields.get(Segment.USE_DATA_CRC_FOR_REPLACE);
+    return useDataCrcForReplaceString != null && 
Boolean.parseBoolean(useDataCrcForReplaceString);
+  }
+
+  // useDataCrcForReplace is set for consuming segments in realtime table
+  // that signal replica server to use Data CRC when available for doing any 
replacement
+  // of segments
+  public void setUseDataCrcForReplace(boolean useDataCrcForReplace) {
+    if (useDataCrcForReplace) {
+      _simpleFields.put(Segment.USE_DATA_CRC_FOR_REPLACE, 
String.valueOf(useDataCrcForReplace));

Review Comment:
   (minor)
   ```suggestion
         _simpleFields.put(Segment.USE_DATA_CRC_FOR_REPLACE, "true");
   ```



##########
pinot-common/src/main/java/org/apache/pinot/common/metadata/segment/SegmentZKMetadata.java:
##########
@@ -182,6 +182,22 @@ public void setDataCrc(long dataCrc) {
     setNonNegativeValue(Segment.DATA_CRC, dataCrc);
   }
 
+  public boolean isUseDataCrcForReplace() {
+    String useDataCrcForReplaceString = 
_simpleFields.get(Segment.USE_DATA_CRC_FOR_REPLACE);
+    return useDataCrcForReplaceString != null && 
Boolean.parseBoolean(useDataCrcForReplaceString);

Review Comment:
   (minor)
   ```suggestion
       return Boolean.parseBoolean(useDataCrcForReplaceString);
   ```



##########
pinot-core/src/main/java/org/apache/pinot/core/data/manager/BaseTableDataManager.java:
##########
@@ -1659,7 +1659,18 @@ private SegmentDirectory initSegmentDirectory(String 
segmentName, String segment
     return segmentDirectoryLoader.load(indexDir.toURI(), loaderContext);
   }
 
+  // CRC check can be performed on both segment CRC and data CRC (if 
available) based on the ZK property value of
+  // useDataCRCForReplace.
   private static boolean hasSameCRC(SegmentZKMetadata zkMetadata, 
SegmentMetadata localMetadata) {
+    if (zkMetadata.isUseDataCrcForReplace()) {

Review Comment:
   (minor)
   ```suggestion
       if (zkMetadata.getCrc() == Long.parseLong(localMetadata.getCrc())) {
         return true;
       }
       return zkMetadata.isUseDataCrcForReplace() && zkMetadata.getDataCrc() >= 
0 && ...;
   ```



##########
pinot-common/src/main/java/org/apache/pinot/common/metadata/segment/SegmentZKMetadataUtils.java:
##########
@@ -94,6 +94,8 @@ private static void updateSegmentZKMetadata(String 
tableNameWithType, SegmentZKM
 
       segmentZKMetadata.setEndOffset(endOffset);
       
segmentZKMetadata.setStatus(CommonConstants.Segment.Realtime.Status.DONE);
+      // for committing segments, we use data CRC for replace
+      segmentZKMetadata.setUseDataCrcForReplace(true);

Review Comment:
   Consider checking data crc exist, then set this flag
   
   We also need to set this flag to false when segment is uploaded



##########
pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java:
##########
@@ -1782,6 +1782,7 @@ public static class Offline {
     public static final String TOTAL_DOCS = "segment.total.docs";
     public static final String CRC = "segment.crc";
     public static final String DATA_CRC = "segment.data.crc";
+    public static final String USE_DATA_CRC_FOR_REPLACE = 
"segment.useDataCRCForReplace";

Review Comment:
   +1. Maybe `segment.use.data.crc`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to