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.rest;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.hadoop.hbase.KeyValue;
25 import org.apache.hadoop.hbase.rest.ResourceBase;
26 import org.apache.hadoop.hbase.rest.RowSpec;
27 import org.apache.hadoop.hbase.rest.TableResource;
28 import org.apache.hadoop.hbase.rest.model.CellModel;
29 import org.apache.hadoop.hbase.rest.model.CellSetModel;
30 import org.apache.hadoop.hbase.rest.model.RowModel;
31 import org.apache.hadoop.hbase.rest.transform.Transform;
32
33 import javax.ws.rs.GET;
34 import javax.ws.rs.Produces;
35 import javax.ws.rs.WebApplicationException;
36 import javax.ws.rs.core.Context;
37 import javax.ws.rs.core.MultivaluedMap;
38 import javax.ws.rs.core.Response;
39 import javax.ws.rs.core.UriInfo;
40 import java.io.IOException;
41 import java.util.ArrayList;
42
43 public class MultiRowResource extends ResourceBase {
44 private static final Log LOG = LogFactory.getLog(MultiRowResource.class);
45 public static final String ROW_KEYS_PARAM_NAME = "row";
46
47 TableResource tableResource;
48 Integer versions = null;
49
50
51
52
53
54
55
56
57 public MultiRowResource(TableResource tableResource, String versions) throws IOException {
58 super();
59 this.tableResource = tableResource;
60
61 if (versions != null) {
62 this.versions = Integer.valueOf(versions);
63
64 }
65 }
66
67 @GET
68 @Produces({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
69 public Response get(final @Context UriInfo uriInfo) {
70 MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
71
72 servlet.getMetrics().incrementRequests(1);
73 try {
74 CellSetModel model = new CellSetModel();
75 for (String rk : params.get(ROW_KEYS_PARAM_NAME)) {
76 RowSpec rowSpec = new RowSpec(rk);
77
78 if (this.versions != null) {
79 rowSpec.setMaxVersions(this.versions);
80 }
81
82 ResultGenerator generator = ResultGenerator.fromRowSpec(this.tableResource.getName(), rowSpec, null);
83 if (!generator.hasNext()) {
84 throw new WebApplicationException(Response.Status.NOT_FOUND);
85 }
86
87 KeyValue value = null;
88 RowModel rowModel = new RowModel(rk);
89
90
91 while ((value = generator.next()) != null) {
92 byte[] family = value.getFamily();
93 byte[] qualifier = value.getQualifier();
94 byte[] data = tableResource.transform(family, qualifier, value.getValue(), Transform.Direction.OUT);
95 rowModel.addCell(new CellModel(family, qualifier, value.getTimestamp(), data));
96 }
97
98 model.addRow(rowModel);
99 }
100 return Response.ok(model).build();
101 } catch (IOException e) {
102 throw new WebApplicationException(e,
103 Response.Status.SERVICE_UNAVAILABLE);
104 }
105
106 }
107 }