[
https://issues.apache.org/jira/browse/BOOKKEEPER-177?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13215805#comment-13215805
]
Hudson commented on BOOKKEEPER-177:
-----------------------------------
Integrated in bookkeeper-trunk #375 (See
[https://builds.apache.org/job/bookkeeper-trunk/375/])
BOOKKEEPER-177: Index file is lost or some index pages aren't flushed.
(sijie via ivank) (Revision 1293369)
Result = ABORTED
ivank :
Files :
* /zookeeper/bookkeeper/trunk/CHANGES.txt
*
/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
*
/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCache.java
*
/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerDescriptor.java
*
/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
*
/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/IndexCorruptionTest.java
> Index file is lost or some index pages aren't flushed.
> ------------------------------------------------------
>
> Key: BOOKKEEPER-177
> URL: https://issues.apache.org/jira/browse/BOOKKEEPER-177
> Project: Bookkeeper
> Issue Type: Bug
> Components: bookkeeper-server
> Reporter: Sijie Guo
> Assignee: Sijie Guo
> Fix For: 4.1.0
>
> Attachments: BK-177.patch, IndexCorruptionTest.java
>
>
> we found that some index files are lost ore some index pages aren't flushed
> after applying BOOKKEEPER-137 patch.
> this issue can be reproduced by following sequence.
> index file missing:
> 1) create ledger 1 without writing any entries
> 2) open ledger 1 which causes a recoveryRead entry(0) sent to bookie server.
> then an empty page is put in pageTable by mistake as below. (we should call
> updatePage first to check whether bookie server has this ledger)
> {code}
> // in ledgerCache#getEntryOffset
> lep = grabCleanPage(ledger, pageEntry);
> synchronized(this) {
> putIntoTable(pages, lep);
> }
> updatePage(lep);
> {code}
> 3) open ledger 2 to write serval entries. a meta entry and several data
> entries would be put in journal.
> 4) SyncThread executes to flush ledger. it first flush ledger 1, although
> ledger 1 has an empty page which is clean, but the code still need to call
> #getFileInfo, which will cause an NoLedgerException fail the flush.
> unfortunately, the SyncThread caught this exception and just output an error
> message then rollLog. the result is ledger 2 is not flushed, and its journal
> entries would not be replayed after restarted.
> {code}
> lastLogMark.markLog();
>
> try {
> ledgerCache.flushLedger(true);
> } catch (IOException e) {
> LOG.error("Exception flushing Ledger", e);
> }
> try {
> entryLogger.flush();
> } catch (IOException e) {
> LOG.error("Exception flushing entry logger", e);
> }
>
> lastLogMark.rollLog();
> {code}
> similar case for some index pages are not flushed.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira