public boolean passesDeleteFamilyBloomFilter(byte[] row, int rowOffset, int rowLen) {
    // Cache Bloom filter as a local variable in case it is set to null by
    // another thread on an IO error.
    BloomFilter bloomFilter = this.deleteFamilyBloomFilter;

    // Empty file or there is no delete family at all
    if (reader.getTrailer().getEntryCount() == 0 || deleteFamilyCnt == 0) {
      return false;
    }

    if (bloomFilter == null) {
      return true;
    }

    try {
      if (!bloomFilter.supportsAutoLoading()) {
        return true;
      }
      return bloomFilter.contains(row, rowOffset, rowLen, null);
    } catch (IllegalArgumentException e) {
      LOG.error("Bad Delete Family bloom filter data -- proceeding without", e);
      setDeleteFamilyBloomFilterFaulty();
    }

    return true;
  }
Checks whether the given scan passes the Bloom filter (if present). Only checks Bloom filters
for single-row or single-row-column scans. Bloom filter checking for multi-gets is implemented
as part of the store scanner system (see {@link StoreFileScanner#seek(Cell)} and uses the
lower-level API {@link #passesGeneralRowBloomFilter(byte[], int, int)} and
{@link #passesGeneralRowColBloomFilter(Cell)}.
@param scan    the scan specification. Used to determine the row, and to check whether this is
               a single-row ("get") scan.
@param columns the set of columns. Only used for row-column Bloom filters.
@return true if the scan with the given column set passes the Bloom filter, or if the Bloom
        filter is not applicable for the scan. False if the Bloom filter is applicable and the
        scan fails it.
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileReader.java