1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.regionserver;
20
21 import java.io.DataInput;
22 import java.io.DataOutput;
23 import java.io.IOException;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.KeyValue;
27 import org.apache.hadoop.hbase.KeyValue.Type;
28 import org.apache.hadoop.hbase.io.TimeRange;
29 import org.apache.hadoop.hbase.util.Bytes;
30 import org.apache.hadoop.io.Writable;
31
32
33
34
35
36
37
38
39 @InterfaceAudience.Private
40 public class TimeRangeTracker implements Writable {
41
42 long minimumTimestamp = -1;
43 long maximumTimestamp = -1;
44
45
46
47
48
49 public TimeRangeTracker() {
50
51 }
52
53
54
55
56
57 public TimeRangeTracker(final TimeRangeTracker trt) {
58 this.minimumTimestamp = trt.getMinimumTimestamp();
59 this.maximumTimestamp = trt.getMaximumTimestamp();
60 }
61
62 public TimeRangeTracker(long minimumTimestamp, long maximumTimestamp) {
63 this.minimumTimestamp = minimumTimestamp;
64 this.maximumTimestamp = maximumTimestamp;
65 }
66
67
68
69
70
71
72
73 public void includeTimestamp(final KeyValue kv) {
74 includeTimestamp(kv.getTimestamp());
75 if (kv.isDeleteColumnOrFamily()) {
76 includeTimestamp(0);
77 }
78 }
79
80
81
82
83
84
85
86 public void includeTimestamp(final byte[] key) {
87 includeTimestamp(Bytes.toLong(key,key.length-KeyValue.TIMESTAMP_TYPE_SIZE));
88 int type = key[key.length - 1];
89 if (type == Type.DeleteColumn.getCode() ||
90 type == Type.DeleteFamily.getCode()) {
91 includeTimestamp(0);
92 }
93 }
94
95
96
97
98
99 private synchronized void includeTimestamp(final long timestamp) {
100 if (maximumTimestamp == -1) {
101 minimumTimestamp = timestamp;
102 maximumTimestamp = timestamp;
103 }
104 else if (minimumTimestamp > timestamp) {
105 minimumTimestamp = timestamp;
106 }
107 else if (maximumTimestamp < timestamp) {
108 maximumTimestamp = timestamp;
109 }
110 return;
111 }
112
113
114
115
116
117
118 public synchronized boolean includesTimeRange(final TimeRange tr) {
119 return (this.minimumTimestamp < tr.getMax() &&
120 this.maximumTimestamp >= tr.getMin());
121 }
122
123
124
125
126 public synchronized long getMinimumTimestamp() {
127 return minimumTimestamp;
128 }
129
130
131
132
133 public synchronized long getMaximumTimestamp() {
134 return maximumTimestamp;
135 }
136
137 public synchronized void write(final DataOutput out) throws IOException {
138 out.writeLong(minimumTimestamp);
139 out.writeLong(maximumTimestamp);
140 }
141
142 public synchronized void readFields(final DataInput in) throws IOException {
143 this.minimumTimestamp = in.readLong();
144 this.maximumTimestamp = in.readLong();
145 }
146
147 @Override
148 public synchronized String toString() {
149 return "[" + minimumTimestamp + "," + maximumTimestamp + "]";
150 }
151 }