1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.replication.regionserver;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.hadoop.hbase.classification.InterfaceAudience;
27 import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
28 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
29 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
30
31
32
33
34
35 @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.REPLICATION)
36 public class MetricsSource {
37
38 private static final Log LOG = LogFactory.getLog(MetricsSource.class);
39
40
41 private Map<String, Long> lastTimeStamps = new HashMap<String, Long>();
42 private int lastQueueSize = 0;
43 private long lastHFileRefsQueueSize = 0;
44 private String id;
45
46 private final MetricsReplicationSourceSource singleSourceSource;
47 private final MetricsReplicationSourceSource globalSourceSource;
48
49
50
51
52
53
54
55 public MetricsSource(String id) {
56 this.id = id;
57 singleSourceSource =
58 CompatibilitySingletonFactory.getInstance(MetricsReplicationSourceFactory.class)
59 .getSource(id);
60 globalSourceSource = CompatibilitySingletonFactory.getInstance(MetricsReplicationSourceFactory.class).getGlobalSource();
61 }
62
63
64
65
66
67
68 public void setAgeOfLastShippedOp(long timestamp, String walGroup) {
69 long age = EnvironmentEdgeManager.currentTime() - timestamp;
70 singleSourceSource.setLastShippedAge(age);
71 globalSourceSource.setLastShippedAge(age);
72 this.lastTimeStamps.put(walGroup, timestamp);
73 }
74
75
76
77
78
79
80 public void refreshAgeOfLastShippedOp(String walGroupId) {
81 Long lastTimestamp = this.lastTimeStamps.get(walGroupId);
82 if (lastTimestamp == null) {
83 this.lastTimeStamps.put(walGroupId, 0L);
84 lastTimestamp = 0L;
85 }
86 if (lastTimestamp > 0) {
87 setAgeOfLastShippedOp(lastTimestamp, walGroupId);
88 }
89 }
90
91
92
93
94 public void incrSizeOfLogQueue() {
95 singleSourceSource.incrSizeOfLogQueue(1);
96 globalSourceSource.incrSizeOfLogQueue(1);
97 }
98
99 public void decrSizeOfLogQueue() {
100 singleSourceSource.decrSizeOfLogQueue(1);
101 globalSourceSource.decrSizeOfLogQueue(1);
102 }
103
104
105
106
107
108
109 private void incrLogEditsRead(long delta) {
110 singleSourceSource.incrLogReadInEdits(delta);
111 globalSourceSource.incrLogReadInEdits(delta);
112 }
113
114
115 public void incrLogEditsRead() {
116 incrLogEditsRead(1);
117 }
118
119
120
121
122
123
124 public void incrLogEditsFiltered(long delta) {
125 singleSourceSource.incrLogEditsFiltered(delta);
126 globalSourceSource.incrLogEditsFiltered(delta);
127 }
128
129
130 public void incrLogEditsFiltered() {
131 incrLogEditsFiltered(1);
132 }
133
134
135
136
137
138
139 public void shipBatch(long batchSize, int sizeInBytes) {
140 singleSourceSource.incrBatchesShipped(1);
141 globalSourceSource.incrBatchesShipped(1);
142
143 singleSourceSource.incrOpsShipped(batchSize);
144 globalSourceSource.incrOpsShipped(batchSize);
145
146 singleSourceSource.incrShippedBytes(sizeInBytes);
147 globalSourceSource.incrShippedBytes(sizeInBytes);
148 }
149
150
151
152
153
154
155
156 public void shipBatch(long batchSize, int sizeInBytes, long hfiles) {
157 shipBatch(batchSize, sizeInBytes);
158 singleSourceSource.incrHFilesShipped(hfiles);
159 globalSourceSource.incrHFilesShipped(hfiles);
160 }
161
162
163 public void incrLogReadInBytes(long readInBytes) {
164 singleSourceSource.incrLogReadInBytes(readInBytes);
165 globalSourceSource.incrLogReadInBytes(readInBytes);
166 }
167
168
169 public void clear() {
170 singleSourceSource.clear();
171 globalSourceSource.decrSizeOfLogQueue(lastQueueSize);
172 globalSourceSource.decrSizeOfHFileRefsQueue(lastHFileRefsQueueSize);
173 lastTimeStamps.clear();
174 lastQueueSize = 0;
175 lastHFileRefsQueueSize = 0;
176 }
177
178
179
180
181
182 public Long getAgeOfLastShippedOp() {
183 return singleSourceSource.getLastShippedAge();
184 }
185
186
187
188
189
190 public int getSizeOfLogQueue() {
191 return singleSourceSource.getSizeOfLogQueue();
192 }
193
194
195
196
197
198 public long getTimeStampOfLastShippedOp() {
199 long lastTimestamp = 0L;
200 for (long ts : lastTimeStamps.values()) {
201 if (ts > lastTimestamp) {
202 lastTimestamp = ts;
203 }
204 }
205 return lastTimestamp;
206 }
207
208
209
210
211
212 public String getPeerID() {
213 return id;
214 }
215
216 public void incrSizeOfHFileRefsQueue(long size) {
217 singleSourceSource.incrSizeOfHFileRefsQueue(size);
218 globalSourceSource.incrSizeOfHFileRefsQueue(size);
219 lastHFileRefsQueueSize = size;
220 }
221
222 public void decrSizeOfHFileRefsQueue(int size) {
223 singleSourceSource.decrSizeOfHFileRefsQueue(size);
224 globalSourceSource.decrSizeOfHFileRefsQueue(size);
225 lastHFileRefsQueueSize -= size;
226 if (lastHFileRefsQueueSize < 0) {
227 lastHFileRefsQueueSize = 0;
228 }
229 }
230
231 public void incrUnknownFileLengthForClosedWAL() {
232 singleSourceSource.incrUnknownFileLengthForClosedWAL();
233 globalSourceSource.incrUnknownFileLengthForClosedWAL();
234 }
235
236 public void incrUncleanlyClosedWALs() {
237 singleSourceSource.incrUncleanlyClosedWALs();
238 globalSourceSource.incrUncleanlyClosedWALs();
239 }
240
241 public void incrBytesSkippedInUncleanlyClosedWALs(final long bytes) {
242 singleSourceSource.incrBytesSkippedInUncleanlyClosedWALs(bytes);
243 globalSourceSource.incrBytesSkippedInUncleanlyClosedWALs(bytes);
244 }
245
246 public void incrRestartedWALReading() {
247 singleSourceSource.incrRestartedWALReading();
248 globalSourceSource.incrRestartedWALReading();
249 }
250
251 public void incrRepeatedFileBytes(final long bytes) {
252 singleSourceSource.incrRepeatedFileBytes(bytes);
253 globalSourceSource.incrRepeatedFileBytes(bytes);
254 }
255
256 public void incrCompletedWAL() {
257 singleSourceSource.incrCompletedWAL();
258 globalSourceSource.incrCompletedWAL();
259 }
260
261 public void incrCompletedRecoveryQueue() {
262 singleSourceSource.incrCompletedRecoveryQueue();
263 globalSourceSource.incrCompletedRecoveryQueue();
264 }
265 }