This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/fixReader in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit bf002d3c594882749cb97c878b3ecda0c4138ce0 Author: Minghui Liu <[email protected]> AuthorDate: Thu Aug 25 11:06:32 2022 +0800 [IOTDB-4196] Fix concurrent bug in TsFileSequenceReader --- .../org/apache/iotdb/tsfile/read/TsFileSequenceReader.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java index 5f9aea46cc..452ecb9381 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java @@ -100,7 +100,7 @@ public class TsFileSequenceReader implements AutoCloseable { protected long fileMetadataPos; protected int fileMetadataSize; private ByteBuffer markerBuffer = ByteBuffer.allocate(Byte.BYTES); - protected TsFileMetadata tsFileMetaData; + protected volatile TsFileMetadata tsFileMetaData; // device -> measurement -> TimeseriesMetadata private Map<String, Map<String, TimeseriesMetadata>> cachedDeviceMetadata = new ConcurrentHashMap<>(); @@ -277,8 +277,12 @@ public class TsFileSequenceReader implements AutoCloseable { public TsFileMetadata readFileMetadata() throws IOException { try { if (tsFileMetaData == null) { - tsFileMetaData = - TsFileMetadata.deserializeFrom(readData(fileMetadataPos, fileMetadataSize)); + synchronized (this) { + if (tsFileMetaData == null) { + tsFileMetaData = + TsFileMetadata.deserializeFrom(readData(fileMetadataPos, fileMetadataSize)); + } + } } } catch (Exception e) { logger.error("Something error happened while reading file metadata of file {}", file);
