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