This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new a79cb13aa8 [IOTDB-4196] Fix concurrent bug in TsFileSequenceReader
(#7122)
a79cb13aa8 is described below
commit a79cb13aa8481a738f83a2eab608a6f77e383193
Author: liuminghui233 <[email protected]>
AuthorDate: Thu Aug 25 13:58:53 2022 +0800
[IOTDB-4196] Fix concurrent bug in TsFileSequenceReader (#7122)
---
.../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);