[
https://issues.apache.org/jira/browse/HBASE-7278?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hiroshi Ikeda updated HBASE-7278:
---------------------------------
Description:
There are some bugs of the class HTableDescriptor.
{code}
public HTableDescriptor(final byte [] name) {
super();
setMetaFlags(this.name);
this.name = this.isMetaRegion()? name: isLegalTableName(name);
this.nameAsString = Bytes.toString(this.name);
}
{code}
I think "setMetaFlags(this.name)" should be "setMetaFlags(name)".
{code}
/**
* Check passed byte buffer, "tableName", is legal user-space table name.
* @return Returns passed <code>tableName</code> param
* @throws NullPointerException If passed <code>tableName</code> is null
* @throws IllegalArgumentException if passed a tableName
* that is made of other than 'word' characters or underscores: i.e.
* <code>[a-zA-Z_0-9].
*/
public static byte [] isLegalTableName(final byte [] tableName) {
if (tableName == null || tableName.length <= 0) {
throw new IllegalArgumentException("Name is null or empty");
}
{code}
The implementation is against the contract of throwing NullPointerException.
I'm not sure the contract is wrong or the implementation is wrong.
Also the contract of throwing IllegalArgumentException is a little different
from the actual implementation, and in general we must actually call this
method and catch IllegalArgumentException in order to know whether the given
name can be used as a table name.
I feel HTableDescriptor allows itself to be in invalid states, and I cannot fix
the class well.
I think we should start to remove implementing WritableComparable, but it might
greatly break the compatibility.
> Some bugs of HTableDesciptor
> ----------------------------
>
> Key: HBASE-7278
> URL: https://issues.apache.org/jira/browse/HBASE-7278
> Project: HBase
> Issue Type: Bug
> Reporter: Hiroshi Ikeda
> Priority: Minor
>
> There are some bugs of the class HTableDescriptor.
> {code}
> public HTableDescriptor(final byte [] name) {
> super();
> setMetaFlags(this.name);
> this.name = this.isMetaRegion()? name: isLegalTableName(name);
> this.nameAsString = Bytes.toString(this.name);
> }
> {code}
> I think "setMetaFlags(this.name)" should be "setMetaFlags(name)".
> {code}
> /**
> * Check passed byte buffer, "tableName", is legal user-space table name.
> * @return Returns passed <code>tableName</code> param
> * @throws NullPointerException If passed <code>tableName</code> is null
> * @throws IllegalArgumentException if passed a tableName
> * that is made of other than 'word' characters or underscores: i.e.
> * <code>[a-zA-Z_0-9].
> */
> public static byte [] isLegalTableName(final byte [] tableName) {
> if (tableName == null || tableName.length <= 0) {
> throw new IllegalArgumentException("Name is null or empty");
> }
> {code}
> The implementation is against the contract of throwing NullPointerException.
> I'm not sure the contract is wrong or the implementation is wrong.
> Also the contract of throwing IllegalArgumentException is a little different
> from the actual implementation, and in general we must actually call this
> method and catch IllegalArgumentException in order to know whether the given
> name can be used as a table name.
> I feel HTableDescriptor allows itself to be in invalid states, and I cannot
> fix the class well.
> I think we should start to remove implementing WritableComparable, but it
> might greatly break the compatibility.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira