1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.rest;
22
23 import java.io.IOException;
24 import java.net.InetSocketAddress;
25 import java.util.Map;
26
27 import javax.ws.rs.GET;
28 import javax.ws.rs.Produces;
29 import javax.ws.rs.WebApplicationException;
30 import javax.ws.rs.core.CacheControl;
31 import javax.ws.rs.core.Context;
32 import javax.ws.rs.core.Response;
33 import javax.ws.rs.core.UriInfo;
34 import javax.ws.rs.core.Response.ResponseBuilder;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38
39 import org.apache.hadoop.hbase.HRegionInfo;
40 import org.apache.hadoop.hbase.HServerAddress;
41 import org.apache.hadoop.hbase.TableNotFoundException;
42 import org.apache.hadoop.hbase.client.HTable;
43 import org.apache.hadoop.hbase.client.HTableInterface;
44 import org.apache.hadoop.hbase.client.HTablePool;
45 import org.apache.hadoop.hbase.rest.model.TableInfoModel;
46 import org.apache.hadoop.hbase.rest.model.TableRegionModel;
47
48 public class RegionsResource extends ResourceBase {
49 private static final Log LOG = LogFactory.getLog(RegionsResource.class);
50
51 static CacheControl cacheControl;
52 static {
53 cacheControl = new CacheControl();
54 cacheControl.setNoCache(true);
55 cacheControl.setNoTransform(false);
56 }
57
58 String tableName;
59
60 public RegionsResource(String table) throws IOException {
61 super();
62 this.tableName = table;
63 }
64
65 private Map<HRegionInfo,HServerAddress> getTableRegions()
66 throws IOException {
67 HTablePool pool = servlet.getTablePool();
68 HTableInterface table = pool.getTable(tableName);
69 try {
70 return ((HTable)table).getRegionsInfo();
71 } finally {
72 pool.putTable(table);
73 }
74 }
75
76 @GET
77 @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
78 public Response get(final @Context UriInfo uriInfo) {
79 if (LOG.isDebugEnabled()) {
80 LOG.debug("GET " + uriInfo.getAbsolutePath());
81 }
82 servlet.getMetrics().incrementRequests(1);
83 try {
84 TableInfoModel model = new TableInfoModel(tableName);
85 Map<HRegionInfo,HServerAddress> regions = getTableRegions();
86 for (Map.Entry<HRegionInfo,HServerAddress> e: regions.entrySet()) {
87 HRegionInfo hri = e.getKey();
88 HServerAddress addr = e.getValue();
89 InetSocketAddress sa = addr.getInetSocketAddress();
90 model.add(
91 new TableRegionModel(tableName, hri.getRegionId(),
92 hri.getStartKey(), hri.getEndKey(),
93 sa.getHostName() + ":" + Integer.valueOf(sa.getPort())));
94 }
95 ResponseBuilder response = Response.ok(model);
96 response.cacheControl(cacheControl);
97 return response.build();
98 } catch (TableNotFoundException e) {
99 throw new WebApplicationException(Response.Status.NOT_FOUND);
100 } catch (IOException e) {
101 throw new WebApplicationException(e,
102 Response.Status.SERVICE_UNAVAILABLE);
103 }
104 }
105 }