This is an automated email from the ASF dual-hosted git repository.
prashantkumar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 3f30d22 if entrySize > segmentSize ,will throw
IndexOutOfBoundsException when put entry into ReadCache (#2982)
3f30d22 is described below
commit 3f30d22a185a775fac6fe10da2c1f12e4f7e4005
Author: chenlin <[email protected]>
AuthorDate: Thu Jan 13 01:45:04 2022 +0800
if entrySize > segmentSize ,will throw IndexOutOfBoundsException when put
entry into ReadCache (#2982)
---
.../java/org/apache/bookkeeper/bookie/storage/ldb/ReadCache.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/ReadCache.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/ReadCache.java
index 803666b..3ec4e11 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/ReadCache.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/ReadCache.java
@@ -34,6 +34,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.bookkeeper.util.collections.ConcurrentLongLongPairHashMap;
import
org.apache.bookkeeper.util.collections.ConcurrentLongLongPairHashMap.LongPair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Read cache implementation.
@@ -46,6 +48,7 @@ import
org.apache.bookkeeper.util.collections.ConcurrentLongLongPairHashMap.Long
* the read cache.
*/
public class ReadCache implements Closeable {
+ private static final Logger log = LoggerFactory.getLogger(ReadCache.class);
private static final int DEFAULT_MAX_SEGMENT_SIZE = 1 * 1024 * 1024 * 1024;
@@ -90,6 +93,10 @@ public class ReadCache implements Closeable {
lock.readLock().lock();
try {
+ if (entrySize > segmentSize) {
+ log.warn("entrySize {} > segmentSize {}, skip update read
cache!", entrySize, segmentSize);
+ return;
+ }
int offset = currentSegmentOffset.getAndAdd(alignedSize);
if (offset + entrySize > segmentSize) {
// Roll-over the segment (outside the read-lock)