示例#1
0
  /**
   * Verify that {@link ScanQueryMatcher} only skips expired KeyValue instances and does not exit
   * early from the row (skipping later non-expired KeyValues). This version mimics a Get with
   * explicitly specified column qualifiers.
   *
   * @throws IOException
   */
  @Test
  public void testMatch_ExpiredExplicit() throws IOException {

    long testTTL = 1000;
    MatchCode[] expected =
        new MatchCode[] {
          ScanQueryMatcher.MatchCode.SEEK_NEXT_COL,
          ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_COL,
          ScanQueryMatcher.MatchCode.SEEK_NEXT_COL,
          ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_COL,
          ScanQueryMatcher.MatchCode.SEEK_NEXT_ROW,
          ScanQueryMatcher.MatchCode.DONE
        };

    long now = EnvironmentEdgeManager.currentTime();
    ScanQueryMatcher qm =
        new ScanQueryMatcher(
            scan,
            new ScanInfo(this.conf, fam2, 0, 1, testTTL, KeepDeletedCells.FALSE, 0, rowComparator),
            get.getFamilyMap().get(fam2),
            now - testTTL,
            now);

    KeyValue[] kvs =
        new KeyValue[] {
          new KeyValue(row1, fam2, col1, now - 100, data),
          new KeyValue(row1, fam2, col2, now - 50, data),
          new KeyValue(row1, fam2, col3, now - 5000, data),
          new KeyValue(row1, fam2, col4, now - 500, data),
          new KeyValue(row1, fam2, col5, now - 10000, data),
          new KeyValue(row2, fam1, col1, now - 10, data)
        };

    KeyValue k = kvs[0];
    qm.setToNewRow(k);

    List<MatchCode> actual = new ArrayList<MatchCode>(kvs.length);
    for (KeyValue kv : kvs) {
      actual.add(qm.match(kv));
    }

    assertEquals(expected.length, actual.size());
    for (int i = 0; i < expected.length; i++) {
      if (PRINT) {
        System.out.println("expected " + expected[i] + ", actual " + actual.get(i));
      }
      assertEquals(expected[i], actual.get(i));
    }
  }
示例#2
0
  @Test
  public void testMatch_Wildcard() throws IOException {
    // Moving up from the Tracker by using Gets and List<KeyValue> instead
    // of just byte []

    // Expected result
    List<MatchCode> expected = new ArrayList<ScanQueryMatcher.MatchCode>();
    expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
    expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
    expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
    expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
    expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
    expected.add(ScanQueryMatcher.MatchCode.DONE);

    long now = EnvironmentEdgeManager.currentTime();
    ScanQueryMatcher qm =
        new ScanQueryMatcher(
            scan,
            new ScanInfo(this.conf, fam2, 0, 1, ttl, KeepDeletedCells.FALSE, 0, rowComparator),
            null,
            now - ttl,
            now);

    List<KeyValue> memstore = new ArrayList<KeyValue>();
    memstore.add(new KeyValue(row1, fam2, col1, 1, data));
    memstore.add(new KeyValue(row1, fam2, col2, 1, data));
    memstore.add(new KeyValue(row1, fam2, col3, 1, data));
    memstore.add(new KeyValue(row1, fam2, col4, 1, data));
    memstore.add(new KeyValue(row1, fam2, col5, 1, data));
    memstore.add(new KeyValue(row2, fam1, col1, 1, data));

    List<ScanQueryMatcher.MatchCode> actual = new ArrayList<ScanQueryMatcher.MatchCode>();

    KeyValue k = memstore.get(0);
    qm.setToNewRow(k);

    for (KeyValue kv : memstore) {
      actual.add(qm.match(kv));
    }

    assertEquals(expected.size(), actual.size());
    for (int i = 0; i < expected.size(); i++) {
      assertEquals(expected.get(i), actual.get(i));
      if (PRINT) {
        System.out.println("expected " + expected.get(i) + ", actual " + actual.get(i));
      }
    }
  }
示例#3
0
  private void testDropDeletes(byte[] from, byte[] to, byte[][] rows, MatchCode... expected)
      throws IOException {
    long now = EnvironmentEdgeManager.currentTime();
    // Set time to purge deletes to negative value to avoid it ever happening.
    ScanInfo scanInfo =
        new ScanInfo(this.conf, fam2, 0, 1, ttl, KeepDeletedCells.FALSE, -1L, rowComparator);
    NavigableSet<byte[]> cols = get.getFamilyMap().get(fam2);

    ScanQueryMatcher qm =
        new ScanQueryMatcher(
            scan,
            scanInfo,
            cols,
            Long.MAX_VALUE,
            HConstants.OLDEST_TIMESTAMP,
            HConstants.OLDEST_TIMESTAMP,
            now,
            from,
            to,
            null);
    List<ScanQueryMatcher.MatchCode> actual =
        new ArrayList<ScanQueryMatcher.MatchCode>(rows.length);
    byte[] prevRow = null;
    for (byte[] row : rows) {
      if (prevRow == null || !Bytes.equals(prevRow, row)) {
        qm.setToNewRow(KeyValueUtil.createFirstOnRow(row));
        prevRow = row;
      }
      actual.add(qm.match(new KeyValue(row, fam2, null, now, Type.Delete)));
    }

    assertEquals(expected.length, actual.size());
    for (int i = 0; i < expected.length; i++) {
      if (PRINT) System.out.println("expected " + expected[i] + ", actual " + actual.get(i));
      assertEquals(expected[i], actual.get(i));
    }
  }
示例#4
0
  private void _testMatch_ExplicitColumns(Scan scan, List<MatchCode> expected) throws IOException {
    long now = EnvironmentEdgeManager.currentTime();
    // 2,4,5
    ScanQueryMatcher qm =
        new ScanQueryMatcher(
            scan,
            new ScanInfo(this.conf, fam2, 0, 1, ttl, KeepDeletedCells.FALSE, 0, rowComparator),
            get.getFamilyMap().get(fam2),
            now - ttl,
            now);

    List<KeyValue> memstore = new ArrayList<KeyValue>();
    memstore.add(new KeyValue(row1, fam2, col1, 1, data));
    memstore.add(new KeyValue(row1, fam2, col2, 1, data));
    memstore.add(new KeyValue(row1, fam2, col3, 1, data));
    memstore.add(new KeyValue(row1, fam2, col4, 1, data));
    memstore.add(new KeyValue(row1, fam2, col5, 1, data));

    memstore.add(new KeyValue(row2, fam1, col1, data));

    List<ScanQueryMatcher.MatchCode> actual = new ArrayList<ScanQueryMatcher.MatchCode>();
    KeyValue k = memstore.get(0);
    qm.setToNewRow(k);

    for (KeyValue kv : memstore) {
      actual.add(qm.match(kv));
    }

    assertEquals(expected.size(), actual.size());
    for (int i = 0; i < expected.size(); i++) {
      assertEquals(expected.get(i), actual.get(i));
      if (PRINT) {
        System.out.println("expected " + expected.get(i) + ", actual " + actual.get(i));
      }
    }
  }