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 TableAddFamilyHandler extends TableEventHandler {
38
39 private final HColumnDescriptor familyDesc;
40
41 public TableAddFamilyHandler(byte[] tableName, HColumnDescriptor familyDesc,
42 Server server, final MasterServices masterServices) throws IOException {
43 super(EventType.C_M_ADD_FAMILY, tableName, server, masterServices);
44 this.familyDesc = familyDesc;
45 }
46
47 @Override
48 protected void handleTableOperation(List<HRegionInfo> hris)
49 throws IOException {
50 HTableDescriptor htd = hris.get(0).getTableDesc();
51 byte [] familyName = familyDesc.getName();
52 if(htd.hasFamily(familyName)) {
53 throw new InvalidFamilyOperationException(
54 "Family '" + Bytes.toString(familyName) + "' already exists so " +
55 "cannot be added");
56 }
57 for(HRegionInfo hri : hris) {
58
59 hri.getTableDesc().addFamily(familyDesc);
60
61 MetaEditor.updateRegionInfo(this.server.getCatalogTracker(), hri);
62
63 this.masterServices.getMasterFileSystem().updateRegionInfo(hri);
64 }
65 }
66 }