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.classification.InterfaceAudience;
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.exceptions.InvalidFamilyOperationException;
29 import org.apache.hadoop.hbase.Server;
30 import org.apache.hadoop.hbase.executor.EventType;
31 import org.apache.hadoop.hbase.master.HMaster;
32 import org.apache.hadoop.hbase.master.MasterCoprocessorHost;
33 import org.apache.hadoop.hbase.master.MasterServices;
34
35
36
37
38 @InterfaceAudience.Private
39 public class TableAddFamilyHandler extends TableEventHandler {
40
41 private final HColumnDescriptor familyDesc;
42
43 public TableAddFamilyHandler(byte[] tableName, HColumnDescriptor familyDesc,
44 Server server, final MasterServices masterServices) {
45 super(EventType.C_M_ADD_FAMILY, tableName, server, masterServices);
46 this.familyDesc = familyDesc;
47 }
48
49 @Override
50 protected void prepareWithTableLock() throws IOException {
51 super.prepareWithTableLock();
52 HTableDescriptor htd = getTableDescriptor();
53 if (htd.hasFamily(familyDesc.getName())) {
54 throw new InvalidFamilyOperationException("Family '" +
55 familyDesc.getNameAsString() + "' already exists so cannot be added");
56 }
57 }
58
59 @Override
60 protected void handleTableOperation(List<HRegionInfo> hris)
61 throws IOException {
62 MasterCoprocessorHost cpHost = ((HMaster) this.server)
63 .getCoprocessorHost();
64 if(cpHost != null){
65 cpHost.preAddColumnHandler(this.tableName, this.familyDesc);
66 }
67
68 this.masterServices.getMasterFileSystem().addColumn(tableName, familyDesc);
69 if(cpHost != null){
70 cpHost.postAddColumnHandler(this.tableName, this.familyDesc);
71 }
72 }
73
74 @Override
75 public String toString() {
76 String name = "UnknownServerName";
77 if(server != null && server.getServerName() != null) {
78 name = server.getServerName().toString();
79 }
80 String family = "UnknownFamily";
81 if(familyDesc != null) {
82 family = familyDesc.getNameAsString();
83 }
84 return getClass().getSimpleName() + "-" + name + "-" +
85 getSeqid() + "-" + tableNameStr + "-" + family;
86 }
87
88 }