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