[ https://issues.apache.org/jira/browse/BOOKKEEPER-568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13576374#comment-13576374 ]
Sijie Guo commented on BOOKKEEPER-568: -------------------------------------- ah, it seems that this code doesn't handle calling hasNext twice. so second time call hasNext would fail with null pointer. the case would happened when there is no ledgers existed in bookkeeper. [~merlimat] it is OK to fix as your suggestion. could you generate a patch for it? thanks. > NPE during GC with HierarchicalLedgerManager > -------------------------------------------- > > Key: BOOKKEEPER-568 > URL: https://issues.apache.org/jira/browse/BOOKKEEPER-568 > Project: Bookkeeper > Issue Type: Bug > Components: bookkeeper-server > Affects Versions: 4.2.0 > Reporter: Matteo Merli > Priority: Minor > > {noformat} > 2013-02-11 14:06:28,904 - WARN - > [GarbageCollectorThread:ScanAndCompareGarbageCollector@103] - Exception when > iterating over the metadata {} > java.io.IOException: Error when check more elements > at > org.apache.bookkeeper.meta.HierarchicalLedgerManager$HierarchicalLedgerRangeIterator.hasNext(HierarchicalLedgerManager.java:423) > at > org.apache.bookkeeper.bookie.ScanAndCompareGarbageCollector.gc(ScanAndCompareGarbageCollector.java:75) > at > org.apache.bookkeeper.bookie.GarbageCollectorThread.doGcLedgers(GarbageCollectorThread.java:302) > at > org.apache.bookkeeper.bookie.GarbageCollectorThread.run(GarbageCollectorThread.java:271) > Caused by: java.lang.NullPointerException > at > org.apache.bookkeeper.meta.HierarchicalLedgerManager$HierarchicalLedgerRangeIterator.hasNext(HierarchicalLedgerManager.java:419) > ... 3 more > {noformat} > In the code below, l2NodesIter appears to be null. > {code} > public boolean hasNext() throws IOException { > try { > if (l1NodesIter == null) { > l1NodesIter = zk.getChildren(ledgerRootPath, null).iterator(); > hasMoreElement = nextL1Node(); > } else if (!l2NodesIter.hasNext()) { > hasMoreElement = nextL1Node(); > } > } catch (Exception e) { > throw new IOException("Error when check more elements", e); > } > return hasMoreElement; > } > {code} -- 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