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