1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.regionserver;
21
22 import org.apache.hadoop.hbase.*;
23 import org.apache.hadoop.hbase.regionserver.DeleteTracker.DeleteResult;
24 import org.apache.hadoop.hbase.util.Bytes;
25 import org.junit.experimental.categories.Category;
26
27
28 @Category(SmallTests.class)
29 public class TestScanDeleteTracker extends HBaseTestCase {
30
31 private ScanDeleteTracker sdt;
32 private long timestamp = 10L;
33 private byte deleteType = 0;
34
35 public void setUp() throws Exception {
36 super.setUp();
37 sdt = new ScanDeleteTracker();
38 }
39
40 public void testDeletedBy_Delete() {
41 byte [] qualifier = Bytes.toBytes("qualifier");
42 deleteType = KeyValue.Type.Delete.getCode();
43
44 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
45 DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
46 assertEquals(DeleteResult.VERSION_DELETED, ret);
47 }
48
49 public void testDeletedBy_DeleteColumn() {
50 byte [] qualifier = Bytes.toBytes("qualifier");
51 deleteType = KeyValue.Type.DeleteColumn.getCode();
52
53 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
54 timestamp -= 5;
55 DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
56 assertEquals(DeleteResult.COLUMN_DELETED, ret);
57 }
58
59 public void testDeletedBy_DeleteFamily() {
60 byte [] qualifier = Bytes.toBytes("qualifier");
61 deleteType = KeyValue.Type.DeleteFamily.getCode();
62
63 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
64
65 timestamp -= 5;
66 DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
67 assertEquals(DeleteResult.FAMILY_DELETED, ret);
68 }
69
70 public void testDeletedBy_DeleteFamilyVersion() {
71 byte [] qualifier1 = Bytes.toBytes("qualifier1");
72 byte [] qualifier2 = Bytes.toBytes("qualifier2");
73 byte [] qualifier3 = Bytes.toBytes("qualifier3");
74 byte [] qualifier4 = Bytes.toBytes("qualifier4");
75 deleteType = KeyValue.Type.DeleteFamilyVersion.getCode();
76
77 sdt.add(null, 0, 0, timestamp, deleteType);
78
79 DeleteResult ret = sdt.isDeleted(qualifier1, 0, qualifier1.length, timestamp);
80 assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
81 ret = sdt.isDeleted(qualifier2, 0, qualifier2.length, timestamp);
82 assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
83 ret = sdt.isDeleted(qualifier3, 0, qualifier3.length, timestamp);
84 assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
85 ret = sdt.isDeleted(qualifier4, 0, qualifier4.length, timestamp);
86 assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
87
88 ret = sdt.isDeleted(qualifier1, 0, qualifier1.length, timestamp + 3);
89 assertEquals(DeleteResult.NOT_DELETED, ret);
90 ret = sdt.isDeleted(qualifier2, 0, qualifier2.length, timestamp - 2);
91 assertEquals(DeleteResult.NOT_DELETED, ret);
92 ret = sdt.isDeleted(qualifier3, 0, qualifier3.length, timestamp - 5);
93 assertEquals(DeleteResult.NOT_DELETED, ret);
94 ret = sdt.isDeleted(qualifier4, 0, qualifier4.length, timestamp + 8);
95 assertEquals(DeleteResult.NOT_DELETED, ret);
96 }
97
98
99 public void testDelete_DeleteColumn() {
100 byte [] qualifier = Bytes.toBytes("qualifier");
101 deleteType = KeyValue.Type.Delete.getCode();
102
103 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
104
105 timestamp -= 5;
106 deleteType = KeyValue.Type.DeleteColumn.getCode();
107 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
108
109 timestamp -= 5;
110 DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
111 assertEquals(DeleteResult.COLUMN_DELETED, ret);
112 }
113
114
115 public void testDeleteColumn_Delete() {
116 byte [] qualifier = Bytes.toBytes("qualifier");
117 deleteType = KeyValue.Type.DeleteColumn.getCode();
118
119 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
120
121 qualifier = Bytes.toBytes("qualifier1");
122 deleteType = KeyValue.Type.Delete.getCode();
123 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
124
125 DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
126 assertEquals( DeleteResult.VERSION_DELETED, ret);
127 }
128
129
130
131
132 public void testDelete_KeepDelete(){
133 byte [] qualifier = Bytes.toBytes("qualifier");
134 deleteType = KeyValue.Type.Delete.getCode();
135
136 sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
137 sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
138 assertEquals(false ,sdt.isEmpty());
139 }
140
141 public void testDelete_KeepVersionZero(){
142 byte [] qualifier = Bytes.toBytes("qualifier");
143 deleteType = KeyValue.Type.Delete.getCode();
144
145 long deleteTimestamp = 10;
146 long valueTimestamp = 0;
147
148 sdt.reset();
149 sdt.add(qualifier, 0, qualifier.length, deleteTimestamp, deleteType);
150 DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, valueTimestamp);
151 assertEquals(DeleteResult.NOT_DELETED, ret);
152 }
153
154
155 }
156