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

Matteo Bertozzi commented on HBASE-16935:
-----------------------------------------

from the code we actually remove the family dirs in both cases (table enabled 
or disabled). but since we reopen the regions after deleting the family folders 
we end up with the flushed on-close file in the deleted family.
so, all the files in the family except the flush on-close one will be removed.

basically the simplified order of operation we have (since 0.94 or even before) 
is:
 - change the htd
 - drop the family folder
 - re-open regions (close region will trigger a flush of the family)

we should probably flip the order, so we reopen with the new htd and then we 
remove the dirs.

> Java API method Admin.deleteColumn(table, columnFamily) doesn't delete 
> family's StoreFile from file system.
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-16935
>                 URL: https://issues.apache.org/jira/browse/HBASE-16935
>             Project: HBase
>          Issue Type: New Feature
>          Components: Admin
>    Affects Versions: 1.2.3
>            Reporter: Mikhail Zvagelsky
>         Attachments: Selection_008.png
>
>
> The method deleteColumn(TableName tableName, byte[] columnName) of the class 
> org.apache.hadoop.hbase.client.Admin shoud delete specified column family 
> from specified table. (Despite of its name the method removes the family, not 
> a column - view the [issue| 
> https://issues.apache.org/jira/browse/HBASE-1989].)
> This method changes the table's schema, but it doesn't delete column family's 
> Store File from a file system. To be precise - I run this code:
> {code:|borderStyle=solid}
> import java.io.IOException;
> import org.apache.hadoop.conf.Configuration;
> import org.apache.hadoop.hbase.HBaseConfiguration;
> import org.apache.hadoop.hbase.HColumnDescriptor;
> import org.apache.hadoop.hbase.HTableDescriptor;
> import org.apache.hadoop.hbase.TableName;
> import org.apache.hadoop.hbase.client.*;
> import org.apache.hadoop.hbase.util.Bytes;
> public class ToHBaseIssueTracker {
>     public static void main(String[] args) throws IOException {
>         TableName tableName = TableName.valueOf("test_table");
>         HTableDescriptor desc = new HTableDescriptor(tableName);
>         desc.addFamily(new HColumnDescriptor("cf1"));
>         desc.addFamily(new HColumnDescriptor("cf2"));
>         Configuration conf = HBaseConfiguration.create();
>         Connection connection = ConnectionFactory.createConnection(conf);
>         Admin admin = connection.getAdmin();
>         admin.createTable(desc);
>         HTable table = new HTable(conf, "test_table");
>         for (int i = 0; i < 4; i++) {
>             Put put = new Put(Bytes.toBytes(i)); // Use i as row key.
>             put.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("a"), 
> Bytes.toBytes("value"));
>             put.addColumn(Bytes.toBytes("cf2"), Bytes.toBytes("a"), 
> Bytes.toBytes("value"));
>             table.put(put);
>         }
>         admin.deleteColumn(tableName, Bytes.toBytes("cf2"));
>         admin.majorCompact(tableName);
>         admin.close();
>     }
> }
> {code}
> Then I see that the store file for the "cf2" family persists in file system.
> I observe this effect in standalone hbase installation and in 
> pseudo-distributed mode.



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

Reply via email to