1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.master.handler;
20
21 import java.io.IOException;
22 import java.util.List;
23
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.TableName;
26 import org.apache.hadoop.hbase.HColumnDescriptor;
27 import org.apache.hadoop.hbase.HRegionInfo;
28 import org.apache.hadoop.hbase.HTableDescriptor;
29 import org.apache.hadoop.hbase.InvalidFamilyOperationException;
30 import org.apache.hadoop.hbase.Server;
31 import org.apache.hadoop.hbase.executor.EventType;
32 import org.apache.hadoop.hbase.master.HMaster;
33 import org.apache.hadoop.hbase.master.MasterCoprocessorHost;
34 import org.apache.hadoop.hbase.master.MasterServices;
35
36
37
38
39 @InterfaceAudience.Private
40 public class TableAddFamilyHandler extends TableEventHandler {
41
42 private final HColumnDescriptor familyDesc;
43
44 public TableAddFamilyHandler(TableName tableName, HColumnDescriptor familyDesc,
45 Server server, final MasterServices masterServices) {
46 super(EventType.C_M_ADD_FAMILY, tableName, server, masterServices);
47 this.familyDesc = familyDesc;
48 }
49
50 @Override
51 protected void prepareWithTableLock() throws IOException {
52 super.prepareWithTableLock();
53 HTableDescriptor htd = getTableDescriptor();
54 if (htd.hasFamily(familyDesc.getName())) {
55 throw new InvalidFamilyOperationException("Family '" +
56 familyDesc.getNameAsString() + "' already exists so cannot be added");
57 }
58 }
59
60 @Override
61 protected void handleTableOperation(List<HRegionInfo> hris)
62 throws IOException {
63 MasterCoprocessorHost cpHost = ((HMaster) this.server)
64 .getMasterCoprocessorHost();
65 if(cpHost != null){
66 cpHost.preAddColumnHandler(this.tableName, this.familyDesc);
67 }
68
69 this.masterServices.getMasterFileSystem().addColumn(tableName, familyDesc);
70 if(cpHost != null){
71 cpHost.postAddColumnHandler(this.tableName, this.familyDesc);
72 }
73 }
74
75 @Override
76 public String toString() {
77 String name = "UnknownServerName";
78 if(server != null && server.getServerName() != null) {
79 name = server.getServerName().toString();
80 }
81 String family = "UnknownFamily";
82 if(familyDesc != null) {
83 family = familyDesc.getNameAsString();
84 }
85 return getClass().getSimpleName() + "-" + name + "-" +
86 getSeqid() + "-" + tableName + "-" + family;
87 }
88
89 }