[
https://issues.apache.org/jira/browse/ACCUMULO-4502?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15644401#comment-15644401
]
Keith Turner commented on ACCUMULO-4502:
----------------------------------------
bq. The switch and subsequent pointer assignment is done on one thread, and the
pointer is read on another. This is the only explanation I can come up with
unless the dumped file is somehow not identical to the original memory file.
I think synchronized should cover that case, if both threads sync on the same
thing. Volatile would cover reads outside of sync block. Could just be some
other bug, like the one you found with the Value being changed.
> 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
> Assignee: Ivan Bella
> Fix For: 1.7.3, 1.8.1, 2.0.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> 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)