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 String SOURCE_SIZE_OF_LOG_QUEUE = "source.sizeOfLogQueue";
36 public static final String SOURCE_AGE_OF_LAST_SHIPPED_OP = "source.ageOfLastShippedOp";
37 public static final String SOURCE_LOG_EDITS_READ = "source.logEditsRead";
38 public static final String SOURCE_LOG_EDITS_FILTERED = "source.logEditsFiltered";
39 public static final String SOURCE_SHIPPED_BATCHES = "source.shippedBatches";
40 public static final String SOURCE_SHIPPED_KBS = "source.shippedKBs";
41 public static final String SOURCE_SHIPPED_OPS = "source.shippedOps";
42 public static final String SOURCE_LOG_READ_IN_BYTES = "source.logReadInBytes";
43
44 public static final Log LOG = LogFactory.getLog(MetricsSource.class);
45 private String id;
46
47 private long lastTimestamp = 0;
48 private int lastQueueSize = 0;
49
50 private String sizeOfLogQueKey;
51 private String ageOfLastShippedOpKey;
52 private String logEditsReadKey;
53 private String logEditsFilteredKey;
54 private final String shippedBatchesKey;
55 private final String shippedOpsKey;
56 private final String shippedKBsKey;
57 private final String logReadInBytesKey;
58
59 private MetricsReplicationSource rms;
60
61
62
63
64
65
66 public MetricsSource(String id) {
67 this.id = id;
68
69 sizeOfLogQueKey = "source." + id + ".sizeOfLogQueue";
70 ageOfLastShippedOpKey = "source." + id + ".ageOfLastShippedOp";
71 logEditsReadKey = "source." + id + ".logEditsRead";
72 logEditsFilteredKey = "source." + id + ".logEditsFiltered";
73 shippedBatchesKey = "source." + this.id + ".shippedBatches";
74 shippedOpsKey = "source." + this.id + ".shippedOps";
75 shippedKBsKey = "source." + this.id + ".shippedKBs";
76 logReadInBytesKey = "source." + this.id + ".logReadInBytes";
77 rms = CompatibilitySingletonFactory.getInstance(MetricsReplicationSource.class);
78 }
79
80
81
82
83
84
85 public void setAgeOfLastShippedOp(long timestamp) {
86 long age = EnvironmentEdgeManager.currentTimeMillis() - timestamp;
87 rms.setGauge(ageOfLastShippedOpKey, age);
88 rms.setGauge(SOURCE_AGE_OF_LAST_SHIPPED_OP, age);
89 this.lastTimestamp = timestamp;
90 }
91
92
93
94
95
96 public void refreshAgeOfLastShippedOp() {
97 if (this.lastTimestamp > 0) {
98 setAgeOfLastShippedOp(this.lastTimestamp);
99 }
100 }
101
102
103
104
105
106
107 public void setSizeOfLogQueue(int size) {
108 rms.setGauge(sizeOfLogQueKey, size);
109 rms.incGauge(SOURCE_SIZE_OF_LOG_QUEUE, size - lastQueueSize);
110 lastQueueSize = size;
111 }
112
113
114
115
116
117
118 private void incrLogEditsRead(long delta) {
119 rms.incCounters(logEditsReadKey, delta);
120 rms.incCounters(SOURCE_LOG_EDITS_READ, delta);
121 }
122
123
124 public void incrLogEditsRead() {
125 incrLogEditsRead(1);
126 }
127
128
129
130
131
132
133 private void incrLogEditsFiltered(long delta) {
134 rms.incCounters(logEditsFilteredKey, delta);
135 rms.incCounters(SOURCE_LOG_EDITS_FILTERED, delta);
136 }
137
138
139 public void incrLogEditsFiltered() {
140 incrLogEditsFiltered(1);
141 }
142
143
144
145
146
147
148 public void shipBatch(long batchSize, int sizeInKB) {
149 rms.incCounters(shippedBatchesKey, 1);
150 rms.incCounters(SOURCE_SHIPPED_BATCHES, 1);
151 rms.incCounters(shippedOpsKey, batchSize);
152 rms.incCounters(SOURCE_SHIPPED_OPS, batchSize);
153 rms.incCounters(shippedKBsKey, sizeInKB);
154 rms.incCounters(SOURCE_SHIPPED_KBS, sizeInKB);
155 }
156
157
158 public void incrLogReadInBytes(long readInBytes) {
159 rms.incCounters(logReadInBytesKey, readInBytes);
160 rms.incCounters(SOURCE_LOG_READ_IN_BYTES, readInBytes);
161 }
162
163
164 public void clear() {
165 rms.removeMetric(sizeOfLogQueKey);
166 rms.decGauge(SOURCE_SIZE_OF_LOG_QUEUE, lastQueueSize);
167 lastQueueSize = 0;
168 rms.removeMetric(ageOfLastShippedOpKey);
169
170 rms.removeMetric(logEditsFilteredKey);
171 rms.removeMetric(logEditsReadKey);
172
173 }
174 }