Search in sources :

Example 36 with RowModel

use of org.apache.hadoop.hbase.rest.model.RowModel in project hbase by apache.

the class RemoteHTable method put.

@Override
public void put(List<Put> puts) throws IOException {
    // this is a trick: The gateway accepts multiple rows in a cell set and
    // ignores the row specification in the URI
    // separate puts by row
    TreeMap<byte[], List<Cell>> map = new TreeMap<>(Bytes.BYTES_COMPARATOR);
    for (Put put : puts) {
        byte[] row = put.getRow();
        List<Cell> cells = map.get(row);
        if (cells == null) {
            cells = new ArrayList<>();
            map.put(row, cells);
        }
        for (List<Cell> l : put.getFamilyCellMap().values()) {
            cells.addAll(l);
        }
    }
    // build the cell set
    CellSetModel model = new CellSetModel();
    for (Map.Entry<byte[], List<Cell>> e : map.entrySet()) {
        RowModel row = new RowModel(e.getKey());
        for (Cell cell : e.getValue()) {
            row.addCell(new CellModel(cell));
        }
        model.addRow(row);
    }
    // build path for multiput
    StringBuilder sb = new StringBuilder();
    sb.append('/');
    sb.append(Bytes.toString(name));
    // can be any nonexistent row
    sb.append("/$multiput");
    for (int i = 0; i < maxRetries; i++) {
        Response response = client.put(sb.toString(), Constants.MIMETYPE_PROTOBUF, model.createProtobufOutput());
        int code = response.getCode();
        switch(code) {
            case 200:
                return;
            case 509:
                try {
                    Thread.sleep(sleepTime);
                } catch (InterruptedException e) {
                    throw (InterruptedIOException) new InterruptedIOException().initCause(e);
                }
                break;
            default:
                throw new IOException("multiput request failed with " + code);
        }
    }
    throw new IOException("multiput request timed out");
}
Also used : InterruptedIOException(java.io.InterruptedIOException) CellSetModel(org.apache.hadoop.hbase.rest.model.CellSetModel) InterruptedIOException(java.io.InterruptedIOException) IOException(java.io.IOException) TreeMap(java.util.TreeMap) Put(org.apache.hadoop.hbase.client.Put) List(java.util.List) ArrayList(java.util.ArrayList) RowModel(org.apache.hadoop.hbase.rest.model.RowModel) CellModel(org.apache.hadoop.hbase.rest.model.CellModel) Cell(org.apache.hadoop.hbase.Cell) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 37 with RowModel

use of org.apache.hadoop.hbase.rest.model.RowModel in project hbase by apache.

the class RemoteHTable method buildModelFromPut.

protected CellSetModel buildModelFromPut(Put put) {
    RowModel row = new RowModel(put.getRow());
    long ts = put.getTimeStamp();
    for (List<Cell> cells : put.getFamilyCellMap().values()) {
        for (Cell cell : cells) {
            row.addCell(new CellModel(CellUtil.cloneFamily(cell), CellUtil.cloneQualifier(cell), ts != HConstants.LATEST_TIMESTAMP ? ts : cell.getTimestamp(), CellUtil.cloneValue(cell)));
        }
    }
    CellSetModel model = new CellSetModel();
    model.addRow(row);
    return model;
}
Also used : CellSetModel(org.apache.hadoop.hbase.rest.model.CellSetModel) RowModel(org.apache.hadoop.hbase.rest.model.RowModel) CellModel(org.apache.hadoop.hbase.rest.model.CellModel) Cell(org.apache.hadoop.hbase.Cell)

Example 38 with RowModel

use of org.apache.hadoop.hbase.rest.model.RowModel in project hbase by apache.

the class TestScannersWithFilters method verifyScanNoEarlyOut.

