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]

Reply via email to