1 /** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 package org.apache.hadoop.hbase.regionserver; 20 21 import org.apache.hadoop.hbase.classification.InterfaceAudience; 22 import org.apache.hadoop.hbase.Cell; 23 24 /** 25 * This interface is used for the tracking and enforcement of Deletes 26 * during the course of a Get or Scan operation. 27 * <p> 28 * This class is utilized through three methods: 29 * <ul><li>{@link #add} when encountering a Delete 30 * <li>{@link #isDeleted} when checking if a Put KeyValue has been deleted 31 * <li>{@link #update} when reaching the end of a StoreFile 32 */ 33 @InterfaceAudience.Private 34 public interface DeleteTracker { 35 36 /** 37 * Add the specified cell to the list of deletes to check against for 38 * this row operation. 39 * <p> 40 * This is called when a Delete is encountered in a StoreFile. 41 * @param cell - the delete cell 42 */ 43 void add(Cell cell); 44 45 /** 46 * Check if the specified cell buffer has been deleted by a previously 47 * seen delete. 48 * @param cell - current cell to check if deleted by a previously seen delete 49 * @return deleteResult The result tells whether the KeyValue is deleted and why 50 */ 51 DeleteResult isDeleted(Cell cell); 52 53 /** 54 * @return true if there are no current delete, false otherwise 55 */ 56 boolean isEmpty(); 57 58 /** 59 * Called at the end of every StoreFile. 60 * <p> 61 * Many optimized implementations of Trackers will require an update at 62 * when the end of each StoreFile is reached. 63 */ 64 void update(); 65 66 /** 67 * Called between rows. 68 * <p> 69 * This clears everything as if a new DeleteTracker was instantiated. 70 */ 71 void reset(); 72 73 74 /** 75 * Return codes for comparison of two Deletes. 76 * <p> 77 * The codes tell the merging function what to do. 78 * <p> 79 * INCLUDE means add the specified Delete to the merged list. 80 * NEXT means move to the next element in the specified list(s). 81 */ 82 enum DeleteCompare { 83 INCLUDE_OLD_NEXT_OLD, 84 INCLUDE_OLD_NEXT_BOTH, 85 INCLUDE_NEW_NEXT_NEW, 86 INCLUDE_NEW_NEXT_BOTH, 87 NEXT_OLD, 88 NEXT_NEW 89 } 90 91 /** 92 * Returns codes for delete result. 93 * The codes tell the ScanQueryMatcher whether the kv is deleted and why. 94 * Based on the delete result, the ScanQueryMatcher will decide the next 95 * operation 96 */ 97 enum DeleteResult { 98 FAMILY_DELETED, // The KeyValue is deleted by a delete family. 99 FAMILY_VERSION_DELETED, // The KeyValue is deleted by a delete family version. 100 COLUMN_DELETED, // The KeyValue is deleted by a delete column. 101 VERSION_DELETED, // The KeyValue is deleted by a version delete. 102 NOT_DELETED 103 } 104 105 }