klsince commented on code in PR #10089:
URL: https://github.com/apache/pinot/pull/10089#discussion_r1070055592


##########
pinot-core/src/main/java/org/apache/pinot/core/data/manager/BaseTableDataManager.java:
##########
@@ -353,15 +354,37 @@ public void reloadSegment(String segmentName, 
IndexLoadingConfig indexLoadingCon
     indexLoadingConfig.setSegmentTier(segmentTier);
     indexLoadingConfig.setTableDataDir(_tableDataDir);
     
indexLoadingConfig.setInstanceTierConfigs(_tableDataManagerConfig.getInstanceTierConfigs());
+    indexLoadingConfig.setSegmentTier(zkMetadata.getTier());

Review Comment:
   This change may be problematic. At L354, `setSegmentTier(segmentTier)` is 
called in order to create the SegmentDirectory object with current tier to kick 
off the following segment reloading logic.
   
   At L386, `indexLoadingConfig.setSegmentTier(zkMetadata.getTier());` is 
called in order to load the segment with the target tier from the segment ZK 
metadata to finish segment loading. Different tiers may have different configs, 
for example `TierBasedSegmentDirectoryLoader` moves segments across data paths 
as set in tierConfigs, based on which tier is provided via this 
`setSegmentTier`.
   



##########
pinot-core/src/main/java/org/apache/pinot/core/data/manager/BaseTableDataManager.java:
##########
@@ -353,15 +354,37 @@ public void reloadSegment(String segmentName, 
IndexLoadingConfig indexLoadingCon
     indexLoadingConfig.setSegmentTier(segmentTier);
     indexLoadingConfig.setTableDataDir(_tableDataDir);
     
indexLoadingConfig.setInstanceTierConfigs(_tableDataManagerConfig.getInstanceTierConfigs());
+    indexLoadingConfig.setSegmentTier(zkMetadata.getTier());
     File indexDir = getSegmentDataDir(segmentName, segmentTier, 
indexLoadingConfig.getTableConfig());
     try {
+
+      boolean shouldDownload = forceDownload || !hasSameCRC(zkMetadata, 
localMetadata);
+
+      if (!shouldDownload) {
+        // We should first try to reuse directory
+        Properties loaderContextProps = new Properties();
+        
loaderContextProps.put(CommonConstants.Server.DIRECTORY_LOADER_PURPOSE_CONFIG,
+            CommonConstants.Server.DIRECTORY_LOADER_PURPOSE_RELOAD);
+        SegmentDirectory segmentDirectory =
+            initSegmentDirectory(segmentName, 
String.valueOf(zkMetadata.getCrc()), indexLoadingConfig,
+                loaderContextProps);
+        boolean needReprocess = 
ImmutableSegmentLoader.needPreprocess(segmentDirectory, indexLoadingConfig, 
schema);
+        if (!needReprocess) {
+          // No reprocessing needed, reuse the same segment
+          ImmutableSegment segment = 
ImmutableSegmentLoader.load(segmentDirectory, indexLoadingConfig, schema);
+          addSegment(segment);
+          return;
+        } else {

Review Comment:
   looks like, if it takes the else-branch, the SegmentDirectory object may be 
created again at L402. 
   
   I wonder if the changes can be simplified by checking `needPreprocess` after 
segmentDirectory is created at L402. If no need to preprocess, just add segment 
and done. 



-- 
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: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to