[ 
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)

Reply via email to