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.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.hadoop.hbase.HRegionInfo;
28 import org.apache.hadoop.hbase.Server;
29 import org.apache.hadoop.hbase.catalog.MetaEditor;
30 import org.apache.hadoop.hbase.master.AssignmentManager;
31 import org.apache.hadoop.hbase.master.MasterServices;
32 import org.apache.hadoop.hbase.util.Bytes;
33 import org.apache.hadoop.hbase.util.Threads;
34 import org.apache.zookeeper.KeeperException;
35
36 public class DeleteTableHandler extends TableEventHandler {
37 private static final Log LOG = LogFactory.getLog(DeleteTableHandler.class);
38
39 public DeleteTableHandler(byte [] tableName, Server server,
40 final MasterServices masterServices)
41 throws IOException {
42 super(EventType.C_M_DELETE_TABLE, tableName, server, masterServices);
43 }
44
45 @Override
46 protected void handleTableOperation(List<HRegionInfo> regions)
47 throws IOException, KeeperException {
48 AssignmentManager am = this.masterServices.getAssignmentManager();
49 long waitTime = server.getConfiguration().
50 getLong("hbase.master.wait.on.region", 5 * 60 * 1000);
51 for (HRegionInfo region : regions) {
52 long done = System.currentTimeMillis() + waitTime;
53 while (System.currentTimeMillis() < done) {
54 AssignmentManager.RegionState rs = am.isRegionInTransition(region);
55 if (rs == null) break;
56 Threads.sleep(waitingTimeForEvents);
57 LOG.debug("Waiting on region to clear regions in transition; " + rs);
58 }
59 if (am.isRegionInTransition(region) != null) {
60 throw new IOException("Waited hbase.master.wait.on.region (" +
61 waitTime + "ms) for region to leave region " +
62 region.getRegionNameAsString() + " in transitions");
63 }
64 LOG.debug("Deleting region " + region.getRegionNameAsString() +
65 " from META and FS");
66
67 MetaEditor.deleteRegion(this.server.getCatalogTracker(), region);
68
69 this.masterServices.getMasterFileSystem().deleteRegion(region);
70 }
71
72 this.masterServices.getMasterFileSystem().deleteTable(tableName);
73
74
75
76 am.getZKTable().setEnabledTable(Bytes.toString(tableName));
77 }
78 }