From 1796a4d802fce34ce66083f727249cfa1dd75ff1 Mon Sep 17 00:00:00 2001 From: horizonzy Date: Mon, 12 Feb 2024 02:17:19 +0800 Subject: [PATCH] Fix concurrency problem. --- .../org/apache/bookkeeper/bookie/BufferedReadChannel.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BufferedReadChannel.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BufferedReadChannel.java index 36c8f26b89e..4de3890e082 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BufferedReadChannel.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BufferedReadChannel.java @@ -43,7 +43,7 @@ public class BufferedReadChannel extends BufferedChannelBase { long invocationCount = 0; long cacheHitCount = 0; - private long fileSize = -1; + private volatile long fileSize = -1; final boolean sealed; public BufferedReadChannel(FileChannel fileChannel, int readCapacity) { @@ -75,7 +75,11 @@ public int read(ByteBuf dest, long pos) throws IOException { public long size() throws IOException { if (sealed) { if (fileSize == -1) { - fileSize = validateAndGetFileChannel().size(); + synchronized (this) { + if (fileSize == -1) { + fileSize = validateAndGetFileChannel().size(); + } + } } return fileSize; } else {