[ 
https://issues.apache.org/jira/browse/HBASE-2881?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12892626#action_12892626
 ] 

Kannan Muthukkaruppan commented on HBASE-2881:
----------------------------------------------

While this is somewhat similar to other double-assignment JIRA (HBASE-2755),  
filing this as a separate issue since the race conditions in the two cases are 
in different parts of the code. 

(If Jonathan's rewrite is in place, the single fix, of eliminating meta scanner 
based region assignments, would address both issues. But in case, for some 
reason, that runs into complications, we'll need point fixes for each of the 
issues. So better to track this as a separate issue).

> TestAdmin intermittent failures: Race condition during createTable can result 
> in region double assignment
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-2881
>                 URL: https://issues.apache.org/jira/browse/HBASE-2881
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Kannan Muthukkaruppan
>
> The TestAdmin test fails on trunk intermittently because it is unable to 
> "enable" a "disabled" table. However, the root cause seems to be that much 
> earlier, at "createTable" time the table's region got assigned to 2 region 
> servers. And this later confuses the "disable"/"enable" code.
> createTable goes down to RegionManager.java:createRegion:
> {code}
> public void createRegion(HRegionInfo newRegion, HRegionInterface server,
>       byte [] metaRegionName)
>   throws IOException {
>     // 2. Create the HRegion
>     HRegion region = HRegion.createHRegion(newRegion, 
> this.master.getRootDir(),
>       master.getConfiguration());
>     // 3. Insert into meta
>     HRegionInfo info = region.getRegionInfo();
>     byte [] regionName = region.getRegionName();
>     Put put = new Put(regionName);
>     put.add(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER,
>         Writables.getBytes(info));
>     server.put(metaRegionName, put);
>     // 4. Close the new region to flush it to disk.  Close its log file too.
>     region.close();
>     region.getLog().closeAndDelete();
>     // 5. Get it assigned to a server
>     setUnassigned(info, true);
>   }
> {code}
> Between, after #3, but before #5, if the MetaScanner runs, it'll find this 
> region in unassigned state and also assign it out.
> And then #5 comes along at again "force" sets this region to be unassigned... 
> causing it to get assigned again to a different region server (as part of the 
> RegionManager's job of assigning out regions waiting to be assigned along 
> with region server heart beats).
> ---
> The test in question that diffs is TestAdmin:testHundredsOfTable(). I tried 
> repro'ing this more reliable by modifying the test to have the metascanner 
> run more frequently:
> {code}
>   
> TEST_UTIL.getConfiguration().setInt("hbase.master.meta.thread.rescanfrequency",
>  1000);// 1 seconds
> {code}
> (instead of the default 60seconds); but it didn't help improve the 
> reproducibility.
> ---

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to