Issue 2264: Bookie cannot perform Garbage Collection in case of corrupted EntryLogger file
- in case of corrupted entry log file the bookie cannot perform GC
- handle the case of an unexpected negative entrysize
### Changes
Stop scanning the file
Master Issue: #2264
Reviewers: Jia Zhai <zhaijia@apache.org>, Rajan Dhabalia <rdhabalia@apache.org>
This closes #2373 from eolivelli/fix/issue2264-corruptedfile
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
index 0d7c861..bc16a19 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
@@ -1011,6 +1011,11 @@
// read the entry
data.clear();
+ if (entrySize < 0) {
+ LOG.warn("bad read for ledger entry from entryLog {}@{} (entry size {})",
+ entryLogId, pos, entrySize);
+ return;
+ }
data.capacity(entrySize);
int rc = readFromLogChannel(entryLogId, bc, data, pos);
if (rc != entrySize) {