[ https://issues.apache.org/jira/browse/ACCUMULO-4502?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15602717#comment-15602717 ]
Ivan Bella commented on ACCUMULO-4502: -------------------------------------- The condition in the HeapIterator is that the topIdx == null which implies that hasTop should have returned false. In PartialMutationSkippingIterator.consume it is simply doing the following: protected void consume() throws IOException while (getSource().hasTop() && ((MemKey) getSource().getTopKey()).kvCount > kvCount) getSource().next(); } So obviously it is calling hasTop() before calling next(). The rub is that there is a SourceSwitchingIterator in between the PartialMutationSkippingIterator and the HeapIterator at the bottom. Most likely a minor compaction caused the SourceSwitchingIterator to switch via the switchNow method. When that happens the following code in _switchNow() is invoked: if (switchSource()) { if (key != null) { iter.seek(...) } } So if getSource().getTop() was invoked in the PartialMutationSkippingIterator, then switchSource is called but BEFORE the nested if (key != null) { iter.seek(...) } is invoked, the getSource().next() is invoked by the PartialMutationSkippingIterator. This scenario would leave the topIdx to be null in the HeapIterator (most likely the RFile.Reader at this point) and subsequently cause this exception. > Called next when there is no top > -------------------------------- > > Key: ACCUMULO-4502 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4502 > Project: Accumulo > Issue Type: Bug > Components: core, tserver > Affects Versions: 1.6.6 > Reporter: Ivan Bella > > This happens very rarely but we have seen the following exception (pulled > from a server running 1.6.4). Looking at the code I believe this condition > can still happen in 1.8.0: > java.util.concurrent.ExecutionException: java.lang.IllegalStateException: > Called next() when there is no top > ... > Caused by: java.lang.IllegalStateException: Called next() when there is no top > HeapIterator.next(HeapIterator.java: 77) > WrappingIterator.next(WrappingIterator.java: 96) > MemKeyConversionIterator.next(InMemoryMap.java:162) > SourceSwitchingIterator.readNext(SourceSwitchingIterator.java: 139) > SourceSwitchingIterator.next(SourceSwitchingIterator.java: 123) > PartialMutationSkippingIterator.consume(InMemoryMap.java:108) > SkippingIterator.seek(SkippingIterator.java:43) -- This message was sent by Atlassian JIRA (v6.3.4#6332)