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.master.MasterServices;
31
32
33
34
35 public class TableAddFamilyHandler extends TableEventHandler {
36
37 private final HColumnDescriptor familyDesc;
38
39 public TableAddFamilyHandler(byte[] tableName, HColumnDescriptor familyDesc,
40 Server server, final MasterServices masterServices) throws IOException {
41 super(EventType.C_M_ADD_FAMILY, tableName, server, masterServices);
42 HTableDescriptor htd = getTableDescriptor();
43 if (htd.hasFamily(familyDesc.getName())) {
44 throw new InvalidFamilyOperationException("Family '" +
45 familyDesc.getNameAsString() + "' already exists so cannot be added");
46 }
47 this.familyDesc = familyDesc;
48 }
49
50 @Override
51 protected void handleTableOperation(List<HRegionInfo> hris)
52 throws IOException {
53
54 HTableDescriptor htd = this.masterServices.getMasterFileSystem()
55 .addColumn(tableName, familyDesc);
56
57 this.masterServices.getTableDescriptors().add(htd);
58 }
59 @Override
60 public String toString() {
61 String name = "UnknownServerName";
62 if(server != null && server.getServerName() != null) {
63 name = server.getServerName().toString();
64 }
65 String family = "UnknownFamily";
66 if(familyDesc != null) {
67 family = familyDesc.getNameAsString();
68 }
69 return getClass().getSimpleName() + "-" + name + "-" +
70 getSeqid() + "-" + tableNameStr + "-" + family;
71 }
72
73 }