View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.hadoop.hbase.replication.regionserver;
20  
21  import org.apache.hadoop.hbase.metrics.MetricRegistryInfo;
22  import org.apache.hadoop.metrics2.lib.MutableFastCounter;
23  import org.apache.hadoop.metrics2.lib.MutableGaugeInt;
24  import org.apache.hadoop.metrics2.lib.MutableGaugeLong;
25  import org.apache.hadoop.metrics2.lib.MutableHistogram;
26  
27  public class MetricsReplicationGlobalSourceSource implements MetricsReplicationSourceSource{
28    private final MetricsReplicationSourceImpl rms;
29  
30    private final MutableHistogram ageOfLastShippedOpHist;
31    private final MutableGaugeLong sizeOfLogQueueGauge;
32    private final MutableFastCounter logReadInEditsCounter;
33    private final MutableFastCounter logEditsFilteredCounter;
34    private final MutableFastCounter shippedBatchesCounter;
35    private final MutableFastCounter shippedOpsCounter;
36    private final MutableFastCounter shippedBytesCounter;
37    @Deprecated
38    private final MutableFastCounter shippedKBsCounter;
39    private final MutableFastCounter logReadInBytesCounter;
40    private final MutableFastCounter shippedHFilesCounter;
41    private final MutableGaugeLong sizeOfHFileRefsQueueGauge;
42    private final MutableFastCounter unknownFileLengthForClosedWAL;
43    private final MutableFastCounter uncleanlyClosedWAL;
44    private final MutableFastCounter uncleanlyClosedSkippedBytes;
45    private final MutableFastCounter restartWALReading;
46    private final MutableFastCounter repeatedFileBytes;
47    private final MutableFastCounter completedWAL;
48    private final MutableFastCounter completedRecoveryQueue;
49    private final MutableFastCounter failedRecoveryQueue;
50    private final MutableGaugeInt sourceInitializing;
51  
52    public MetricsReplicationGlobalSourceSource(MetricsReplicationSourceImpl rms) {
53      this.rms = rms;
54  
55      ageOfLastShippedOpHist = rms.getMetricsRegistry().getHistogram(SOURCE_AGE_OF_LAST_SHIPPED_OP);
56  
57      sizeOfLogQueueGauge = rms.getMetricsRegistry().getGauge(SOURCE_SIZE_OF_LOG_QUEUE, 0L);
58  
59      shippedBatchesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_BATCHES, 0L);
60  
61      shippedOpsCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_OPS, 0L);
62  
63      shippedKBsCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_KBS, 0L);
64  
65      shippedBytesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_BYTES, 0L);
66  
67      logReadInBytesCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_READ_IN_BYTES, 0L);
68  
69      logReadInEditsCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_READ_IN_EDITS, 0L);
70  
71      logEditsFilteredCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_EDITS_FILTERED, 0L);
72  
73      shippedHFilesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_HFILES, 0L);
74  
75      sizeOfHFileRefsQueueGauge =
76          rms.getMetricsRegistry().getGauge(SOURCE_SIZE_OF_HFILE_REFS_QUEUE, 0L);
77  
78      unknownFileLengthForClosedWAL = rms.getMetricsRegistry().getCounter(SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH, 0L);
79      uncleanlyClosedWAL = rms.getMetricsRegistry().getCounter(SOURCE_UNCLEANLY_CLOSED_LOGS, 0L);
80      uncleanlyClosedSkippedBytes = rms.getMetricsRegistry().getCounter(SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES, 0L);
81      restartWALReading = rms.getMetricsRegistry().getCounter(SOURCE_RESTARTED_LOG_READING, 0L);
82      repeatedFileBytes = rms.getMetricsRegistry().getCounter(SOURCE_REPEATED_LOG_FILE_BYTES, 0L);
83      completedWAL = rms.getMetricsRegistry().getCounter(SOURCE_COMPLETED_LOGS, 0L);
84      completedRecoveryQueue = rms.getMetricsRegistry().getCounter(SOURCE_COMPLETED_RECOVERY_QUEUES, 0L);
85      failedRecoveryQueue = rms.getMetricsRegistry()
86          .getCounter(SOURCE_FAILED_RECOVERY_QUEUES, 0L);
87      sourceInitializing = rms.getMetricsRegistry().getGaugeInt(SOURCE_INITIALIZING, 0);
88    }
89  
90    @Override public void setLastShippedAge(long age) {
91      ageOfLastShippedOpHist.add(age);
92    }
93  
94    @Override public void incrSizeOfLogQueue(int size) {
95      sizeOfLogQueueGauge.incr(size);
96    }
97  
98    @Override public void decrSizeOfLogQueue(int size) {
99      sizeOfLogQueueGauge.decr(size);
100   }
101 
102   @Override public void incrLogReadInEdits(long size) {
103     logReadInEditsCounter.incr(size);
104   }
105 
106   @Override public void incrLogEditsFiltered(long size) {
107     logEditsFilteredCounter.incr(size);
108   }
109 
110   @Override public void incrBatchesShipped(int batches) {
111     shippedBatchesCounter.incr(batches);
112   }
113 
114   @Override public void incrOpsShipped(long ops) {
115     shippedOpsCounter.incr(ops);
116   }
117 
118   @Override public void incrShippedBytes(long size) {
119     shippedBytesCounter.incr(size);
120     // obtained value maybe smaller than 1024. We should make sure that KB count
121     // eventually picks up even from multiple smaller updates.
122     incrementKBsCounter(shippedBytesCounter, shippedKBsCounter);
123   }
124 
125   static void incrementKBsCounter(MutableFastCounter bytesCounter, MutableFastCounter kbsCounter) {
126     // Following code should be thread-safe.
127     long delta = 0;
128     while(true) {
129       long bytes = bytesCounter.value();
130       delta = (bytes / 1024) - kbsCounter.value();
131       if (delta > 0) {
132         kbsCounter.incr(delta);
133       } else {
134         break;
135       }
136     }
137   }
138 
139   @Override public void incrLogReadInBytes(long size) {
140     logReadInBytesCounter.incr(size);
141   }
142 
143   @Override public void clear() {
144   }
145 
146   @Override
147   public long getLastShippedAge() {
148     return ageOfLastShippedOpHist.getMax();
149   }
150 
151   @Override public void incrHFilesShipped(long hfiles) {
152     shippedHFilesCounter.incr(hfiles);
153   }
154 
155   @Override
156   public void incrSizeOfHFileRefsQueue(long size) {
157     sizeOfHFileRefsQueueGauge.incr(size);
158   }
159 
160   @Override
161   public void decrSizeOfHFileRefsQueue(long size) {
162     sizeOfHFileRefsQueueGauge.decr(size);
163   }
164 
165   @Override
166   public int getSizeOfLogQueue() {
167     return (int)sizeOfLogQueueGauge.value();
168   }
169 
170   @Override
171   public void incrUnknownFileLengthForClosedWAL() {
172     unknownFileLengthForClosedWAL.incr(1L);
173   }
174   @Override
175   public void incrUncleanlyClosedWALs() {
176     uncleanlyClosedWAL.incr(1L);
177   }
178 
179   @Override
180   public long getUncleanlyClosedWALs() {
181     return uncleanlyClosedWAL.value();
182   }
183 
184   @Override
185   public void incrBytesSkippedInUncleanlyClosedWALs(final long bytes) {
186     uncleanlyClosedSkippedBytes.incr(bytes);
187   }
188   @Override
189   public void incrRestartedWALReading() {
190     restartWALReading.incr(1L);
191   }
192   @Override
193   public void incrRepeatedFileBytes(final long bytes) {
194     repeatedFileBytes.incr(bytes);
195   }
196   @Override
197   public void incrCompletedWAL() {
198     completedWAL.incr(1L);
199   }
200   @Override
201   public void incrCompletedRecoveryQueue() {
202     completedRecoveryQueue.incr(1L);
203   }
204   @Override
205   public void incrFailedRecoveryQueue() {
206     failedRecoveryQueue.incr(1L);
207   }
208 
209   @Override
210   public void setOldestWalAge(long age) {
211     // Not implemented
212   }
213 
214   @Override
215   public long getOldestWalAge() {
216     // Not implemented
217     return 0;
218   }
219 
220   @Override
221   public void incrSourceInitializing() {
222     sourceInitializing.incr(1);
223   }
224 
225   @Override
226   public void decrSourceInitializing() {
227     sourceInitializing.decr(1);
228   }
229 
230   @Override
231   public int getSourceInitializing() {
232     return sourceInitializing.value();
233   }
234 
235   @Override
236   public void init() {
237     rms.init();
238   }
239 
240   @Override
241   public void setGauge(String gaugeName, long value) {
242     rms.setGauge(gaugeName, value);
243   }
244 
245   @Override
246   public void incGauge(String gaugeName, long delta) {
247     rms.incGauge(gaugeName, delta);
248   }
249 
250   @Override
251   public void decGauge(String gaugeName, long delta) {
252     rms.decGauge(gaugeName, delta);
253   }
254 
255   @Override
256   public void removeMetric(String key) {
257     rms.removeMetric(key);
258   }
259 
260   @Override
261   public void incCounters(String counterName, long delta) {
262     rms.incCounters(counterName, delta);
263   }
264 
265   @Override
266   public void updateHistogram(String name, long value) {
267     rms.updateHistogram(name, value);
268   }
269 
270   @Override
271   public String getMetricsContext() {
272     return rms.getMetricsContext();
273   }
274 
275   @Override
276   public String getMetricsDescription() {
277     return rms.getMetricsDescription();
278   }
279 
280   @Override
281   public String getMetricsJmxContext() {
282     return rms.getMetricsJmxContext();
283   }
284 
285   @Override
286   public String getMetricsName() {
287     return rms.getMetricsName();
288   }
289 
290   @Override
291   public MetricRegistryInfo getMetricRegistryInfo() {
292     return new MetricRegistryInfo(getMetricsName(), getMetricsDescription(),
293       getMetricsContext(), getMetricsJmxContext(), true);
294   }
295 }