[ 
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

        

Reply via email to