diff --git a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataMergedLogRecordReader.java b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataMergedLogRecordReader.java index e635eeaaa..01c8d05e9 100644 --- a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataMergedLogRecordReader.java +++ b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataMergedLogRecordReader.java @@ -120,7 +120,10 @@ public class HoodieMetadataMergedLogRecordReader extends HoodieMergedLogRecordSc return Collections.singletonList(Pair.of(key, Option.ofNullable((HoodieRecord) records.get(key)))); } - public List>>> getRecordsByKeys(List keys) { + public synchronized List>>> getRecordsByKeys(List keys) { + // Following operations have to be atomic, otherwise concurrent + // readers would race with each other and could crash when + // processing log block records as part of scan. records.clear(); scan(Option.of(keys)); List>>> metadataRecords = new ArrayList<>();