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.classification.InterfaceAudience;
22
23 /**
24 * This interface is used for the tracking and enforcement of Deletes
25 * during the course of a Get or Scan operation.
26 * <p>
27 * This class is utilized through three methods:
28 * <ul><li>{@link #add} when encountering a Delete
29 * <li>{@link #isDeleted} when checking if a Put KeyValue has been deleted
30 * <li>{@link #update} when reaching the end of a StoreFile
31 */
32 @InterfaceAudience.Private
33 public interface DeleteTracker {
34
35 /**
36 * Add the specified KeyValue to the list of deletes to check against for
37 * this row operation.
38 * <p>
39 * This is called when a Delete is encountered in a StoreFile.
40 * @param buffer KeyValue buffer
41 * @param qualifierOffset column qualifier offset
42 * @param qualifierLength column qualifier length
43 * @param timestamp timestamp
44 * @param type delete type as byte
45 */
46 public void add(byte [] buffer, int qualifierOffset, int qualifierLength,
47 long timestamp, byte type);
48
49 /**
50 * Check if the specified KeyValue buffer has been deleted by a previously
51 * seen delete.
52 * @param buffer KeyValue buffer
53 * @param qualifierOffset column qualifier offset
54 * @param qualifierLength column qualifier length
55 * @param timestamp timestamp
56 * @return deleteResult The result tells whether the KeyValue is deleted and why
57 */
58 public DeleteResult isDeleted(byte [] buffer, int qualifierOffset,
59 int qualifierLength, long timestamp);
60
61 /**
62 * @return true if there are no current delete, false otherwise
63 */
64 public boolean isEmpty();
65
66 /**
67 * Called at the end of every StoreFile.
68 * <p>
69 * Many optimized implementations of Trackers will require an update at
70 * when the end of each StoreFile is reached.
71 */
72 public void update();
73
74 /**
75 * Called between rows.
76 * <p>
77 * This clears everything as if a new DeleteTracker was instantiated.
78 */
79 public void reset();
80
81
82 /**
83 * Return codes for comparison of two Deletes.
84 * <p>
85 * The codes tell the merging function what to do.
86 * <p>
87 * INCLUDE means add the specified Delete to the merged list.
88 * NEXT means move to the next element in the specified list(s).
89 */
90 enum DeleteCompare {
91 INCLUDE_OLD_NEXT_OLD,
92 INCLUDE_OLD_NEXT_BOTH,
93 INCLUDE_NEW_NEXT_NEW,
94 INCLUDE_NEW_NEXT_BOTH,
95 NEXT_OLD,
96 NEXT_NEW
97 }
98
99 /**
100 * Returns codes for delete result.
101 * The codes tell the ScanQueryMatcher whether the kv is deleted and why.
102 * Based on the delete result, the ScanQueryMatcher will decide the next
103 * operation
104 */
105 public static enum DeleteResult {
106 FAMILY_DELETED, // The KeyValue is deleted by a delete family.
107 COLUMN_DELETED, // The KeyValue is deleted by a delete column.
108 VERSION_DELETED, // The KeyValue is deleted by a version delete.
109 NOT_DELETED
110 }
111
112 }