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

Nihal Jain commented on HBASE-20566:
------------------------------------

Hi all, I will try to answer as much as I can.
{quote} Will the change handle the scenario where {{hbase}}namespace is 
assigned to a non {{default}} namespace by the user before enabling {{Quota}}? 
Or the requirement/assumption is that {{hbase}} namespace should be in 
{{default}} namespace.
{quote}
[~gsbiju] This change should not impact the above mentioned scenario. I will 
try to explain shortly.
{quote}does this affect 2.0 as well? should we apply the patch to older 
branches?
{quote}
[~mdrob] Yes 2.0 also has the same problem. I have tested locally.
{quote}Does this affect the branch-1 port of RSgroups too?
{quote}
[~apurtell] Since the refresh() logic is same, I think yes.
{quote}Ain't it odd having rsgroup keeping a running group of 'special' tables?
{quote}
[~stack] Based on my understanding, I will try to answer what does special 
tables mean. Let me first explain what refresh() method will do when a user 
starts hbase with rs-groups for the first time i.e. none of the tables belong 
to any rs-group:
 * {{RSGroupAdminEndpoint}} calls {{start()}} which creates a new 
{{groupInfoManager}} instance
 ** The {{getInsatnce()}} will call {{init()}} method
 *** {{init}} calls {{refresh()}}
 **** {{refresh()}} calls {{refresh(false)}} which refreshes group information
 * 
{code:java}
groupInfoManager = RSGroupInfoManagerImpl.getInstance(master);
--> instance.init();
----> refresh();
------> refresh(false);{code}

Now {{refresh()}} method refreshes/reloads group information of all tables from 
the persistent storage (doc says this) i.e.
 * refresh all-table group info from zk/rs-group table (if available)
 * create a list of orphan tables which will ultimately contain tables which 
are not assigned to any rs-group (first run?)
 ** add all tables whose descriptors are available in fs to orphan table
 ** add all "special tables" to special table list
 ** remove all tables which have some rs-group from orphan list ([~gsbiju] yes 
it should handle it here)
 * update rs-group of final orphan table list to be default

So what are these special tables?
 * from what I understand, special tables are those tables which may not have 
been created until the current start-up of cluster (whose creation is in 
progress?), so might not be found in descriptors from fs ("hbase:quota"?)
 * As these tables must be loaded with priority, they have been handled in this 
way (i.e. if first run, they get assigned to default rs-group, so that 
{{CreateTableProcedure}} doesn't hang), which seems a bad way of doing (what if 
some new co-processor tries to create a new system table at startup => 
assignment hangs as no rs-group for this table; not handled as special table)

I think we need to figure out how to handle "{{specialTables"}} in a more 
generic manner.

 

(NOTE: I am new here, correct me wherever I am wrong :P)

> Creating a system table after enabling rsgroup feature puts region into RIT
> ---------------------------------------------------------------------------
>
>                 Key: HBASE-20566
>                 URL: https://issues.apache.org/jira/browse/HBASE-20566
>             Project: HBase
>          Issue Type: Bug
>          Components: master
>            Reporter: Biju Nair
>            Assignee: Nihal Jain
>            Priority: Major
>             Fix For: 3.0.0
>
>         Attachments: HBASE-20566.master.001.patch, 
> HBASE-20566.master.002.patch
>
>
> *Steps to reproduce*
>  - Enable {{rsgroup}} feature
>  - Enable {{quota}} feature which created {{hbase::quota}} table
>  - quota table region will be marked as RIT since the {{rsgroup}} for the 
> table is not known
> {noformat}
> 2018-05-10 14:33:32,392 INFO  [ProcedureExecutorThread-0] 
> zookeeper.ZKTableStateManager: Moving table hbase:quota state from null to 
> ENABLING
> 2018-05-10 14:33:32,397 WARN  [ProcedureExecutorThread-0] 
> rsgroup.RSGroupBasedLoadBalancer: Group for table hbase:quota is null
> 2018-05-10 14:33:32,398 WARN  [ProcedureExecutorThread-0] 
> master.RegionStates: Failed to open/close 89490cd5e00ea8948af413a1df65091a on 
> null, set to FAILED_OPEN
> 2018-05-10 14:33:32,398 INFO  [ProcedureExecutorThread-0] 
> master.RegionStates: Transition {89490cd5e00ea8948af413a1df65091a 
> state=OFFLINE, ts=1525977212397, server=null} to 
> {89490cd5e00ea8948af413a1df65091a state=FAILED_OPEN, ts=1525977212398, 
> server=null}
> 2018-05-10 14:33:32,398 INFO  [ProcedureExecutorThread-0] 
> zookeeper.ZKTableStateManager: Moving table hbase:quota state from ENABLING 
> to ENABLED
> {noformat}
>  - Reason for this issue: Issue
>  - [system table 
> creation|https://github.com/apache/hbase/blob/061a31fad1654d9ded96d118e04c14860413fa25/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java#L1793]
>  doesn't move the table to the appropriate rs group to which system namespace 
> is assigned to. Need to execute logic similar to what is done in the 
> RSGroupAdminEndpoint for [post table creation|#L377] for user table creation.
> *Work Around*
>   - Assigning the system table to ``default`` rsgroup (or to the rsgroup to 
> which the system namespace has been assigned).
>   - Manually assigning the region in RIT from the system table
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to