vinothchandar commented on a change in pull request #2441:
URL: https://github.com/apache/hudi/pull/2441#discussion_r556982547



##########
File path: 
hudi-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadata.java
##########
@@ -98,79 +109,75 @@ public HoodieBackedTableMetadata(HoodieEngineContext 
engineContext, String datas
   }
 
   @Override
-  protected Option<HoodieRecord<HoodieMetadataPayload>> 
getRecordByKeyFromMetadata(String key) throws IOException {
-    openBaseAndLogFiles();
+  protected Option<HoodieRecord<HoodieMetadataPayload>> 
getRecordByKeyFromMetadata(String key) {
+    try {
+      openBaseAndLogFiles();
+      // Retrieve record from base file
+      HoodieRecord<HoodieMetadataPayload> hoodieRecord = null;
+      if (baseFileReader != null) {
+        HoodieTimer timer = new HoodieTimer().startTimer();
+        Option<GenericRecord> baseRecord = baseFileReader.getRecordByKey(key);
+        if (baseRecord.isPresent()) {
+          hoodieRecord = 
SpillableMapUtils.convertToHoodieRecordPayload(baseRecord.get(),
+              metaClient.getTableConfig().getPayloadClass());
+          metrics.ifPresent(m -> 
m.updateMetrics(HoodieMetadataMetrics.BASEFILE_READ_STR, timer.endTimer()));
+        }
+      }
 
-    // Retrieve record from base file
-    HoodieRecord<HoodieMetadataPayload> hoodieRecord = null;
-    if (baseFileReader != null) {
-      HoodieTimer timer = new HoodieTimer().startTimer();
-      Option<GenericRecord> baseRecord = baseFileReader.getRecordByKey(key);
-      if (baseRecord.isPresent()) {
-        hoodieRecord = 
SpillableMapUtils.convertToHoodieRecordPayload(baseRecord.get(),
-            metaClient.getTableConfig().getPayloadClass());
-        metrics.ifPresent(m -> 
m.updateMetrics(HoodieMetadataMetrics.BASEFILE_READ_STR, timer.endTimer()));
+      // Retrieve record from log file
+      Option<HoodieRecord<HoodieMetadataPayload>> logHoodieRecord = 
logRecordScanner.getRecordByKey(key);
+      if (logHoodieRecord.isPresent()) {
+        if (hoodieRecord != null) {
+          // Merge the payloads
+          HoodieRecordPayload mergedPayload = 
logHoodieRecord.get().getData().preCombine(hoodieRecord.getData());
+          hoodieRecord = new HoodieRecord(hoodieRecord.getKey(), 
mergedPayload);
+        } else {
+          hoodieRecord = logHoodieRecord.get();
+        }
       }
-    }
 
-    // Retrieve record from log file
-    Option<HoodieRecord<HoodieMetadataPayload>> logHoodieRecord = 
logRecordScanner.getRecordByKey(key);
-    if (logHoodieRecord.isPresent()) {
-      if (hoodieRecord != null) {
-        // Merge the payloads
-        HoodieRecordPayload mergedPayload = 
logHoodieRecord.get().getData().preCombine(hoodieRecord.getData());
-        hoodieRecord = new HoodieRecord(hoodieRecord.getKey(), mergedPayload);
-      } else {
-        hoodieRecord = logHoodieRecord.get();
+      return Option.ofNullable(hoodieRecord);
+    } catch (IOException ioe) {
+      throw new HoodieIOException("Error merging records from metadata table 
for key :" + key, ioe);
+    } finally {
+      try {
+        close();
+      } catch (Exception e) {
+        throw new HoodieException("Error closing resources during metadata 
table merge, for key :" + key, e);
       }
     }
-
-    return Option.ofNullable(hoodieRecord);
   }
 
   /**
    * Open readers to the base and log files.
    */
-  protected synchronized void openBaseAndLogFiles() throws IOException {

Review comment:
       I can add this back. but then we may not close this cleanly. and lead to 
leaks 
   #2429 




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

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


Reply via email to