shustsud edited a comment on issue #3070: URL: https://github.com/apache/bookkeeper/issues/3070#issuecomment-1049446938
@lordcheng10 readEntryComplete(callback) is run in the BookKeeperClientWorker-OrderedExecutor thread. ``` https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L314 ``` Then, BookKeeperClientWorker-OrderedExecutor thread acquires the lock of semaphore. ``` https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L323 -> https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L430-L431 -> https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L469 -> https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L208 -> https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L246 or -> https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L291 ``` If all BookKeeperClientWorker-OrderedExecutor threads are waiting to acquire the lock, there are no available BookKeeperClientWorker-OrderedExecutor threads, so readEntryComplete(callback) will not be run. If readEntryComplete(callback) is not run, the lock on semaphore is not released, so I think checkAllLedgers gets stuck. ``` https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L80-L82 https://github.com/apache/bookkeeper/blob/525a4a03f99afe1dca120477273537a6db46873c/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java#L314-L316 ``` If you set a low value for read throttle(inFlightReadEntryNumInLedgerChecker) and also a low value for the number of threads in BookKeeperClientWorker-OrderedExecutor(numWorkerThreads?), I think this problem will be reproduced. -- 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]