private static void verifyScanNoEarlyOut(Scan s, long expectedRows, long expectedKeys) throws Exception {
    ScannerModel model = ScannerModel.fromScan(s);
    // fetch it all at once
    model.setBatch(Integer.MAX_VALUE);
    StringWriter writer = new StringWriter();
    marshaller.marshal(model, writer);
    LOG.debug(writer.toString());
    byte[] body = Bytes.toBytes(writer.toString());
    Response response = client.put("/" + TABLE + "/scanner", Constants.MIMETYPE_XML, body);
    assertEquals(response.getCode(), 201);
    String scannerURI = response.getLocation();
    assertNotNull(scannerURI);
    // get a cell set
    response = client.get(scannerURI, Constants.MIMETYPE_XML);
    assertEquals(response.getCode(), 200);
    assertEquals(Constants.MIMETYPE_XML, response.getHeader("content-type"));
    CellSetModel cellSet = (CellSetModel) unmarshaller.unmarshal(new ByteArrayInputStream(response.getBody()));
    // delete the scanner
    response = client.delete(scannerURI);
    assertEquals(response.getCode(), 200);
    Iterator<RowModel> i = cellSet.getRows().iterator();
    int j = 0;
    for (boolean done = true; done; j++) {
        done = i.hasNext();
        if (!done)
            break;
        RowModel rowModel = i.next();
        List<CellModel> cells = rowModel.getCells();
        if (cells.isEmpty())
            break;
        assertTrue("Scanned too many rows! Only expected " + expectedRows + " total but already scanned " + (j + 1), expectedRows > j);
        assertEquals("Expected " + expectedKeys + " keys per row but " + "returned " + cells.size(), expectedKeys, cells.size());
    }
    assertEquals("Expected " + expectedRows + " rows but scanned " + j + " rows", expectedRows, j);
}
Also used : CellSetModel(org.apache.hadoop.hbase.rest.model.CellSetModel) Response(org.apache.hadoop.hbase.rest.client.Response) StringWriter(java.io.StringWriter) ByteArrayInputStream(java.io.ByteArrayInputStream) RowModel(org.apache.hadoop.hbase.rest.model.RowModel) CellModel(org.apache.hadoop.hbase.rest.model.CellModel) ScannerModel(org.apache.hadoop.hbase.rest.model.ScannerModel)

Example 39 with RowModel

use of org.apache.hadoop.hbase.rest.model.RowModel in project hbase by apache.

the class TestScannersWithFilters method verifyScan.

private static void verifyScan(Scan s, long expectedRows, long expectedKeys) throws Exception {
    ScannerModel model = ScannerModel.fromScan(s);
    // fetch it all at once
    model.setBatch(Integer.MAX_VALUE);
    StringWriter writer = new StringWriter();
    marshaller.marshal(model, writer);
    LOG.debug(writer.toString());
    byte[] body = Bytes.toBytes(writer.toString());
    Response response = client.put("/" + TABLE + "/scanner", Constants.MIMETYPE_XML, body);
    assertEquals(response.getCode(), 201);
    String scannerURI = response.getLocation();
    assertNotNull(scannerURI);
    // get a cell set
    response = client.get(scannerURI, Constants.MIMETYPE_XML);
    assertEquals(response.getCode(), 200);
    assertEquals(Constants.MIMETYPE_XML, response.getHeader("content-type"));
    CellSetModel cells = (CellSetModel) unmarshaller.unmarshal(new ByteArrayInputStream(response.getBody()));
    int rows = cells.getRows().size();
    assertTrue("Scanned too many rows! Only expected " + expectedRows + " total but scanned " + rows, expectedRows == rows);
    for (RowModel row : cells.getRows()) {
        int count = row.getCells().size();
        assertEquals("Expected " + expectedKeys + " keys per row but " + "returned " + count, expectedKeys, count);
    }
    // delete the scanner
    response = client.delete(scannerURI);
    assertEquals(response.getCode(), 200);
}
Also used : Response(org.apache.hadoop.hbase.rest.client.Response) StringWriter(java.io.StringWriter) CellSetModel(org.apache.hadoop.hbase.rest.model.CellSetModel) ByteArrayInputStream(java.io.ByteArrayInputStream) RowModel(org.apache.hadoop.hbase.rest.model.RowModel) ScannerModel(org.apache.hadoop.hbase.rest.model.ScannerModel)

Example 40 with RowModel

use of org.apache.hadoop.hbase.rest.model.RowModel in project hbase by apache.

the class TestScannersWithFilters method verifyScanFull.

private static void verifyScanFull(Scan s, KeyValue[] kvs) throws Exception {
    ScannerModel model = ScannerModel.fromScan(s);
    // fetch it all at once
    model.setBatch(Integer.MAX_VALUE);
    StringWriter writer = new StringWriter();
    marshaller.marshal(model, writer);
    LOG.debug(writer.toString());
    byte[] body = Bytes.toBytes(writer.toString());
    Response response = client.put("/" + TABLE + "/scanner", Constants.MIMETYPE_XML, body);
    assertEquals(response.getCode(), 201);
    String scannerURI = response.getLocation();
    assertNotNull(scannerURI);
    // get a cell set
    response = client.get(scannerURI, Constants.MIMETYPE_XML);
    assertEquals(response.getCode(), 200);
    assertEquals(Constants.MIMETYPE_XML, response.getHeader("content-type"));
    CellSetModel cellSet = (CellSetModel) unmarshaller.unmarshal(new ByteArrayInputStream(response.getBody()));
    // delete the scanner
    response = client.delete(scannerURI);
    assertEquals(response.getCode(), 200);
    int row = 0;
    int idx = 0;
    Iterator<RowModel> i = cellSet.getRows().iterator();
    for (boolean done = true; done; row++) {
        done = i.hasNext();
        if (!done)
            break;
        RowModel rowModel = i.next();
        List<CellModel> cells = rowModel.getCells();
        if (cells.isEmpty())
            break;
        assertTrue("Scanned too many keys! Only expected " + kvs.length + " total but already scanned " + (cells.size() + idx), kvs.length >= idx + cells.size());
        for (CellModel cell : cells) {
            assertTrue("Row mismatch", Bytes.equals(rowModel.getKey(), CellUtil.cloneRow(kvs[idx])));
            byte[][] split = KeyValue.parseColumn(cell.getColumn());
            assertTrue("Family mismatch", Bytes.equals(split[0], CellUtil.cloneFamily(kvs[idx])));
            assertTrue("Qualifier mismatch", Bytes.equals(split[1], CellUtil.cloneQualifier(kvs[idx])));
            assertTrue("Value mismatch", Bytes.equals(cell.getValue(), CellUtil.cloneValue(kvs[idx])));
            idx++;
        }
    }
    assertEquals("Expected " + kvs.length + " total keys but scanned " + idx, kvs.length, idx);
}
Also used : CellSetModel(org.apache.hadoop.hbase.rest.model.CellSetModel) Response(org.apache.hadoop.hbase.rest.client.Response) StringWriter(java.io.StringWriter) ByteArrayInputStream(java.io.ByteArrayInputStream) RowModel(org.apache.hadoop.hbase.rest.model.RowModel) CellModel(org.apache.hadoop.hbase.rest.model.CellModel) ScannerModel(org.apache.hadoop.hbase.rest.model.ScannerModel)

Aggregations

RowModel (org.apache.hadoop.hbase.rest.model.RowModel)44 CellModel (org.apache.hadoop.hbase.rest.model.CellModel)37 CellSetModel (org.apache.hadoop.hbase.rest.model.CellSetModel)35 Response (org.apache.hadoop.hbase.rest.client.Response)30 Test (org.junit.Test)15 StringWriter (java.io.StringWriter)12 ByteArrayInputStream (java.io.ByteArrayInputStream)8 Cell (org.apache.hadoop.hbase.Cell)8 IOException (java.io.IOException)6 ArrayList (java.util.ArrayList)4 GET (javax.ws.rs.GET)4 Produces (javax.ws.rs.Produces)4 ResponseBuilder (javax.ws.rs.core.Response.ResponseBuilder)4 JAXBContext (javax.xml.bind.JAXBContext)3 Unmarshaller (javax.xml.bind.Unmarshaller)3 Put (org.apache.hadoop.hbase.client.Put)3 Result (org.apache.hadoop.hbase.client.Result)3 Table (org.apache.hadoop.hbase.client.Table)3 ScannerModel (org.apache.hadoop.hbase.rest.model.ScannerModel)3 JacksonJaxbJsonProvider (org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider)3