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

Work on HBASE-26371 started by Viraj Jasani.
--------------------------------------------
> Prioritize meta region move over other region moves in region_mover
> -------------------------------------------------------------------
>
>                 Key: HBASE-26371
>                 URL: https://issues.apache.org/jira/browse/HBASE-26371
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 1.6.0
>            Reporter: Viraj Jasani
>            Assignee: Viraj Jasani
>            Priority: Major
>             Fix For: 2.5.0, 3.0.0-alpha-2, 1.7.2, 2.4.8, 2.3.8
>
>
> We have seen few issues in production when meta region movement took some 
> time from one server to another and in the meanwhile some other system 
> table's regions were also moved (that were hosted on the same server) 
> simultaneously but when non-meta system regions came online on other servers, 
> the new servers could not make info:sn update to meta table for updated 
> destination of system regions (e.g namespace region) and at the same time, 
> active master was also bounced and the new active master that comes online 
> usually reads namespace region's location from meta table and considers it as 
> final, hence even if for instance, namespace region is already online (but on 
> different host), the inconsistent info:sn value would prevent master from 
> getting initialized because it keeps waiting for namespace region's 
> availability on old regionserver. In this case, we need to make special 
> arrangement to bring namespace region online on the old server only.
> {code:java}
> 2021-10-12 20:00:00,630 INFO [1f507eff84ef336f1250] 
> regionserver.HRegionServer - Post open deploy tasks for 
> hbase:namespace,1626899414773.52693312958f1f507eff84ef336f1250.
> 2021-10-12 20:04:18,622 INFO [1f507eff84ef336f1250] hbase.MetaTableAccessor - 
> Updated row hbase:namespace,1626899414773.52693312958f1f507eff84ef336f1250. 
> with server=server-0,60020,1633467603387
> 2021-10-12 20:04:18,622 INFO [1f507eff84ef336f1250] client.AsyncProcess - 
> #27, waiting for some tasks to finish. Expected max=0, tasksInProgress=4 
> hasError=false, tableName=hbase:meta
> 2021-10-12 20:04:18,622 INFO [1f507eff84ef336f1250] client.AsyncProcess - 
> Left over 4 task(s) are processed on server(s): []
> 2021-10-12 20:04:18,622 DEBUG [1f507eff84ef336f1250] 
> regionserver.HRegionServer - Finished post open deploy task for 
> hbase:namespace,1626899414773.52693312958f1f507eff84ef336f1250.
> {code}
> Similar to namespace, even other user or system table regions that are hosted 
> on the same server as meta have also encountered inconsistent state updates 
> specifically when meta region moves around and active master is also 
> restarted around the same time. And once active master comes online, we have 
> to fix such inconsistencies with hbck.
> On the other hand, there have been some enhancement around not requiring meta 
> region's colocation with active master as part of ZK-less region assignment, 
> e.g HBASE-11610
> We have not yet enabled ZK-less region assignment entirely, only migration 
> config is enabled i.e. hbase.assignment.usezk.migrating. With this, we expect 
> active master to perform an additional write to meta table for the updated 
> region state (in addition to updating RIT map in the memory of RegionStates). 
> We have seen some hanging state here as well if meta region is going through 
> some transition (not available) and other non-meta regions are also moved by 
> the region mover simultaneously, and active master cannot complete meta 
> update, which further delays intermediate state transition based ZK watcher 
> updates.
> {code:java}
> client.AsyncProcess - #3, waiting for 1  actions to finish on table: 
> hbase:meta
> {code}
> If we take a step back, and think about these issues, all issues are 
> associated with graceful start/stop of regionservers. Region mover will try 
> to move all regions of the given server in parallel using user configurable 
> thread pool and hence it gives no preference to meta.
> On the other hand, after trying to reproduce this inconsistent region state 
> behaviour with non-graceful start/stop, I have realized that we don't face 
> such issues because ServerCrashProcedure (SCP) always prioritize meta 
> region's availability over any other regions if the server being processed by 
> the SCP was hosting the meta region. This is exactly what region_mover should 
> also provide. Given that every non-meta region's location is stored in meta 
> table, meta region must always be moved first and only after it comes online, 
> can other regions be allowed to be moved in parallel using the configured 
> thread pool.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to