[ 
https://issues.apache.org/jira/browse/HBASE-29474?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Junegunn Choi reassigned HBASE-29474:
-------------------------------------

    Assignee: Junegunn Choi

> RegionSplitter.rollingSplit is broken
> -------------------------------------
>
>                 Key: HBASE-29474
>                 URL: https://issues.apache.org/jira/browse/HBASE-29474
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Junegunn Choi
>            Assignee: Junegunn Choi
>            Priority: Major
>
> h2. Problem
> The method {{RegionSplitter.rollingSplit}} was not properly covered by unit 
> tests until  HBASE-29472. While the new test passes with a single 
> regionserver, it fails immediately when a second regionserver is added to the 
> cluster, throwing a {{java.util.ConcurrentModificationException}}.
> {code}
> java.util.ConcurrentModificationException
>       at 
> java.base/java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1486)
>       at java.base/java.util.TreeMap$EntryIterator.next(TreeMap.java:1522)
>       at java.base/java.util.TreeMap$EntryIterator.next(TreeMap.java:1517)
>       at 
> org.apache.hadoop.hbase.util.RegionSplitter.rollingSplit(RegionSplitter.java:466)
>       at 
> org.apache.hadoop.hbase.util.TestRegionSplitter.rollingSplitAndVerify(TestRegionSplitter.java:426)
>       at 
> org.apache.hadoop.hbase.util.TestRegionSplitter.testSplitPresplitTable(TestRegionSplitter.java:138)
>       at 
> org.apache.hadoop.hbase.util.TestRegionSplitter.testSplitPresplitTable(TestRegionSplitter.java:118)
> {code}
> This happens because the underlying {{TreeMap}} is modified during iteration:
> https://github.com/apache/hbase/blob/f88a1ce52583fc02ad3d421ccf32bd7f38c3f0b3/hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionSplitter.java#L513-L515
> h2. Solution
> Avoid concurrent modification by iterating over a snapshot of the keys 
> instead.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to