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

Zhihong Ted Yu commented on HBASE-6576:
---------------------------------------

Integrated to 0.92 and 0.94 as well.

Thanks for the reminder, Lars.
                
> HBaseAdmin.createTable should wait until the table is enabled
> -------------------------------------------------------------
>
>                 Key: HBASE-6576
>                 URL: https://issues.apache.org/jira/browse/HBASE-6576
>             Project: HBase
>          Issue Type: Bug
>          Components: client, test
>            Reporter: Gregory Chanan
>            Assignee: Gregory Chanan
>             Fix For: 0.92.2, 0.96.0, 0.94.2
>
>         Attachments: HBASE-6576-92.patch, HBASE-6576-94.patch, 
> HBASE-6576-trunk.patch
>
>
> The function:
> {code}
> public void createTable(final HTableDescriptor desc, byte [][] splitKeys)
> {code}
> in HBaseAdmin is synchronous and returns once all the regions of the table 
> are online, but does not wait for the table to be enabled, which is the last 
> step of table creation (see CreateTableHandler).
> This is confusing and leads to racy code because users do not realize that 
> this is the case.  For example, I saw the following test failure in 0.92 when 
> I ran:
> mvn test 
> -Dtest=org.apache.hadoop.hbase.client.TestAdmin#testEnableDisableAddColumnDeleteColumn
>  
> {code}
> Error Message
> org.apache.hadoop.hbase.TableNotEnabledException: testMasterAdmin at 
> org.apache.hadoop.hbase.master.handler.DisableTableHandler.<init>(DisableTableHandler.java:75)
>  at org.apache.hadoop.hbase.master.HMaster.disableTable(HMaster.java:1154) at 
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>  at java.lang.reflect.Method.invoke(Method.java:597) at 
> org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:364)
>  at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1336)
> Stacktrace
> org.apache.hadoop.hbase.TableNotEnabledException: 
> org.apache.hadoop.hbase.TableNotEnabledException: testMasterAdmin
> at 
> org.apache.hadoop.hbase.master.handler.DisableTableHandler.<init>(DisableTableHandler.java:75)
> at org.apache.hadoop.hbase.master.HMaster.disableTable(HMaster.java:1154)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at 
> org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:364)
> at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1336)
> {code}
> The issue is that code will create and table and immediately disable it in 
> order to do some testing, for example, to test an operation that only works 
> when the table is disabled.  If the table has not been enabled yet, they will 
> get back a TableNotEnabledException.
> The specific test above was fixed in HBASE-5206, but other examples exist in 
> the code, for example the following:
> {code}
> hbase org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat newtable asdf14
> {code}
> The code in question is:
> {code}
> byte[] tname = args[1].getBytes();
> HTable table = util.createTable(tname, FAMILIES);
> HBaseAdmin admin = new HBaseAdmin(conf);
> admin.disableTable(tname);
> {code}
> It would be better if createTable just waited until the table was enabled, or 
> threw a TableNotEnabledException if it exhausted the configured number of 
> retries.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to