[ https://issues.apache.org/jira/browse/BOOKKEEPER-447?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13532871#comment-13532871 ]
Sijie Guo commented on BOOKKEEPER-447: -------------------------------------- -1 for this patch. since I don't like the idea converting IOException to NoEntryException, actually IOException might means a valid add entry but it corrupts due to disk bad sectors. also, NoEntryException is a critical exception that we used for the termination condition for ledger recovery (see BOOKKEEPER-365). It would be better to equal IOException to NoEntryException. > Bookie can fail to recover if index pages flushed before ledger flush > acknowledged > ---------------------------------------------------------------------------------- > > Key: BOOKKEEPER-447 > URL: https://issues.apache.org/jira/browse/BOOKKEEPER-447 > Project: Bookkeeper > Issue Type: Bug > Components: bookkeeper-server > Affects Versions: 4.2.0 > Reporter: Yixue (Andrew) Zhu > Assignee: Ivan Kelly > Fix For: 4.2.0, 4.1.1 > > Attachments: > 0001-BOOKKEEPER-447-LedgerCacheImpl-waits-on-lock-object-.patch, > 0001-BOOKKEEPER-447-LedgerCacheImpl-waits-on-lock-object-.patch, > 0001-BOOKKEEPER-447-LedgerCacheImpl-waits-on-semaphore-no.patch, > 0001-BOOKKEEPER-447-Throw-NoSuchEntry-if-entry-is-not-fou.patch, > BOOKKEEPER-447.diff, perf.png > > > Bookie index page steal (LedgerCacheImpl::grabCleanPage) can cause index file > to reflect unacknowledged entries (due to flushLedger). Suppose ledger and > entry fail to flush due to Bookkeeper server crash, it will cause ledger > recovery not able to use the bookie afterward, due to > InterleavedStorageLedger::getEntry throws IOException. > If the ackSet bookies all experience this problem (DC environment), the > ledger will not be able to recover. > The problem here essentially a violation of WAL. One reasonable fix is to > track ledger flush progress (either per-ledger entry, or per-topic message). > Do not flush index pages which tracks entries whose ledger (log) has not been > flushed. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira