1 /* 2 * Copyright 2011 The Apache Software Foundation 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 package org.apache.hadoop.hbase.util; 22 23 import org.apache.hadoop.hbase.KeyValue; 24 import org.apache.hadoop.io.RawComparator; 25 26 public class CompoundBloomFilterBase implements BloomFilterBase { 27 28 /** 29 * At read time, the total number of chunks. At write time, the number of 30 * chunks created so far. The first chunk has an ID of 0, and the current 31 * chunk has the ID of numChunks - 1. 32 */ 33 protected int numChunks; 34 35 /** 36 * The Bloom filter version. There used to be a DynamicByteBloomFilter which 37 * had version 2. 38 */ 39 public static final int VERSION = 3; 40 41 /** Target error rate for configuring the filter and for information */ 42 protected float errorRate; 43 44 /** The total number of keys in all chunks */ 45 protected long totalKeyCount; 46 protected long totalByteSize; 47 protected long totalMaxKeys; 48 49 /** Hash function type to use, as defined in {@link Hash} */ 50 protected int hashType; 51 52 /** Comparator used to compare Bloom filter keys */ 53 protected RawComparator<byte[]> comparator; 54 55 @Override 56 public long getMaxKeys() { 57 return totalMaxKeys; 58 } 59 60 @Override 61 public long getKeyCount() { 62 return totalKeyCount; 63 } 64 65 @Override 66 public long getByteSize() { 67 return totalByteSize; 68 } 69 70 private static final byte[] DUMMY = new byte[0]; 71 72 /** 73 * Prepare an ordered pair of row and qualifier to be compared using 74 * KeyValue.KeyComparator. This is only used for row-column Bloom 75 * filters. 76 */ 77 @Override 78 public byte[] createBloomKey(byte[] row, int roffset, int rlength, 79 byte[] qualifier, int qoffset, int qlength) { 80 if (qualifier == null) 81 qualifier = DUMMY; 82 83 // Make sure this does not specify a timestamp so that the default maximum 84 // (most recent) timestamp is used. 85 KeyValue kv = KeyValue.createFirstOnRow(row, roffset, rlength, DUMMY, 0, 0, 86 qualifier, qoffset, qlength); 87 return kv.getKey(); 88 } 89 90 @Override 91 public RawComparator<byte[]> getComparator() { 92 return comparator; 93 } 94 95 }