1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.master.handler;
21
22 import java.io.IOException;
23 import java.util.List;
24
25 import org.apache.hadoop.hbase.HRegionInfo;
26 import org.apache.hadoop.hbase.HTableDescriptor;
27 import org.apache.hadoop.hbase.InvalidFamilyOperationException;
28 import org.apache.hadoop.hbase.Server;
29 import org.apache.hadoop.hbase.catalog.MetaEditor;
30 import org.apache.hadoop.hbase.master.MasterFileSystem;
31 import org.apache.hadoop.hbase.master.MasterServices;
32 import org.apache.hadoop.hbase.util.Bytes;
33
34
35
36
37 public class TableDeleteFamilyHandler extends TableEventHandler {
38
39 private final byte [] familyName;
40
41 public TableDeleteFamilyHandler(byte[] tableName, byte [] familyName,
42 Server server, final MasterServices masterServices) throws IOException {
43 super(EventType.C_M_ADD_FAMILY, tableName, server, masterServices);
44 this.familyName = familyName;
45 }
46
47 @Override
48 protected void handleTableOperation(List<HRegionInfo> hris) throws IOException {
49 HTableDescriptor htd = hris.get(0).getTableDesc();
50 if(!htd.hasFamily(familyName)) {
51 throw new InvalidFamilyOperationException(
52 "Family '" + Bytes.toString(familyName) + "' does not exist so " +
53 "cannot be deleted");
54 }
55 for (HRegionInfo hri : hris) {
56
57 hri.getTableDesc().removeFamily(familyName);
58
59 MetaEditor.updateRegionInfo(this.server.getCatalogTracker(), hri);
60 MasterFileSystem mfs = this.masterServices.getMasterFileSystem();
61
62 mfs.updateRegionInfo(hri);
63
64 mfs.deleteFamily(hri, familyName);
65
66 this.masterServices.getMasterFileSystem().updateRegionInfo(hri);
67 }
68 }
69 }