001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.replication.regionserver; 019 020import org.apache.hadoop.metrics2.lib.MutableFastCounter; 021import org.apache.hadoop.metrics2.lib.MutableGaugeLong; 022import org.apache.hadoop.metrics2.lib.MutableHistogram; 023import org.apache.yetus.audience.InterfaceAudience; 024 025@InterfaceAudience.Private 026public class MetricsReplicationSourceSourceImpl implements MetricsReplicationSourceSource { 027 028 private final MetricsReplicationSourceImpl rms; 029 private final String id; 030 private final String sizeOfLogQueueKey; 031 private final String ageOfLastShippedOpKey; 032 private final String logReadInEditsKey; 033 private final String logEditsFilteredKey; 034 private final String shippedBatchesKey; 035 private final String shippedOpsKey; 036 private String keyPrefix; 037 038 /** 039 * @deprecated since 1.3.0. Use {@link #shippedBytesKey} instead. 040 */ 041 @Deprecated 042 private final String shippedKBsKey; 043 private final String shippedBytesKey; 044 private final String logReadInBytesKey; 045 private final String shippedHFilesKey; 046 private final String sizeOfHFileRefsQueueKey; 047 048 private final MutableHistogram ageOfLastShippedOpHist; 049 private final MutableGaugeLong sizeOfLogQueueGauge; 050 private final MutableFastCounter logReadInEditsCounter; 051 private final MutableFastCounter logEditsFilteredCounter; 052 private final MutableFastCounter shippedBatchesCounter; 053 private final MutableFastCounter shippedOpsCounter; 054 private final MutableFastCounter shippedKBsCounter; 055 private final MutableFastCounter shippedBytesCounter; 056 private final MutableFastCounter logReadInBytesCounter; 057 private final MutableFastCounter shippedHFilesCounter; 058 private final MutableGaugeLong sizeOfHFileRefsQueueGauge; 059 060 private final String unknownFileLengthKey; 061 private final String uncleanlyClosedKey; 062 private final String uncleanlySkippedBytesKey; 063 private final String restartedKey; 064 private final String repeatedBytesKey; 065 private final String completedLogsKey; 066 private final String completedRecoveryKey; 067 private final MutableFastCounter unknownFileLengthForClosedWAL; 068 private final MutableFastCounter uncleanlyClosedWAL; 069 private final MutableFastCounter uncleanlyClosedSkippedBytes; 070 private final MutableFastCounter restartWALReading; 071 private final MutableFastCounter repeatedFileBytes; 072 private final MutableFastCounter completedWAL; 073 private final MutableFastCounter completedRecoveryQueue; 074 075 public MetricsReplicationSourceSourceImpl(MetricsReplicationSourceImpl rms, String id) { 076 this.rms = rms; 077 this.id = id; 078 this.keyPrefix = "source." + this.id + "."; 079 080 ageOfLastShippedOpKey = this.keyPrefix + "ageOfLastShippedOp"; 081 ageOfLastShippedOpHist = rms.getMetricsRegistry().getHistogram(ageOfLastShippedOpKey); 082 083 sizeOfLogQueueKey = this.keyPrefix + "sizeOfLogQueue"; 084 sizeOfLogQueueGauge = rms.getMetricsRegistry().getGauge(sizeOfLogQueueKey, 0L); 085 086 shippedBatchesKey = this.keyPrefix + "shippedBatches"; 087 shippedBatchesCounter = rms.getMetricsRegistry().getCounter(shippedBatchesKey, 0L); 088 089 shippedOpsKey = this.keyPrefix + "shippedOps"; 090 shippedOpsCounter = rms.getMetricsRegistry().getCounter(shippedOpsKey, 0L); 091 092 shippedKBsKey = this.keyPrefix + "shippedKBs"; 093 shippedKBsCounter = rms.getMetricsRegistry().getCounter(shippedKBsKey, 0L); 094 095 shippedBytesKey = this.keyPrefix + "shippedBytes"; 096 shippedBytesCounter = rms.getMetricsRegistry().getCounter(shippedBytesKey, 0L); 097 098 logReadInBytesKey = this.keyPrefix + "logReadInBytes"; 099 logReadInBytesCounter = rms.getMetricsRegistry().getCounter(logReadInBytesKey, 0L); 100 101 logReadInEditsKey = this.keyPrefix + "logEditsRead"; 102 logReadInEditsCounter = rms.getMetricsRegistry().getCounter(logReadInEditsKey, 0L); 103 104 logEditsFilteredKey = this.keyPrefix + "logEditsFiltered"; 105 logEditsFilteredCounter = rms.getMetricsRegistry().getCounter(logEditsFilteredKey, 0L); 106 107 shippedHFilesKey = this.keyPrefix + "shippedHFiles"; 108 shippedHFilesCounter = rms.getMetricsRegistry().getCounter(shippedHFilesKey, 0L); 109 110 sizeOfHFileRefsQueueKey = this.keyPrefix + "sizeOfHFileRefsQueue"; 111 sizeOfHFileRefsQueueGauge = rms.getMetricsRegistry().getGauge(sizeOfHFileRefsQueueKey, 0L); 112 113 unknownFileLengthKey = this.keyPrefix + "closedLogsWithUnknownFileLength"; 114 unknownFileLengthForClosedWAL = rms.getMetricsRegistry().getCounter(unknownFileLengthKey, 0L); 115 116 uncleanlyClosedKey = this.keyPrefix + "uncleanlyClosedLogs"; 117 uncleanlyClosedWAL = rms.getMetricsRegistry().getCounter(uncleanlyClosedKey, 0L); 118 119 uncleanlySkippedBytesKey = this.keyPrefix + "ignoredUncleanlyClosedLogContentsInBytes"; 120 uncleanlyClosedSkippedBytes = rms.getMetricsRegistry().getCounter(uncleanlySkippedBytesKey, 0L); 121 122 restartedKey = this.keyPrefix + "restartedLogReading"; 123 restartWALReading = rms.getMetricsRegistry().getCounter(restartedKey, 0L); 124 125 repeatedBytesKey = this.keyPrefix + "repeatedLogFileBytes"; 126 repeatedFileBytes = rms.getMetricsRegistry().getCounter(repeatedBytesKey, 0L); 127 128 completedLogsKey = this.keyPrefix + "completedLogs"; 129 completedWAL = rms.getMetricsRegistry().getCounter(completedLogsKey, 0L); 130 131 completedRecoveryKey = this.keyPrefix + "completedRecoverQueues"; 132 completedRecoveryQueue = rms.getMetricsRegistry().getCounter(completedRecoveryKey, 0L); 133 } 134 135 @Override public void setLastShippedAge(long age) { 136 ageOfLastShippedOpHist.add(age); 137 } 138 139 @Override public void incrSizeOfLogQueue(int size) { 140 sizeOfLogQueueGauge.incr(size); 141 } 142 143 @Override public void decrSizeOfLogQueue(int size) { 144 sizeOfLogQueueGauge.decr(size); 145 } 146 147 @Override public void incrLogReadInEdits(long size) { 148 logReadInEditsCounter.incr(size); 149 } 150 151 @Override public void incrLogEditsFiltered(long size) { 152 logEditsFilteredCounter.incr(size); 153 } 154 155 @Override public void incrBatchesShipped(int batches) { 156 shippedBatchesCounter.incr(batches); 157 } 158 159 @Override public void incrOpsShipped(long ops) { 160 shippedOpsCounter.incr(ops); 161 } 162 163 @Override public void incrShippedBytes(long size) { 164 shippedBytesCounter.incr(size); 165 MetricsReplicationGlobalSourceSource 166 .incrementKBsCounter(shippedBytesCounter, shippedKBsCounter); 167 } 168 169 @Override public void incrLogReadInBytes(long size) { 170 logReadInBytesCounter.incr(size); 171 } 172 173 @Override public void clear() { 174 rms.removeMetric(ageOfLastShippedOpKey); 175 176 rms.removeMetric(sizeOfLogQueueKey); 177 178 rms.removeMetric(shippedBatchesKey); 179 rms.removeMetric(shippedOpsKey); 180 rms.removeMetric(shippedKBsKey); 181 rms.removeMetric(shippedBytesKey); 182 183 rms.removeMetric(logReadInBytesKey); 184 rms.removeMetric(logReadInEditsKey); 185 186 rms.removeMetric(logEditsFilteredKey); 187 188 rms.removeMetric(shippedHFilesKey); 189 rms.removeMetric(sizeOfHFileRefsQueueKey); 190 191 rms.removeMetric(unknownFileLengthKey); 192 rms.removeMetric(uncleanlyClosedKey); 193 rms.removeMetric(uncleanlySkippedBytesKey); 194 rms.removeMetric(restartedKey); 195 rms.removeMetric(repeatedBytesKey); 196 rms.removeMetric(completedLogsKey); 197 rms.removeMetric(completedRecoveryKey); 198 } 199 200 @Override 201 public long getLastShippedAge() { 202 return ageOfLastShippedOpHist.getMax(); 203 } 204 205 @Override 206 public void incrHFilesShipped(long hfiles) { 207 shippedHFilesCounter.incr(hfiles); 208 } 209 210 @Override 211 public void incrSizeOfHFileRefsQueue(long size) { 212 sizeOfHFileRefsQueueGauge.incr(size); 213 } 214 215 @Override 216 public void decrSizeOfHFileRefsQueue(long size) { 217 sizeOfHFileRefsQueueGauge.decr(size); 218 } 219 220 @Override 221 public int getSizeOfLogQueue() { 222 return (int)sizeOfLogQueueGauge.value(); 223 } 224 225 @Override 226 public void incrUnknownFileLengthForClosedWAL() { 227 unknownFileLengthForClosedWAL.incr(1L); 228 } 229 230 @Override 231 public void incrUncleanlyClosedWALs() { 232 uncleanlyClosedWAL.incr(1L); 233 } 234 235 @Override 236 public void incrBytesSkippedInUncleanlyClosedWALs(final long bytes) { 237 uncleanlyClosedSkippedBytes.incr(bytes); 238 } 239 240 @Override 241 public void incrRestartedWALReading() { 242 restartWALReading.incr(1L); 243 } 244 245 @Override 246 public void incrRepeatedFileBytes(final long bytes) { 247 repeatedFileBytes.incr(bytes); 248 } 249 250 @Override 251 public void incrCompletedWAL() { 252 completedWAL.incr(1L); 253 } 254 255 @Override 256 public void incrCompletedRecoveryQueue() { 257 completedRecoveryQueue.incr(1L); 258 } 259 260 @Override 261 public void incrFailedRecoveryQueue() {/*no op*/} 262 263 @Override 264 public void init() { 265 rms.init(); 266 } 267 268 @Override 269 public void setGauge(String gaugeName, long value) { 270 rms.setGauge(this.keyPrefix + gaugeName, value); 271 } 272 273 @Override 274 public void incGauge(String gaugeName, long delta) { 275 rms.incGauge(this.keyPrefix + gaugeName, delta); 276 } 277 278 @Override 279 public void decGauge(String gaugeName, long delta) { 280 rms.decGauge(this.keyPrefix + gaugeName, delta); 281 } 282 283 @Override 284 public void removeMetric(String key) { 285 rms.removeMetric(this.keyPrefix + key); 286 } 287 288 @Override 289 public void incCounters(String counterName, long delta) { 290 rms.incCounters(this.keyPrefix + counterName, delta); 291 } 292 293 @Override 294 public void updateHistogram(String name, long value) { 295 rms.updateHistogram(this.keyPrefix + name, value); 296 } 297 298 @Override 299 public String getMetricsContext() { 300 return rms.getMetricsContext(); 301 } 302 303 @Override 304 public String getMetricsDescription() { 305 return rms.getMetricsDescription(); 306 } 307 308 @Override 309 public String getMetricsJmxContext() { 310 return rms.getMetricsJmxContext(); 311 } 312 313 @Override 314 public String getMetricsName() { 315 return rms.getMetricsName(); 316 } 317}