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.HColumnDescriptor;
26 import org.apache.hadoop.hbase.HRegionInfo;
27 import org.apache.hadoop.hbase.HTableDescriptor;
28 import org.apache.hadoop.hbase.InvalidFamilyOperationException;
29 import org.apache.hadoop.hbase.Server;
30 import org.apache.hadoop.hbase.catalog.MetaEditor;
31 import org.apache.hadoop.hbase.master.MasterServices;
32 import org.apache.hadoop.hbase.util.Bytes;
33
34
35
36
37 public class TableModifyFamilyHandler extends TableEventHandler {
38
39 private final HColumnDescriptor familyDesc;
40
41 public TableModifyFamilyHandler(byte[] tableName,
42 HColumnDescriptor familyDesc, Server server,
43 final MasterServices masterServices) throws IOException {
44 super(EventType.C_M_MODIFY_FAMILY, tableName, server, masterServices);
45 this.familyDesc = familyDesc;
46 }
47
48 @Override
49 protected void handleTableOperation(List<HRegionInfo> regions) throws IOException {
50 HTableDescriptor htd = regions.get(0).getTableDesc();
51 byte [] familyName = familyDesc.getName();
52 if(!htd.hasFamily(familyName)) {
53 throw new InvalidFamilyOperationException("Family '" +
54 Bytes.toString(familyName) + "' doesn't exists so cannot be modified");
55 }
56 for(HRegionInfo hri : regions) {
57
58 hri.getTableDesc().addFamily(familyDesc);
59
60 MetaEditor.updateRegionInfo(this.server.getCatalogTracker(), hri);
61
62 this.masterServices.getMasterFileSystem().updateRegionInfo(hri);
63 }
64 }
65 }