Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
While running TestSplitTransactionOnCluster#testShouldClearRITWhenNodeFoundInSplittingState in a loop I encountered this error condition:
java.util.NoSuchElementException at java.util.concurrent.ConcurrentSkipListMap$Iter.advance(ConcurrentSkipListMap.java:2224) at java.util.concurrent.ConcurrentSkipListMap$EntryIterator.next(ConcurrentSkipListMap.java:2270) at java.util.concurrent.ConcurrentSkipListMap$EntryIterator.next(ConcurrentSkipListMap.java:2266) at java.util.TreeMap.buildFromSorted(TreeMap.java:2394) at java.util.TreeMap.buildFromSorted(TreeMap.java:2344) at java.util.TreeMap.<init>(TreeMap.java:195) at org.apache.hadoop.hbase.master.AssignmentManager.getRegionsInTransition(AssignmentManager.java:2843) at org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster.testShouldClearRITWhenNodeFoundInSplittingState(TestSplitTransactionOnCluster.java:637)
This can only occur when the map being copied into the TreeMap is modified concurrently.
While looking at the (0.94) code I noticed that synchronization is indeed missing from the nodeDeleted hook.