hangc0276 opened a new pull request, #3901:
URL: https://github.com/apache/bookkeeper/pull/3901
### Motivation
When one ledger file is broken, `getEntryLogMetadata` will throw an
IllegalArgumentException, which is a RuntimeException and won't be caught in
the whole garbage collector execution path. The exception will be caught by the
thread SafeRunnable and interrupt the garbage collector, leading to those
deleted ledgers can't be recycled and the ledger disk usage up.
```
2023-04-01T00:55:29,497+0000 [GarbageCollectorThread-11-1] INFO
org.apache.bookkeeper.bookie.GarbageCollectorThread - Garbage collector thread
forced to perform GC before expiry of wait time.
2023-04-01T00:55:29,498+0000 [GarbageCollectorThread-11-1] INFO
org.apache.bookkeeper.bookie.GarbageCollectorThread - Extracting entry log meta
from entryLogId: 17
2023-04-01T00:55:29,498+0000 [GarbageCollectorThread-11-1] INFO
org.apache.bookkeeper.bookie.EntryLogger - Failed to get ledgers map index
from: 17.log : Cannot deserialize ledgers map from ledger 9062744587808030975
2023-04-01T00:55:29,553+0000 [GarbageCollectorThread-11-1] ERROR
org.apache.bookkeeper.common.util.SafeRunnable - Unexpected throwable caught
java.lang.IllegalArgumentException: Negative position
at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:785) ~[?:?]
at
org.apache.bookkeeper.bookie.BufferedReadChannel.read(BufferedReadChannel.java:93)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.BufferedReadChannel.read(BufferedReadChannel.java:65)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.EntryLogger.readFromLogChannel(EntryLogger.java:418)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.EntryLogger.scanEntryLog(EntryLogger.java:996)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.EntryLogger.extractEntryLogMetadataByScanning(EntryLogger.java:1136)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.EntryLogger.getEntryLogMetadata(EntryLogger.java:1045)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.GarbageCollectorThread.extractMetaFromEntryLogs(GarbageCollectorThread.java:607)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.GarbageCollectorThread.runWithFlags(GarbageCollectorThread.java:348)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.bookie.GarbageCollectorThread.safeRun(GarbageCollectorThread.java:329)
~[org.apache.bookkeeper-bookkeeper-server-4.14.5.jar:4.14.5]
at
org.apache.bookkeeper.common.util.SafeRunnable.run(SafeRunnable.java:36)
~[org.apache.bookkeeper-bookkeeper-common-4.14.5.jar:4.14.5]
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
~[?:?]
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
~[?:?]
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
~[io.netty-netty-common-4.1.77.Final.jar:4.1.77.Final]
at java.lang.Thread.run(Thread.java:829) ~[?:?]
```
### Changes
Catch the RuntimeException when getting the metadata for each entry log file.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]