MCPcopy
hub / github.com/OpenTSDB/opentsdb / setDataTableScanFilter

Method setDataTableScanFilter

src/query/QueryUtil.java:414–494  ·  view source on GitHub ↗

Sets a filter or filter list on the scanner based on whether or not the query had tags it needed to match. NOTE: This method will sort the group bys. @param scanner The scanner to modify. @param group_bys An optional list of tag keys that we want to group on. May be null. @param row_key_literals An

(
      final Scanner scanner, 
      final List<byte[]> group_bys, 
      final ByteMap<byte[][]> row_key_literals,
      final boolean explicit_tags,
      final boolean enable_fuzzy_filter,
      final int end_time)

Source from the content-addressed store, hash-verified

412 * to stop scanning.
413 */
414 public static void setDataTableScanFilter(
415 final Scanner scanner,
416 final List<byte[]> group_bys,
417 final ByteMap<byte[][]> row_key_literals,
418 final boolean explicit_tags,
419 final boolean enable_fuzzy_filter,
420 final int end_time) {
421
422 // no-op
423 if ((group_bys == null || group_bys.isEmpty())
424 && (row_key_literals == null || row_key_literals.isEmpty())) {
425 return;
426 }
427
428 if (group_bys != null) {
429 Collections.sort(group_bys, Bytes.MEMCMP);
430 }
431
432 final int prefix_width = Const.SALT_WIDTH() + TSDB.metrics_width() +
433 Const.TIMESTAMP_BYTES;
434
435 final FuzzyRowFilter fuzzy_filter;
436 if (explicit_tags &&
437 enable_fuzzy_filter &&
438 row_key_literals != null &&
439 !row_key_literals.isEmpty()) {
440
441 final byte[] fuzzy_key = new byte[prefix_width + (row_key_literals.size() *
442 (TSDB.tagk_width() + TSDB.tagv_width()))];
443 System.arraycopy(scanner.getCurrentKey(), 0, fuzzy_key, 0,
444 scanner.getCurrentKey().length);
445
446 final List<FuzzyFilterPair> fuzzy_filter_pairs =
447 buildFuzzyFilters(row_key_literals, fuzzy_key);
448
449 // The Fuzzy Filter list is sorted: the first and last filters row key
450 // can be used to build the stop key for the scanner
451 final byte[] stop_key = Arrays.copyOf(
452 fuzzy_filter_pairs.get(fuzzy_filter_pairs.size() - 1).getRowKey(),
453 fuzzy_key.length);
454 System.arraycopy(scanner.getCurrentKey(), 0, stop_key, 0, prefix_width);
455 Internal.setBaseTime(stop_key, end_time);
456 int idx = prefix_width + TSDB.tagk_width();
457 // max out the tag values
458 while (idx < stop_key.length) {
459 for (int i = 0; i < TSDB.tagv_width(); i++) {
460 stop_key[idx++] = (byte) 0xFF;
461 }
462 idx += TSDB.tagk_width();
463 }
464
465 scanner.setStartKey(fuzzy_key);
466 scanner.setStopKey(stop_key);
467 fuzzy_filter = new FuzzyRowFilter(fuzzy_filter_pairs);
468 } else {
469 fuzzy_filter = null;
470 }
471

Calls 14

SALT_WIDTHMethod · 0.95
metrics_widthMethod · 0.95
tagk_widthMethod · 0.95
tagv_widthMethod · 0.95
buildFuzzyFiltersMethod · 0.95
setBaseTimeMethod · 0.95
getRowKeyUIDRegexMethod · 0.95
byteRegexToStringMethod · 0.95
isEmptyMethod · 0.80
sizeMethod · 0.65
getRowKeyMethod · 0.45
getMethod · 0.45