klsince commented on a change in pull request #7969:
URL: https://github.com/apache/pinot/pull/7969#discussion_r780612465



##########
File path: 
pinot-core/src/main/java/org/apache/pinot/core/data/manager/BaseTableDataManager.java
##########
@@ -335,26 +327,19 @@ public void reloadSegment(String segmentName, 
IndexLoadingConfig indexLoadingCon
   public void addOrReplaceSegment(String segmentName, IndexLoadingConfig 
indexLoadingConfig,
       SegmentZKMetadata zkMetadata, @Nullable SegmentMetadata localMetadata)
       throws Exception {
-    if (!isNewSegment(zkMetadata, localMetadata)) {
+    if (localMetadata != null && hasSameCRC(zkMetadata, localMetadata)) {
       LOGGER.info("Segment: {} of table: {} has crc: {} same as before, 
already loaded, do nothing", segmentName,
           _tableNameWithType, localMetadata.getCrc());
       return;
     }
 
-    // Try to recover if no local metadata is provided.
-    if (localMetadata == null) {
-      LOGGER.info("Segment: {} of table: {} is not loaded, checking disk", 
segmentName, _tableNameWithType);
-      localMetadata = recoverSegmentQuietly(segmentName);
-      if (!isNewSegment(zkMetadata, localMetadata)) {
-        LOGGER.info("Segment: {} of table {} has crc: {} same as before, 
loading", segmentName, _tableNameWithType,
-            localMetadata.getCrc());
-        if (loadSegmentQuietly(segmentName, indexLoadingConfig)) {
-          return;
-        }
-        // Set local metadata to null to indicate that the local segment fails 
to load,
-        // although it exists and has same crc with the remote one.
-        localMetadata = null;
-      }
+    // The segment is not loaded by the server if the metadata object is null. 
But the segment
+    // may still be kept on the server. For example when server gets 
restarted, the segment is
+    // still on the server but the metadata object has not been initialized 
yet. In this case,
+    // we should check if the segment exists on server and try to load it. If 
the segment does
+    // not exist or fails to get loaded, we download segment from deep store 
to load it again.
+    if (localMetadata == null && tryLoadExistingSegment(segmentName, 
indexLoadingConfig, zkMetadata)) {

Review comment:
       L510 `ImmutableSegmentLoader.load(segmentDirectory, indexLoadingConfig, 
schema);` uses the initialized SegmentDirectory object to create the 
ImmutableSegment object as the last step of the segment loading logic flow.
   
   




-- 
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