hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sean Busbey (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-12329) Table create with duplicate column family names quietly succeeds
Date Tue, 28 Oct 2014 12:15:34 GMT

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

Sean Busbey commented on HBASE-12329:
-------------------------------------

  - org.apache.hadoop.hbase.client.UnmodifyableHTableDescriptor needs to be updated to add
the new method.
  - needs unit tests that verify expected behavior for the update method and handling of duplicate
addFamily calls
  - either update the API example in the ref guide (currently Example 10.2) to show "update
an existing CF" or file a follow on ticket that such docs are needed

{code}
   /**
    * Adds a column family.
+   * If multiple families with the same name are added, only the last one will be saved.
+   * For the updating purpose please use {@link #updateFamily(HColumnDescriptor)} instead.
    * @param family HColumnDescriptor of family to add.
    */
   public HTableDescriptor addFamily(final HColumnDescriptor family) {
{code}

Since the initial patch targets master, instead of having the "last one wins" warning have
the method throw on duplicates. We'll leave a note here on the jira for the committer to replace
that behavior on backport with a warning about last one wins and the throwing in a future
version.

{code}
+   * Updates the existing column family.
+   * @param family HColumnDescriptor of family to update
+   * @return this (for chained invocation)
+   */
+  public HTableDescriptor updateFamily(final HColumnDescriptor family) {
{code}

Consider naming the method {{modifyFamily}} to match o.a.h.h.client.Admin.modifyColumn

{code}
+    if (family.getName() == null || family.getName().length <= 0) {
+      throw new NullPointerException("Family name cannot be null or empty");
+    }
+
{code}

when the string is empty, throw an IllegalArgumentException.

{code}
+          # Warn if duplicate columns are added
+          if htd.hasFamily(descriptor.getName)
+            puts "Family '" + descriptor.getNameAsString() + "' already exists, the old one
will be replaced"
+          end
+          htd.addFamily(descriptor)
{code}

Use htd the way we are updating the API to suggest people use it: use updateFamily after warning,
only use addFamily when it won't be an update.


> Table create with duplicate column family names quietly succeeds
> ----------------------------------------------------------------
>
>                 Key: HBASE-12329
>                 URL: https://issues.apache.org/jira/browse/HBASE-12329
>             Project: HBase
>          Issue Type: Bug
>          Components: Client, shell
>            Reporter: Sean Busbey
>            Assignee: Jingcheng Du
>            Priority: Minor
>         Attachments: HBASE-12329.diff
>
>
> From the mailing list
> {quote}
> I was expecting that it is forbidden, **but** this call does not throw any
> exception
> {code}
>         String[] families = {"cf", "cf"};
>         HTableDescriptor desc = new HTableDescriptor(name);
>         for (String cf : families) {
>           HColumnDescriptor coldef = new HColumnDescriptor(cf);
>           desc.addFamily(coldef);
>         }
>         try {
>             admin.createTable(desc);
>         } catch (TableExistsException e) {
>             throw new IOException("table \'" + name + "\' already exists");
>         }
> {code}
> {quote}
> And Ted's follow up replicates in the shell
> {code}
> hbase(main):001:0> create 't2', {NAME => 'f1'}, {NAME => 'f1'}
> The table got created - with 1 column family:
> hbase(main):002:0> describe 't2'
> DESCRIPTION
>                        ENABLED
>  't2', {NAME => 'f1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW',
> REPLICATION_SCOPE => '0 true
>  ', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL =>
> '2147483647', KEEP_DELETED
>  _CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE
> => 'true'}
> 1 row(s) in 0.1000 seconds
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message