docs: private Deferred<TreeMap<byte[], HistogramSpan>> findHistogramSpans() throws HBaseException {
      final short metric_width = tsdb.metrics.width();
      final TreeMap<byte[], HistogramSpan> histSpans = new TreeMap<byte[], HistogramSpan>(new SpanCmp(metric_width));
      
      // Copy only the filters that should trigger a tag resolution. If this list
      // is empty due to literals or a wildcard star, then we'll save a TON of
      // UID lookups
      final List<TagVFilter> scanner_filters;
      if (filters != null) {
        scanner_filters = new ArrayList<TagVFilter>(filters.size());
        for (final TagVFilter filter : filters) {
          if (filter.postScan()) {
            scanner_filters.add(filter);
          }
        }
      } else {
        scanner_filters = null;
      }
  
      scan_start_time = System.nanoTime();
      final List<Scanner> scanners;
      if (Const.SALT_WIDTH() > 0) {
        scanners = new ArrayList<Scanner>(Const.SALT_BUCKETS());
        for (int i = 0; i < Const.SALT_BUCKETS(); i++) {
          scanners.add(getScanner(i));
        }
        scan_start_time = DateTime.nanoTime();
        return new SaltScanner(tsdb, metric, scanners, null, scanner_filters, 
            delete, rollup_query, query_stats, query_index, histSpans, 
            max_bytes, max_data_points).scanHistogram();
      } else {
        scanners = Lists.newArrayList(getScanner());
        scan_start_time = DateTime.nanoTime();
        return new SaltScanner(tsdb, metric, scanners, null, scanner_filters, 
            delete, rollup_query, query_stats, query_index, histSpans, 
            max_bytes, max_data_points).scanHistogram();
      }
    }