Adding the files missing from HBASE-3541
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1085217 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5f69f20011
commit
4ee3ceefe4
|
@ -0,0 +1,88 @@
|
|||
package org.apache.hadoop.hbase.rest;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hadoop.hbase.KeyValue;
|
||||
import org.apache.hadoop.hbase.rest.ResourceBase;
|
||||
import org.apache.hadoop.hbase.rest.RowSpec;
|
||||
import org.apache.hadoop.hbase.rest.TableResource;
|
||||
import org.apache.hadoop.hbase.rest.model.CellModel;
|
||||
import org.apache.hadoop.hbase.rest.model.CellSetModel;
|
||||
import org.apache.hadoop.hbase.rest.model.RowModel;
|
||||
import org.apache.hadoop.hbase.rest.transform.Transform;
|
||||
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class MultiRowResource extends ResourceBase {
|
||||
private static final Log LOG = LogFactory.getLog(MultiRowResource.class);
|
||||
public static final String ROW_KEYS_PARAM_NAME = "row";
|
||||
|
||||
TableResource tableResource;
|
||||
Integer versions = null;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param tableResource
|
||||
* @param versions
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public MultiRowResource(TableResource tableResource, String versions) throws IOException {
|
||||
super();
|
||||
this.tableResource = tableResource;
|
||||
|
||||
if (versions != null) {
|
||||
this.versions = Integer.valueOf(versions);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
|
||||
public Response get(final @Context UriInfo uriInfo) {
|
||||
MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
|
||||
|
||||
servlet.getMetrics().incrementRequests(1);
|
||||
try {
|
||||
CellSetModel model = new CellSetModel();
|
||||
for (String rk : params.get(ROW_KEYS_PARAM_NAME)) {
|
||||
RowSpec rowSpec = new RowSpec(rk);
|
||||
|
||||
if (this.versions != null) {
|
||||
rowSpec.setMaxVersions(this.versions);
|
||||
}
|
||||
|
||||
ResultGenerator generator = ResultGenerator.fromRowSpec(this.tableResource.getName(), rowSpec, null);
|
||||
if (!generator.hasNext()) {
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
}
|
||||
|
||||
KeyValue value = null;
|
||||
RowModel rowModel = new RowModel(rk);
|
||||
|
||||
|
||||
while ((value = generator.next()) != null) {
|
||||
byte[] family = value.getFamily();
|
||||
byte[] qualifier = value.getQualifier();
|
||||
byte[] data = tableResource.transform(family, qualifier, value.getValue(), Transform.Direction.OUT);
|
||||
rowModel.addCell(new CellModel(family, qualifier, value.getTimestamp(), data));
|
||||
}
|
||||
|
||||
model.addRow(rowModel);
|
||||
}
|
||||
return Response.ok(model).build();
|
||||
} catch (IOException e) {
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,151 @@
|
|||
package org.apache.hadoop.hbase.rest;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.hbase.HBaseTestingUtility;
|
||||
import org.apache.hadoop.hbase.HColumnDescriptor;
|
||||
import org.apache.hadoop.hbase.HTableDescriptor;
|
||||
import org.apache.hadoop.hbase.client.HBaseAdmin;
|
||||
import org.apache.hadoop.hbase.rest.client.Client;
|
||||
import org.apache.hadoop.hbase.rest.client.Cluster;
|
||||
import org.apache.hadoop.hbase.rest.client.Response;
|
||||
import org.apache.hadoop.hbase.rest.model.CellModel;
|
||||
import org.apache.hadoop.hbase.rest.model.CellSetModel;
|
||||
import org.apache.hadoop.hbase.rest.model.RowModel;
|
||||
import org.apache.hadoop.hbase.util.Bytes;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
|
||||
public class TestMultiRowResource {
|
||||
|
||||
private static final String TABLE = "TestRowResource";
|
||||
private static final String CFA = "a";
|
||||
private static final String CFB = "b";
|
||||
private static final String COLUMN_1 = CFA + ":1";
|
||||
private static final String COLUMN_2 = CFB + ":2";
|
||||
private static final String ROW_1 = "testrow5";
|
||||
private static final String VALUE_1 = "testvalue5";
|
||||
private static final String ROW_2 = "testrow6";
|
||||
private static final String VALUE_2 = "testvalue6";
|
||||
|
||||
|
||||
private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
|
||||
private static final HBaseRESTTestingUtility REST_TEST_UTIL = new HBaseRESTTestingUtility();
|
||||
|
||||
private static Client client;
|
||||
private static JAXBContext context;
|
||||
private static Marshaller marshaller;
|
||||
private static Unmarshaller unmarshaller;
|
||||
private static Configuration conf;
|
||||
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpBeforeClass() throws Exception {
|
||||
conf = TEST_UTIL.getConfiguration();
|
||||
TEST_UTIL.startMiniCluster(3);
|
||||
REST_TEST_UTIL.startServletContainer(conf);
|
||||
context = JAXBContext.newInstance(
|
||||
CellModel.class,
|
||||
CellSetModel.class,
|
||||
RowModel.class);
|
||||
marshaller = context.createMarshaller();
|
||||
unmarshaller = context.createUnmarshaller();
|
||||
client = new Client(new Cluster().add("localhost", REST_TEST_UTIL.getServletPort()));
|
||||
HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();
|
||||
if (admin.tableExists(TABLE)) {
|
||||
return;
|
||||
}
|
||||
HTableDescriptor htd = new HTableDescriptor(TABLE);
|
||||
htd.addFamily(new HColumnDescriptor(CFA));
|
||||
htd.addFamily(new HColumnDescriptor(CFB));
|
||||
admin.createTable(htd);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownAfterClass() throws Exception {
|
||||
REST_TEST_UTIL.shutdownServletContainer();
|
||||
TEST_UTIL.shutdownMiniCluster();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testMultiCellGetJSON() throws IOException, JAXBException {
|
||||
String row_5_url = "/" + TABLE + "/" + ROW_1 + "/" + COLUMN_1;
|
||||
String row_6_url = "/" + TABLE + "/" + ROW_2 + "/" + COLUMN_2;
|
||||
|
||||
|
||||
StringBuilder path = new StringBuilder();
|
||||
path.append("/");
|
||||
path.append(TABLE);
|
||||
path.append("/multiget/?row=");
|
||||
path.append(ROW_1);
|
||||
path.append("&row=");
|
||||
path.append(ROW_2);
|
||||
|
||||
client.post(row_5_url, Constants.MIMETYPE_BINARY, Bytes.toBytes(VALUE_1));
|
||||
client.post(row_6_url, Constants.MIMETYPE_BINARY, Bytes.toBytes(VALUE_2));
|
||||
|
||||
|
||||
Response response = client.get(path.toString(), Constants.MIMETYPE_JSON);
|
||||
assertEquals(response.getCode(), 200);
|
||||
|
||||
client.delete(row_5_url);
|
||||
client.delete(row_6_url);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultiCellGetXML() throws IOException, JAXBException {
|
||||
String row_5_url = "/" + TABLE + "/" + ROW_1 + "/" + COLUMN_1;
|
||||
String row_6_url = "/" + TABLE + "/" + ROW_2 + "/" + COLUMN_2;
|
||||
|
||||
|
||||
StringBuilder path = new StringBuilder();
|
||||
path.append("/");
|
||||
path.append(TABLE);
|
||||
path.append("/multiget/?row=");
|
||||
path.append(ROW_1);
|
||||
path.append("&row=");
|
||||
path.append(ROW_2);
|
||||
|
||||
client.post(row_5_url, Constants.MIMETYPE_BINARY, Bytes.toBytes(VALUE_1));
|
||||
client.post(row_6_url, Constants.MIMETYPE_BINARY, Bytes.toBytes(VALUE_2));
|
||||
|
||||
|
||||
Response response = client.get(path.toString(), Constants.MIMETYPE_XML);
|
||||
assertEquals(response.getCode(), 200);
|
||||
|
||||
client.delete(row_5_url);
|
||||
client.delete(row_6_url);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultiCellGetJSONNotFound() throws IOException {
|
||||
String row_5_url = "/" + TABLE + "/" + ROW_1 + "/" + COLUMN_1;
|
||||
|
||||
StringBuilder path = new StringBuilder();
|
||||
path.append("/");
|
||||
path.append(TABLE);
|
||||
path.append("/multiget/?row=");
|
||||
path.append(ROW_1);
|
||||
path.append("&row=");
|
||||
path.append(ROW_2);
|
||||
|
||||
client.post(row_5_url, Constants.MIMETYPE_BINARY, Bytes.toBytes(VALUE_1));
|
||||
|
||||
Response response = client.get(path.toString(), Constants.MIMETYPE_JSON);
|
||||
|
||||
assertEquals(response.getCode(), 404);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue