Package org.apache.hadoop.hbase.index.util

Examples of org.apache.hadoop.hbase.index.util.ByteArrayBuilder


    super(value);
  }

  @Override
  public int compareTo(byte[] actualValue, int offset, int length) {
    ByteArrayBuilder val = new ByteArrayBuilder(length);
    val.put(actualValue, offset, length);
    byte[] array = val.array();
    if (msb[0] == 0) {
      value[0] ^= (1 << 7);
      array[0] ^= (1 << 7);
    } else {
      value[0] ^= 0xff;
View Full Code Here


    super(value);
  }

  @Override
  public int compareTo(byte[] actualValue, int offset, int length) {
    ByteArrayBuilder val = new ByteArrayBuilder(length);
    val.put(actualValue, offset, length);
    value[0] ^= (1 << 7);
    byte[] array = val.array();
    array[0] ^= (1 << 7);
    int compareTo = super.compareTo(array, 0, length);
    System.arraycopy(temp, 0, value, 0, value.length);
    return compareTo;
  }
View Full Code Here

    super(value);
  }

  @Override
  public int compareTo(byte[] actualValue, int offset, int length) {
    ByteArrayBuilder val = new ByteArrayBuilder(length);
    val.put(actualValue, offset, length);
    byte[] array = val.array();
    if (msb[0] == 0) {
      value[0] ^= (1 << 7);
      array[0] ^= (1 << 7);
    } else {
      for (int i = 0; i < 8; i++) {
View Full Code Here

    ihtd.addFamily(hcd1);
    ihtd.addFamily(hcd2);
    ihtd.addIndex(iSpec1);
    admin.createTable(ihtd);
    ZKAssign.blockUntilNoRIT(zkw);
    ByteArrayBuilder indexColVal = ByteArrayBuilder.allocate(4);
    indexColVal.put(Bytes.toBytes((short) 3));
    indexColVal.put(Bytes.toBytes((short) 32));

    Put p1 = generatePuts("006".getBytes(), "05".getBytes());
    Put p2 = generatePuts("003".getBytes(), "06".getBytes());
    Put p3 = generatePuts("004".getBytes(), "06".getBytes());
    Put p4 = generatePuts("007".getBytes(), "06".getBytes());

    byte[] seekToPut =
        new byte[3 + 1 + IndexUtils.getMaxIndexNameLength() + 10 + "006".getBytes().length];
    System.arraycopy(p1.getRow(), 0, seekToPut, 0, p1.getRow().length);
    byte[] seekToRow = "007".getBytes();
    System.arraycopy(seekToRow, 0, seekToPut, p1.getRow().length - 3, seekToRow.length);
    System.arraycopy("005".getBytes(), 0, seekToPut, 0, 3);
    setSeekToRowKey(seekToPut, indexColVal);

    byte[] expectedPut =
        new byte[3 + 1 + IndexUtils.getMaxIndexNameLength() + 10 + "006".getBytes().length];
    System.arraycopy(p4.getRow(), 0, expectedPut, 0, p4.getRow().length);
    // Copy first 3 bytes to splitKey since getKeyValue will replace the start key with splitKey.
    // Just for assertion this is been added
    System.arraycopy("005".getBytes(), 0, expectedPut, 0, 3);
    setExpected(expectedPut);

    KeyValue kv =
        new KeyValue(p1.getRow(), Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, 0,
            indexColVal.array());
    ret.add(kv);
    KeyValue kv1 =
        new KeyValue(p2.getRow(), Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, 0,
            indexColVal.array());
    ret.add(kv1);
    KeyValue kv2 =
        new KeyValue(p3.getRow(), Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, 0,
            indexColVal.array());
    ret.add(kv2);
    KeyValue kv3 =
        new KeyValue(p4.getRow(), Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, 0,
            indexColVal.array());
    ret.add(kv3);
    return ret;
  }
View Full Code Here

    HTable table = new HTable(conf, usertableName + "_idx");
    byte[] onebyte = new byte[1];
    String indexName = "Indexname";
    byte[] remIndex = new byte[IndexUtils.getMaxIndexNameLength() - indexName.length()];
    byte[] valPad = new byte[8];
    ByteArrayBuilder indexColVal = ByteArrayBuilder.allocate(4);
    indexColVal.put(Bytes.toBytes((short) 3));
    indexColVal.put(Bytes.toBytes((short) 32));
    byte[] put = new byte[3 + 1 + IndexUtils.getMaxIndexNameLength() + 10 + rowKey.length];
    System.arraycopy("000".getBytes(), 0, put, 0, 3);
    System.arraycopy(onebyte, 0, put, 3, onebyte.length);
    System.arraycopy(indexName.getBytes(), 0, put, 3 + onebyte.length, indexName.length());
    System.arraycopy(remIndex, 0, put, 3 + onebyte.length + indexName.length(), remIndex.length);
    System.arraycopy(val, 0, put, 3 + onebyte.length + indexName.length() + remIndex.length,
      val.length);
    System.arraycopy(valPad, 0, put, 3 + onebyte.length + indexName.length() + remIndex.length
        + val.length, valPad.length);
    System.arraycopy(rowKey, 0, put, 3 + onebyte.length + indexName.length() + remIndex.length
        + val.length + valPad.length, rowKey.length);
    Put p = new Put(put);
    p.add(Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, 0, indexColVal.array());
    table.put(p);
    return p;
  }
View Full Code Here

    // There can be multiple index kvs for each user kv
    // So, prepare all resultant index delete kvs for this user delete kv
    for (Entry<Long, Collection<KeyValue>> entry : groupedKV.asMap().entrySet()) {
      for (IndexSpecification index : indicesToUpdate) {
        ByteArrayBuilder indexRow =
            IndexUtils.getIndexRowKeyHeader(index, indexRegion.getStartKey(), deleteKV.getRow());
        boolean update = false;
        for (ColumnQualifier cq : index.getIndexColumns()) {
          KeyValue kvFound = null;
          for (KeyValue kv : entry.getValue()) {
            if (Bytes.equals(cq.getColumnFamily(), kv.getFamily())
                && Bytes.equals(cq.getQualifier(), kv.getQualifier())) {
              kvFound = kv;
              update = true;
              break;
            }
          }
          if (kvFound == null) {
            indexRow.position(indexRow.position() + cq.getMaxValueLength());
          } else {
            IndexUtils.updateRowKeyForKV(cq, kvFound, indexRow);
          }
        }
        if (update) {
          // Append the actual row key at the end of the index row key.
          indexRow.put(deleteKV.getRow());
          Delete idxDelete = new Delete(indexRow.array());
          if (deleteKV.isDeleteType()) {
            idxDelete
                .deleteColumn(Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, entry.getKey());
          } else {
            idxDelete.deleteFamily(Constants.IDX_COL_FAMILY, entry.getKey());
View Full Code Here

    this.tableVsIndices.put(tableName, indexList);
    // TODO the inner map needs to be thread safe when we support dynamic index add/remove
    Map<byte[], IndexSpecification> indexMap =
        new TreeMap<byte[], IndexSpecification>(Bytes.BYTES_COMPARATOR);
    for (IndexSpecification index : indexList) {
      ByteArrayBuilder keyBuilder = ByteArrayBuilder.allocate(IndexUtils.getMaxIndexNameLength());
      keyBuilder.put(Bytes.toBytes(index.getName()));
      indexMap.put(keyBuilder.array(), index);
    }
    this.tableIndexMap.put(tableName, indexMap);
  }
View Full Code Here

    ZKAssign.blockUntilNoRIT(zkw);
    HTable table = new HTable(conf, "testFalsePositiveCases");

    HTable idx_table = new HTable(conf, "testFalsePositiveCases_idx");

    ByteArrayBuilder byteArray = new ByteArrayBuilder(33);
    byteArray.put(new byte[1]);
    byteArray.put(Bytes.toBytes("idx2"));
    byteArray.put(new byte[14]);
    byteArray.put(Bytes.toBytes("apple"));
    byteArray.put(new byte[5]);
    int offset = byteArray.position();
    byteArray.put(Bytes.toBytes("row1"));

    ByteArrayBuilder value = new ByteArrayBuilder(4);
    value.put(Bytes.toBytes((short) byteArray.array().length));
    value.put(Bytes.toBytes((short) offset));
    Put p = new Put(byteArray.array());
    p.add(Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, value.array());
    idx_table.put(p);
    SingleColumnValueFilter filter =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "apple".getBytes());
View Full Code Here

  }

  private byte[] formIndexNameFromKV(KeyValue kv) {
    byte[] rowKey = kv.getRow();
    // First two bytes are going to be the
    ByteArrayBuilder keyBuilder = ByteArrayBuilder.allocate(rowKey.length);
    // Start from 2nd offset because the first 2 bytes corresponds to the rowkeylength
    keyBuilder.put(rowKey, 0, rowKey.length);
    int indexOf = com.google.common.primitives.Bytes.indexOf(keyBuilder.array(), new byte[1]);
    return keyBuilder.array(indexOf + 1, IndexUtils.getMaxIndexNameLength());
  }
View Full Code Here

      NonLeafFilterNode nlfNode = (NonLeafFilterNode) node;
      Map<List<FilterColumnValueDetail>, IndexSpecification> indicesToUse = nlfNode.getIndexToUse();
      for (Entry<List<FilterColumnValueDetail>, IndexSpecification> entry : indicesToUse.entrySet()) {
        List<FilterColumnValueDetail> fcvdList = entry.getKey();
        byte[] indexName = Bytes.toBytes(entry.getValue().getName());
        ByteArrayBuilder indexNameBuilder =
            ByteArrayBuilder.allocate(IndexUtils.getMaxIndexNameLength());
        indexNameBuilder.put(indexName);
        Scan scan = createScan(regionStartKey, indexName, fcvdList, startRow, stopRow);
        boolean isRange = isHavingRangeFilters(fcvdList);
        if (!hasRangeScanner && isRange) hasRangeScanner = isRange;
        createRegionScanner(indexRegion, userTableName, scanners, indexNameBuilder, scan, isRange,
          ++scannerIndex);
      }
      for (FilterNode fn : nlfNode.getFilterNodes()) {
        IndexRegionScanner childIndexScaner =
            createIndexScannerScheme(fn, regionStartKey, startRow, stopRow, indexRegion,
              userTableName);
        childIndexScaner.setScannerIndex(++scannerIndex);
        scanners.add(childIndexScaner);
        if (!hasRangeScanner) hasRangeScanner = childIndexScaner.isRange();
      }
      idxScanner = createScannerForNonLeafNode(scanners, nlfNode.getGroupingCondition());
      idxScanner.setRangeFlag(hasRangeScanner);
      return idxScanner;
    } else if (node instanceof PossibleIndexFilterNode) {
      LOG.info("No index can be used for the column "
          + ((PossibleIndexFilterNode) node).getFilterColumnValueDetail().getColumn());
      return null;
    } else if (node instanceof IndexFilterNode) {
      // node is IndexFilterNode
      IndexFilterNode ifNode = (IndexFilterNode) node;
      // There will be only one entry in this Map
      List<FilterColumnValueDetail> filterColsDetails =
          ifNode.getIndexToUse().keySet().iterator().next();
      byte[] indexName = Bytes.toBytes(ifNode.getBestIndex().getName());
      ByteArrayBuilder indexNameBuilder =
          ByteArrayBuilder.allocate(IndexUtils.getMaxIndexNameLength());
      indexNameBuilder.put(indexName);
      Scan scan = createScan(regionStartKey, indexName, filterColsDetails, startRow, stopRow);
      boolean isRange = isHavingRangeFilters(filterColsDetails);
      createRegionScanner(indexRegion, userTableName, scanners, indexNameBuilder, scan, isRange,
        ++scannerIndex);
      idxScanner = createScannerForNonLeafNode(scanners, null);
View Full Code Here

TOP

Related Classes of org.apache.hadoop.hbase.index.util.ByteArrayBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.