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.regionserver;
019
020import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
021import org.apache.hadoop.hbase.metrics.Interns;
022import org.apache.hadoop.metrics2.MetricHistogram;
023import org.apache.hadoop.metrics2.MetricsCollector;
024import org.apache.hadoop.metrics2.MetricsRecordBuilder;
025import org.apache.hadoop.metrics2.lib.MutableFastCounter;
026import org.apache.yetus.audience.InterfaceAudience;
027
028/**
029 * Hadoop2 implementation of MetricsRegionServerSource. Implements BaseSource through
030 * BaseSourceImpl, following the pattern
031 */
032@InterfaceAudience.Private
033public class MetricsRegionServerSourceImpl extends BaseSourceImpl
034  implements MetricsRegionServerSource {
035
036  final MetricsRegionServerWrapper rsWrap;
037  private final MetricHistogram putHisto;
038  private final MetricHistogram putBatchHisto;
039  private final MetricHistogram deleteHisto;
040  private final MetricHistogram deleteBatchHisto;
041  private final MetricHistogram checkAndDeleteHisto;
042  private final MetricHistogram checkAndPutHisto;
043  private final MetricHistogram checkAndMutateHisto;
044  private final MetricHistogram getHisto;
045  private final MetricHistogram incrementHisto;
046  private final MetricHistogram appendHisto;
047  private final MetricHistogram replayHisto;
048  private final MetricHistogram scanSizeHisto;
049  private final MetricHistogram scanTimeHisto;
050
051  private final MutableFastCounter blockBytesScannedCount;
052  private final MetricHistogram checkAndMutateBlockBytesScanned;
053  private final MetricHistogram getBlockBytesScanned;
054  private final MetricHistogram incrementBlockBytesScanned;
055  private final MetricHistogram appendBlockBytesScanned;
056  private final MetricHistogram scanBlockBytesScanned;
057
058  private final MutableFastCounter slowPut;
059  private final MutableFastCounter slowDelete;
060  private final MutableFastCounter slowGet;
061  private final MutableFastCounter slowIncrement;
062  private final MutableFastCounter slowAppend;
063
064  // split related metrics
065  private final MutableFastCounter splitRequest;
066  private final MutableFastCounter splitSuccess;
067  private final MetricHistogram splitTimeHisto;
068
069  // flush related metrics
070  private final MetricHistogram flushTimeHisto;
071  private final MetricHistogram flushMemstoreSizeHisto;
072  private final MetricHistogram flushOutputSizeHisto;
073  private final MutableFastCounter flushedMemstoreBytes;
074  private final MutableFastCounter flushedOutputBytes;
075
076  // compaction related metrics
077  private final MetricHistogram compactionTimeHisto;
078  private final MetricHistogram compactionInputFileCountHisto;
079  private final MetricHistogram compactionInputSizeHisto;
080  private final MetricHistogram compactionOutputFileCountHisto;
081  private final MetricHistogram compactionOutputSizeHisto;
082  private final MutableFastCounter compactedInputBytes;
083  private final MutableFastCounter compactedOutputBytes;
084
085  private final MetricHistogram majorCompactionTimeHisto;
086  private final MetricHistogram majorCompactionInputFileCountHisto;
087  private final MetricHistogram majorCompactionInputSizeHisto;
088  private final MetricHistogram majorCompactionOutputFileCountHisto;
089  private final MetricHistogram majorCompactionOutputSizeHisto;
090  private final MutableFastCounter majorCompactedInputBytes;
091  private final MutableFastCounter majorCompactedOutputBytes;
092
093  // pause monitor metrics
094  private final MutableFastCounter infoPauseThresholdExceeded;
095  private final MutableFastCounter warnPauseThresholdExceeded;
096  private final MetricHistogram pausesWithGc;
097  private final MetricHistogram pausesWithoutGc;
098
099  private final MutableFastCounter scannerLeaseExpiredCount;
100
101  public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
102    this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
103  }
104
105  public MetricsRegionServerSourceImpl(String metricsName, String metricsDescription,
106    String metricsContext, String metricsJmxContext, MetricsRegionServerWrapper rsWrap) {
107    super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
108    this.rsWrap = rsWrap;
109
110    putHisto = getMetricsRegistry().newTimeHistogram(PUT_KEY);
111    putBatchHisto = getMetricsRegistry().newTimeHistogram(PUT_BATCH_KEY);
112    slowPut = getMetricsRegistry().newCounter(SLOW_PUT_KEY, SLOW_PUT_DESC, 0L);
113
114    deleteHisto = getMetricsRegistry().newTimeHistogram(DELETE_KEY);
115    slowDelete = getMetricsRegistry().newCounter(SLOW_DELETE_KEY, SLOW_DELETE_DESC, 0L);
116
117    deleteBatchHisto = getMetricsRegistry().newTimeHistogram(DELETE_BATCH_KEY);
118    checkAndDeleteHisto = getMetricsRegistry().newTimeHistogram(CHECK_AND_DELETE_KEY);
119    checkAndPutHisto = getMetricsRegistry().newTimeHistogram(CHECK_AND_PUT_KEY);
120    checkAndMutateHisto = getMetricsRegistry().newTimeHistogram(CHECK_AND_MUTATE_KEY);
121
122    getHisto = getMetricsRegistry().newTimeHistogram(GET_KEY);
123    slowGet = getMetricsRegistry().newCounter(SLOW_GET_KEY, SLOW_GET_DESC, 0L);
124
125    incrementHisto = getMetricsRegistry().newTimeHistogram(INCREMENT_KEY);
126    slowIncrement = getMetricsRegistry().newCounter(SLOW_INCREMENT_KEY, SLOW_INCREMENT_DESC, 0L);
127
128    appendHisto = getMetricsRegistry().newTimeHistogram(APPEND_KEY);
129    slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0L);
130
131    replayHisto = getMetricsRegistry().newTimeHistogram(REPLAY_KEY);
132    scanSizeHisto = getMetricsRegistry().newSizeHistogram(SCAN_SIZE_KEY);
133    scanTimeHisto = getMetricsRegistry().newTimeHistogram(SCAN_TIME_KEY);
134
135    blockBytesScannedCount =
136      getMetricsRegistry().newCounter(BLOCK_BYTES_SCANNED_KEY, BLOCK_BYTES_SCANNED_DESC, 0L);
137    checkAndMutateBlockBytesScanned =
138      getMetricsRegistry().newSizeHistogram(CHECK_AND_MUTATE_BLOCK_BYTES_SCANNED_KEY);
139    getBlockBytesScanned = getMetricsRegistry().newSizeHistogram(GET_BLOCK_BYTES_SCANNED_KEY);
140    incrementBlockBytesScanned =
141      getMetricsRegistry().newSizeHistogram(INCREMENT_BLOCK_BYTES_SCANNED_KEY);
142    appendBlockBytesScanned = getMetricsRegistry().newSizeHistogram(APPEND_BLOCK_BYTES_SCANNED_KEY);
143    scanBlockBytesScanned = getMetricsRegistry().newSizeHistogram(SCAN_BLOCK_BYTES_SCANNED_KEY);
144
145    flushTimeHisto = getMetricsRegistry().newTimeHistogram(FLUSH_TIME, FLUSH_TIME_DESC);
146    flushMemstoreSizeHisto =
147      getMetricsRegistry().newSizeHistogram(FLUSH_MEMSTORE_SIZE, FLUSH_MEMSTORE_SIZE_DESC);
148    flushOutputSizeHisto =
149      getMetricsRegistry().newSizeHistogram(FLUSH_OUTPUT_SIZE, FLUSH_OUTPUT_SIZE_DESC);
150    flushedOutputBytes =
151      getMetricsRegistry().newCounter(FLUSHED_OUTPUT_BYTES, FLUSHED_OUTPUT_BYTES_DESC, 0L);
152    flushedMemstoreBytes =
153      getMetricsRegistry().newCounter(FLUSHED_MEMSTORE_BYTES, FLUSHED_MEMSTORE_BYTES_DESC, 0L);
154
155    compactionTimeHisto =
156      getMetricsRegistry().newTimeHistogram(COMPACTION_TIME, COMPACTION_TIME_DESC);
157    compactionInputFileCountHisto = getMetricsRegistry().newHistogram(COMPACTION_INPUT_FILE_COUNT,
158      COMPACTION_INPUT_FILE_COUNT_DESC);
159    compactionInputSizeHisto =
160      getMetricsRegistry().newSizeHistogram(COMPACTION_INPUT_SIZE, COMPACTION_INPUT_SIZE_DESC);
161    compactionOutputFileCountHisto = getMetricsRegistry().newHistogram(COMPACTION_OUTPUT_FILE_COUNT,
162      COMPACTION_OUTPUT_FILE_COUNT_DESC);
163    compactionOutputSizeHisto =
164      getMetricsRegistry().newSizeHistogram(COMPACTION_OUTPUT_SIZE, COMPACTION_OUTPUT_SIZE_DESC);
165    compactedInputBytes =
166      getMetricsRegistry().newCounter(COMPACTED_INPUT_BYTES, COMPACTED_INPUT_BYTES_DESC, 0L);
167    compactedOutputBytes =
168      getMetricsRegistry().newCounter(COMPACTED_OUTPUT_BYTES, COMPACTED_OUTPUT_BYTES_DESC, 0L);
169
170    majorCompactionTimeHisto =
171      getMetricsRegistry().newTimeHistogram(MAJOR_COMPACTION_TIME, MAJOR_COMPACTION_TIME_DESC);
172    majorCompactionInputFileCountHisto = getMetricsRegistry()
173      .newHistogram(MAJOR_COMPACTION_INPUT_FILE_COUNT, MAJOR_COMPACTION_INPUT_FILE_COUNT_DESC);
174    majorCompactionInputSizeHisto = getMetricsRegistry()
175      .newSizeHistogram(MAJOR_COMPACTION_INPUT_SIZE, MAJOR_COMPACTION_INPUT_SIZE_DESC);
176    majorCompactionOutputFileCountHisto = getMetricsRegistry()
177      .newHistogram(MAJOR_COMPACTION_OUTPUT_FILE_COUNT, MAJOR_COMPACTION_OUTPUT_FILE_COUNT_DESC);
178    majorCompactionOutputSizeHisto = getMetricsRegistry()
179      .newSizeHistogram(MAJOR_COMPACTION_OUTPUT_SIZE, MAJOR_COMPACTION_OUTPUT_SIZE_DESC);
180    majorCompactedInputBytes = getMetricsRegistry().newCounter(MAJOR_COMPACTED_INPUT_BYTES,
181      MAJOR_COMPACTED_INPUT_BYTES_DESC, 0L);
182    majorCompactedOutputBytes = getMetricsRegistry().newCounter(MAJOR_COMPACTED_OUTPUT_BYTES,
183      MAJOR_COMPACTED_OUTPUT_BYTES_DESC, 0L);
184
185    splitTimeHisto = getMetricsRegistry().newTimeHistogram(SPLIT_KEY);
186    splitRequest = getMetricsRegistry().newCounter(SPLIT_REQUEST_KEY, SPLIT_REQUEST_DESC, 0L);
187    splitSuccess = getMetricsRegistry().newCounter(SPLIT_SUCCESS_KEY, SPLIT_SUCCESS_DESC, 0L);
188
189    // pause monitor metrics
190    infoPauseThresholdExceeded =
191      getMetricsRegistry().newCounter(INFO_THRESHOLD_COUNT_KEY, INFO_THRESHOLD_COUNT_DESC, 0L);
192    warnPauseThresholdExceeded =
193      getMetricsRegistry().newCounter(WARN_THRESHOLD_COUNT_KEY, WARN_THRESHOLD_COUNT_DESC, 0L);
194    pausesWithGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITH_GC_KEY);
195    pausesWithoutGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITHOUT_GC_KEY);
196
197    scannerLeaseExpiredCount = getMetricsRegistry().newCounter(SCANNER_LEASE_EXPIRED_COUNT,
198      SCANNER_LEASE_EXPIRED_COUNT_DESC, 0L);
199  }
200
201  @Override
202  public void updatePut(long t) {
203    putHisto.add(t);
204  }
205
206  @Override
207  public void updateDelete(long t) {
208    deleteHisto.add(t);
209  }
210
211  @Override
212  public void updateGet(long t, long blockBytesScanned) {
213    getHisto.add(t);
214    if (blockBytesScanned > 0) {
215      blockBytesScannedCount.incr(blockBytesScanned);
216      getBlockBytesScanned.add(blockBytesScanned);
217    }
218  }
219
220  @Override
221  public void updateIncrement(long t, long blockBytesScanned) {
222    incrementHisto.add(t);
223    if (blockBytesScanned > 0) {
224      blockBytesScannedCount.incr(blockBytesScanned);
225      incrementBlockBytesScanned.add(blockBytesScanned);
226    }
227  }
228
229  @Override
230  public void updateAppend(long t, long blockBytesScanned) {
231    appendHisto.add(t);
232    if (blockBytesScanned > 0) {
233      blockBytesScannedCount.incr(blockBytesScanned);
234      appendBlockBytesScanned.add(blockBytesScanned);
235    }
236  }
237
238  @Override
239  public void updateReplay(long t) {
240    replayHisto.add(t);
241  }
242
243  @Override
244  public void updateScan(long time, long responseSize, long blockBytesScanned) {
245    scanTimeHisto.add(time);
246    scanSizeHisto.add(responseSize);
247    if (blockBytesScanned > 0) {
248      blockBytesScannedCount.incr(blockBytesScanned);
249      scanBlockBytesScanned.add(blockBytesScanned);
250    }
251  }
252
253  @Override
254  public void incrSlowPut() {
255    slowPut.incr();
256  }
257
258  @Override
259  public void incrSlowDelete() {
260    slowDelete.incr();
261  }
262
263  @Override
264  public void incrSlowGet() {
265    slowGet.incr();
266  }
267
268  @Override
269  public void incrSlowIncrement() {
270    slowIncrement.incr();
271  }
272
273  @Override
274  public void incrSlowAppend() {
275    slowAppend.incr();
276  }
277
278  @Override
279  public void incrSplitRequest() {
280    splitRequest.incr();
281  }
282
283  @Override
284  public void incrSplitSuccess() {
285    splitSuccess.incr();
286  }
287
288  @Override
289  public void updateSplitTime(long t) {
290    splitTimeHisto.add(t);
291  }
292
293  @Override
294  public void updateFlushTime(long t) {
295    flushTimeHisto.add(t);
296  }
297
298  @Override
299  public void updateFlushMemStoreSize(long bytes) {
300    flushMemstoreSizeHisto.add(bytes);
301    flushedMemstoreBytes.incr(bytes);
302  }
303
304  @Override
305  public void updateFlushOutputSize(long bytes) {
306    flushOutputSizeHisto.add(bytes);
307    flushedOutputBytes.incr(bytes);
308  }
309
310  @Override
311  public void updateCompactionTime(boolean isMajor, long t) {
312    compactionTimeHisto.add(t);
313    if (isMajor) {
314      majorCompactionTimeHisto.add(t);
315    }
316  }
317
318  @Override
319  public void updateCompactionInputFileCount(boolean isMajor, long c) {
320    compactionInputFileCountHisto.add(c);
321    if (isMajor) {
322      majorCompactionInputFileCountHisto.add(c);
323    }
324  }
325
326  @Override
327  public void updateCompactionInputSize(boolean isMajor, long bytes) {
328    compactionInputSizeHisto.add(bytes);
329    compactedInputBytes.incr(bytes);
330    if (isMajor) {
331      majorCompactionInputSizeHisto.add(bytes);
332      majorCompactedInputBytes.incr(bytes);
333    }
334  }
335
336  @Override
337  public void updateCompactionOutputFileCount(boolean isMajor, long c) {
338    compactionOutputFileCountHisto.add(c);
339    if (isMajor) {
340      majorCompactionOutputFileCountHisto.add(c);
341    }
342  }
343
344  @Override
345  public void updateCompactionOutputSize(boolean isMajor, long bytes) {
346    compactionOutputSizeHisto.add(bytes);
347    compactedOutputBytes.incr(bytes);
348    if (isMajor) {
349      majorCompactionOutputSizeHisto.add(bytes);
350      majorCompactedOutputBytes.incr(bytes);
351    }
352  }
353
354  @Override
355  public void incrScannerLeaseExpired() {
356    scannerLeaseExpiredCount.incr();
357  }
358
359  /**
360   * Yes this is a get function that doesn't return anything. Thanks Hadoop for breaking all
361   * expectations of java programmers. Instead of returning anything Hadoop metrics expects
362   * getMetrics to push the metrics into the collector.
363   * @param metricsCollector Collector to accept metrics
364   * @param all              push all or only changed?
365   */
366  @Override
367  public void getMetrics(MetricsCollector metricsCollector, boolean all) {
368    MetricsRecordBuilder mrb = metricsCollector.addRecord(metricsName);
369
370    // rsWrap can be null because this function is called inside of init.
371    if (rsWrap != null) {
372      MetricsRecordBuilder metricsRecordBuilder = addGaugesToMetricsRecordBuilder(mrb);
373      metricsRecordBuilder
374        .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC),
375          rsWrap.getTotalRequestCount())
376        .addCounter(
377          Interns.info(TOTAL_ROW_ACTION_REQUEST_COUNT, TOTAL_ROW_ACTION_REQUEST_COUNT_DESC),
378          rsWrap.getTotalRowActionRequestCount())
379        .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC),
380          rsWrap.getReadRequestsCount())
381        .addCounter(Interns.info(CP_REQUEST_COUNT, CP_REQUEST_COUNT_DESC),
382          rsWrap.getCpRequestsCount())
383        .addCounter(Interns.info(FILTERED_READ_REQUEST_COUNT, FILTERED_READ_REQUEST_COUNT_DESC),
384          rsWrap.getFilteredReadRequestsCount())
385        .addCounter(Interns.info(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC),
386          rsWrap.getWriteRequestsCount())
387        .addCounter(Interns.info(RPC_GET_REQUEST_COUNT, RPC_GET_REQUEST_COUNT_DESC),
388          rsWrap.getRpcGetRequestsCount())
389        .addCounter(Interns.info(RPC_FULL_SCAN_REQUEST_COUNT, RPC_FULL_SCAN_REQUEST_COUNT_DESC),
390          rsWrap.getRpcFullScanRequestsCount())
391        .addCounter(Interns.info(RPC_SCAN_REQUEST_COUNT, RPC_SCAN_REQUEST_COUNT_DESC),
392          rsWrap.getRpcScanRequestsCount())
393        .addCounter(Interns.info(RPC_MULTI_REQUEST_COUNT, RPC_MULTI_REQUEST_COUNT_DESC),
394          rsWrap.getRpcMultiRequestsCount())
395        .addCounter(Interns.info(RPC_MUTATE_REQUEST_COUNT, RPC_MUTATE_REQUEST_COUNT_DESC),
396          rsWrap.getRpcMutateRequestsCount())
397        .addCounter(Interns.info(CHECK_MUTATE_FAILED_COUNT, CHECK_MUTATE_FAILED_COUNT_DESC),
398          rsWrap.getCheckAndMutateChecksFailed())
399        .addCounter(Interns.info(CHECK_MUTATE_PASSED_COUNT, CHECK_MUTATE_PASSED_COUNT_DESC),
400          rsWrap.getCheckAndMutateChecksPassed())
401        .addCounter(Interns.info(BLOCK_CACHE_HIT_COUNT, BLOCK_CACHE_HIT_COUNT_DESC),
402          rsWrap.getBlockCacheHitCount())
403        .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_HIT_COUNT, BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC),
404          rsWrap.getBlockCachePrimaryHitCount())
405        .addCounter(Interns.info(BLOCK_CACHE_HIT_CACHING_COUNT, BLOCK_CACHE_HIT_CACHING_COUNT_DESC),
406          rsWrap.getBlockCacheHitCachingCount())
407        .addCounter(Interns.info(BLOCK_CACHE_MISS_COUNT, BLOCK_COUNT_MISS_COUNT_DESC),
408          rsWrap.getBlockCacheMissCount())
409        .addCounter(
410          Interns.info(BLOCK_CACHE_PRIMARY_MISS_COUNT, BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC),
411          rsWrap.getBlockCachePrimaryMissCount())
412        .addCounter(
413          Interns.info(BLOCK_CACHE_MISS_CACHING_COUNT, BLOCK_COUNT_MISS_CACHING_COUNT_DESC),
414          rsWrap.getBlockCacheMissCachingCount())
415        .addCounter(Interns.info(BLOCK_CACHE_EVICTION_COUNT, BLOCK_CACHE_EVICTION_COUNT_DESC),
416          rsWrap.getBlockCacheEvictedCount())
417        .addCounter(
418          Interns.info(BLOCK_CACHE_PRIMARY_EVICTION_COUNT, BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC),
419          rsWrap.getBlockCachePrimaryEvictedCount())
420        .addCounter(
421          Interns.info(BLOCK_CACHE_FAILED_INSERTION_COUNT, BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC),
422          rsWrap.getBlockCacheFailedInsertions())
423        .addCounter(Interns.info(BLOCK_CACHE_DATA_MISS_COUNT, ""), rsWrap.getDataMissCount())
424        .addCounter(Interns.info(BLOCK_CACHE_LEAF_INDEX_MISS_COUNT, ""),
425          rsWrap.getLeafIndexMissCount())
426        .addCounter(Interns.info(BLOCK_CACHE_BLOOM_CHUNK_MISS_COUNT, ""),
427          rsWrap.getBloomChunkMissCount())
428        .addCounter(Interns.info(BLOCK_CACHE_META_MISS_COUNT, ""), rsWrap.getMetaMissCount())
429        .addCounter(Interns.info(BLOCK_CACHE_ROOT_INDEX_MISS_COUNT, ""),
430          rsWrap.getRootIndexMissCount())
431        .addCounter(Interns.info(BLOCK_CACHE_INTERMEDIATE_INDEX_MISS_COUNT, ""),
432          rsWrap.getIntermediateIndexMissCount())
433        .addCounter(Interns.info(BLOCK_CACHE_FILE_INFO_MISS_COUNT, ""),
434          rsWrap.getFileInfoMissCount())
435        .addCounter(Interns.info(BLOCK_CACHE_GENERAL_BLOOM_META_MISS_COUNT, ""),
436          rsWrap.getGeneralBloomMetaMissCount())
437        .addCounter(Interns.info(BLOCK_CACHE_DELETE_FAMILY_BLOOM_MISS_COUNT, ""),
438          rsWrap.getDeleteFamilyBloomMissCount())
439        .addCounter(Interns.info(BLOCK_CACHE_TRAILER_MISS_COUNT, ""), rsWrap.getTrailerMissCount())
440        .addCounter(Interns.info(BLOCK_CACHE_DATA_HIT_COUNT, ""), rsWrap.getDataHitCount())
441        .addCounter(Interns.info(BLOCK_CACHE_LEAF_INDEX_HIT_COUNT, ""),
442          rsWrap.getLeafIndexHitCount())
443        .addCounter(Interns.info(BLOCK_CACHE_BLOOM_CHUNK_HIT_COUNT, ""),
444          rsWrap.getBloomChunkHitCount())
445        .addCounter(Interns.info(BLOCK_CACHE_META_HIT_COUNT, ""), rsWrap.getMetaHitCount())
446        .addCounter(Interns.info(BLOCK_CACHE_ROOT_INDEX_HIT_COUNT, ""),
447          rsWrap.getRootIndexHitCount())
448        .addCounter(Interns.info(BLOCK_CACHE_INTERMEDIATE_INDEX_HIT_COUNT, ""),
449          rsWrap.getIntermediateIndexHitCount())
450        .addCounter(Interns.info(BLOCK_CACHE_FILE_INFO_HIT_COUNT, ""), rsWrap.getFileInfoHitCount())
451        .addCounter(Interns.info(BLOCK_CACHE_GENERAL_BLOOM_META_HIT_COUNT, ""),
452          rsWrap.getGeneralBloomMetaHitCount())
453        .addCounter(Interns.info(BLOCK_CACHE_DELETE_FAMILY_BLOOM_HIT_COUNT, ""),
454          rsWrap.getDeleteFamilyBloomHitCount())
455        .addCounter(Interns.info(BLOCK_CACHE_TRAILER_HIT_COUNT, ""), rsWrap.getTrailerHitCount())
456        .addCounter(Interns.info(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC),
457          rsWrap.getUpdatesBlockedTime())
458        .addCounter(Interns.info(FLUSHED_CELLS, FLUSHED_CELLS_DESC), rsWrap.getFlushedCellsCount())
459        .addCounter(Interns.info(COMPACTED_CELLS, COMPACTED_CELLS_DESC),
460          rsWrap.getCompactedCellsCount())
461        .addCounter(Interns.info(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC),
462          rsWrap.getMajorCompactedCellsCount())
463        .addCounter(Interns.info(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC),
464          rsWrap.getFlushedCellsSize())
465        .addCounter(Interns.info(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC),
466          rsWrap.getCompactedCellsSize())
467        .addCounter(Interns.info(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC),
468          rsWrap.getMajorCompactedCellsSize())
469        .addCounter(
470          Interns.info(CELLS_COUNT_COMPACTED_FROM_MOB, CELLS_COUNT_COMPACTED_FROM_MOB_DESC),
471          rsWrap.getCellsCountCompactedFromMob())
472        .addCounter(Interns.info(CELLS_COUNT_COMPACTED_TO_MOB, CELLS_COUNT_COMPACTED_TO_MOB_DESC),
473          rsWrap.getCellsCountCompactedToMob())
474        .addCounter(Interns.info(CELLS_SIZE_COMPACTED_FROM_MOB, CELLS_SIZE_COMPACTED_FROM_MOB_DESC),
475          rsWrap.getCellsSizeCompactedFromMob())
476        .addCounter(Interns.info(CELLS_SIZE_COMPACTED_TO_MOB, CELLS_SIZE_COMPACTED_TO_MOB_DESC),
477          rsWrap.getCellsSizeCompactedToMob())
478        .addCounter(Interns.info(MOB_FLUSH_COUNT, MOB_FLUSH_COUNT_DESC), rsWrap.getMobFlushCount())
479        .addCounter(Interns.info(MOB_FLUSHED_CELLS_COUNT, MOB_FLUSHED_CELLS_COUNT_DESC),
480          rsWrap.getMobFlushedCellsCount())
481        .addCounter(Interns.info(MOB_FLUSHED_CELLS_SIZE, MOB_FLUSHED_CELLS_SIZE_DESC),
482          rsWrap.getMobFlushedCellsSize())
483        .addCounter(Interns.info(MOB_SCAN_CELLS_COUNT, MOB_SCAN_CELLS_COUNT_DESC),
484          rsWrap.getMobScanCellsCount())
485        .addCounter(Interns.info(MOB_SCAN_CELLS_SIZE, MOB_SCAN_CELLS_SIZE_DESC),
486          rsWrap.getMobScanCellsSize())
487        .addCounter(Interns.info(MOB_FILE_CACHE_ACCESS_COUNT, MOB_FILE_CACHE_ACCESS_COUNT_DESC),
488          rsWrap.getMobFileCacheAccessCount())
489        .addCounter(Interns.info(MOB_FILE_CACHE_MISS_COUNT, MOB_FILE_CACHE_MISS_COUNT_DESC),
490          rsWrap.getMobFileCacheMissCount())
491        .addCounter(Interns.info(MOB_FILE_CACHE_EVICTED_COUNT, MOB_FILE_CACHE_EVICTED_COUNT_DESC),
492          rsWrap.getMobFileCacheEvictedCount())
493        .addCounter(Interns.info(HEDGED_READS, HEDGED_READS_DESC), rsWrap.getHedgedReadOps())
494        .addCounter(Interns.info(HEDGED_READ_WINS, HEDGED_READ_WINS_DESC),
495          rsWrap.getHedgedReadWins())
496        .addCounter(Interns.info(HEDGED_READ_IN_CUR_THREAD, HEDGED_READ_IN_CUR_THREAD_DESC),
497          rsWrap.getHedgedReadOpsInCurThread())
498        .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC),
499          rsWrap.getBlockedRequestsCount())
500        .addCounter(Interns.info(EXCLUDE_DATA_NODES_COUNT, EXCLUDE_DATA_NODES_COUNT_DESC),
501          rsWrap.getWALExcludeDNs().size())
502        .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC),
503          rsWrap.getZookeeperQuorum())
504        .tag(Interns.info(SERVER_NAME_NAME, SERVER_NAME_DESC), rsWrap.getServerName())
505        .tag(Interns.info(CLUSTER_ID_NAME, CLUSTER_ID_DESC), rsWrap.getClusterId());
506      if (!rsWrap.getWALExcludeDNs().isEmpty()) {
507        metricsRecordBuilder.tag(
508          Interns.info(EXCLUDE_DATA_NODES_DETAILS, EXCLUDE_DATA_NODES_DETAILS_DESC),
509          rsWrap.getWALExcludeDNs().toString());
510      }
511    }
512
513    metricsRegistry.snapshot(mrb, all);
514
515    // source is registered in supers constructor, sometimes called before the whole initialization.
516    if (metricsAdapter != null) {
517      // snapshot MetricRegistry as well
518      metricsAdapter.snapshotAllMetrics(registry, mrb);
519    }
520  }
521
522  private MetricsRecordBuilder addGaugesToMetricsRecordBuilder(MetricsRecordBuilder mrb) {
523    return mrb.addGauge(Interns.info(REGION_COUNT, REGION_COUNT_DESC), rsWrap.getNumOnlineRegions())
524      .addGauge(Interns.info(STORE_COUNT, STORE_COUNT_DESC), rsWrap.getNumStores())
525      .addGauge(Interns.info(WALFILE_COUNT, WALFILE_COUNT_DESC), rsWrap.getNumWALFiles())
526      .addGauge(Interns.info(WALFILE_SIZE, WALFILE_SIZE_DESC), rsWrap.getWALFileSize())
527      .addGauge(Interns.info(STOREFILE_COUNT, STOREFILE_COUNT_DESC), rsWrap.getNumStoreFiles())
528      .addGauge(Interns.info(MAX_STOREFILE_COUNT, MAX_STOREFILE_COUNT_DESC),
529        rsWrap.getMaxStoreFiles())
530      .addGauge(Interns.info(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC), rsWrap.getMemStoreSize())
531      .addGauge(Interns.info(MEMSTORE_HEAP_SIZE, MEMSTORE_HEAP_SIZE_DESC),
532        rsWrap.getOnHeapMemStoreSize())
533      .addGauge(Interns.info(MEMSTORE_OFFHEAP_SIZE, MEMSTORE_OFFHEAP_SIZE_DESC),
534        rsWrap.getOffHeapMemStoreSize())
535      .addGauge(Interns.info(STOREFILE_SIZE, STOREFILE_SIZE_DESC), rsWrap.getStoreFileSize())
536      .addGauge(Interns.info(STOREFILE_SIZE_GROWTH_RATE, STOREFILE_SIZE_GROWTH_RATE_DESC),
537        rsWrap.getStoreFileSizeGrowthRate())
538      .addGauge(Interns.info(MAX_STORE_FILE_AGE, MAX_STORE_FILE_AGE_DESC),
539        rsWrap.getMaxStoreFileAge())
540      .addGauge(Interns.info(MIN_STORE_FILE_AGE, MIN_STORE_FILE_AGE_DESC),
541        rsWrap.getMinStoreFileAge())
542      .addGauge(Interns.info(AVG_STORE_FILE_AGE, AVG_STORE_FILE_AGE_DESC),
543        rsWrap.getAvgStoreFileAge())
544      .addGauge(Interns.info(NUM_REFERENCE_FILES, NUM_REFERENCE_FILES_DESC),
545        rsWrap.getNumReferenceFiles())
546      .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC), rsWrap.getStartCode())
547      .addGauge(Interns.info(AVERAGE_REGION_SIZE, AVERAGE_REGION_SIZE_DESC),
548        rsWrap.getAverageRegionSize())
549      .addGauge(Interns.info(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC),
550        rsWrap.getStoreFileIndexSize())
551      .addGauge(Interns.info(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC),
552        rsWrap.getTotalStaticIndexSize())
553      .addGauge(Interns.info(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC),
554        rsWrap.getTotalStaticBloomSize())
555      .addCounter(Interns.info(BLOOM_FILTER_REQUESTS_COUNT, BLOOM_FILTER_REQUESTS_COUNT_DESC),
556        rsWrap.getBloomFilterRequestsCount())
557      .addCounter(
558        Interns.info(BLOOM_FILTER_NEGATIVE_RESULTS_COUNT, BLOOM_FILTER_NEGATIVE_RESULTS_COUNT_DESC),
559        rsWrap.getBloomFilterNegativeResultsCount())
560      .addCounter(Interns.info(BLOOM_FILTER_ELIGIBLE_REQUESTS_COUNT,
561        BLOOM_FILTER_ELIGIBLE_REQUESTS_COUNT_DESC), rsWrap.getBloomFilterEligibleRequestsCount())
562      .addGauge(Interns.info(NUMBER_OF_MUTATIONS_WITHOUT_WAL, NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC),
563        rsWrap.getNumMutationsWithoutWAL())
564      .addGauge(Interns.info(DATA_SIZE_WITHOUT_WAL, DATA_SIZE_WITHOUT_WAL_DESC),
565        rsWrap.getDataInMemoryWithoutWAL())
566      .addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC),
567        rsWrap.getPercentFileLocal())
568      .addGauge(
569        Interns.info(PERCENT_FILES_LOCAL_PRIMARY_REGIONS, PERCENT_FILES_LOCAL_PRIMARY_REGIONS_DESC),
570        rsWrap.getPercentFileLocalPrimaryRegions())
571      .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS,
572        PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC), rsWrap.getPercentFileLocalSecondaryRegions())
573      .addGauge(Interns.info(TOTAL_BYTES_READ, TOTAL_BYTES_READ_DESC), rsWrap.getTotalBytesRead())
574      .addGauge(Interns.info(LOCAL_BYTES_READ, LOCAL_BYTES_READ_DESC), rsWrap.getLocalBytesRead())
575      .addGauge(Interns.info(SHORTCIRCUIT_BYTES_READ, SHORTCIRCUIT_BYTES_READ_DESC),
576        rsWrap.getShortCircuitBytesRead())
577      .addGauge(Interns.info(ZEROCOPY_BYTES_READ, ZEROCOPY_BYTES_READ_DESC),
578        rsWrap.getZeroCopyBytesRead())
579      .addGauge(Interns.info(SPLIT_QUEUE_LENGTH, SPLIT_QUEUE_LENGTH_DESC),
580        rsWrap.getSplitQueueSize())
581      .addGauge(Interns.info(COMPACTION_QUEUE_LENGTH, COMPACTION_QUEUE_LENGTH_DESC),
582        rsWrap.getCompactionQueueSize())
583      .addGauge(Interns.info(SMALL_COMPACTION_QUEUE_LENGTH, SMALL_COMPACTION_QUEUE_LENGTH_DESC),
584        rsWrap.getSmallCompactionQueueSize())
585      .addGauge(Interns.info(LARGE_COMPACTION_QUEUE_LENGTH, LARGE_COMPACTION_QUEUE_LENGTH_DESC),
586        rsWrap.getLargeCompactionQueueSize())
587      .addGauge(Interns.info(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC),
588        rsWrap.getFlushQueueSize())
589      .addGauge(Interns.info(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC),
590        rsWrap.getBlockCacheFreeSize())
591      .addGauge(Interns.info(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC),
592        rsWrap.getBlockCacheCount())
593      .addGauge(Interns.info(BLOCK_CACHE_DATA_BLOCK_COUNT, BLOCK_CACHE_DATA_BLOCK_COUNT_DESC),
594        rsWrap.getBlockCacheDataBlockCount())
595      .addGauge(Interns.info(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC), rsWrap.getBlockCacheSize())
596      .addGauge(Interns.info(BLOCK_CACHE_HIT_PERCENT, BLOCK_CACHE_HIT_PERCENT_DESC),
597        rsWrap.getBlockCacheHitPercent())
598      .addGauge(Interns.info(BLOCK_CACHE_EXPRESS_HIT_PERCENT, BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC),
599        rsWrap.getBlockCacheHitCachingPercent())
600      .addGauge(Interns.info(L1_CACHE_SIZE, L1_CACHE_SIZE_DESC), rsWrap.getL1CacheSize())
601      .addGauge(Interns.info(L1_CACHE_FREE_SIZE, L1_CACHE_FREE_SIZE_DESC),
602        rsWrap.getL1CacheFreeSize())
603      .addGauge(Interns.info(L1_CACHE_COUNT, L1_CACHE_COUNT_DESC), rsWrap.getL1CacheCount())
604      .addCounter(Interns.info(L1_CACHE_EVICTION_COUNT, L1_CACHE_EVICTION_COUNT_DESC),
605        rsWrap.getL1CacheEvictedCount())
606      .addGauge(Interns.info(L1_CACHE_HIT_COUNT, L1_CACHE_HIT_COUNT_DESC),
607        rsWrap.getL1CacheHitCount())
608      .addGauge(Interns.info(L1_CACHE_HIT_CAGHING_COUNT, L1_CACHE_HIT_CAGHING_COUNT_DESC),
609        rsWrap.getL1CacheHitCachingCount())
610      .addGauge(Interns.info(L1_CACHE_MISS_COUNT, L1_CACHE_MISS_COUNT_DESC),
611        rsWrap.getL1CacheMissCount())
612      .addGauge(Interns.info(L1_CACHE_MISS_CACHING_COUNT, L1_CACHE_MISS_CACHING_COUNT_DESC),
613        rsWrap.getL1CacheMissCachingCount())
614      .addGauge(Interns.info(L1_CACHE_HIT_RATIO, L1_CACHE_HIT_RATIO_DESC),
615        rsWrap.getL1CacheHitRatio())
616      .addGauge(Interns.info(L1_CACHE_HIT_CACHING_RATIO, L1_CACHE_HIT_CACHING_RATIO_DESC),
617        rsWrap.getL1CacheHitCachingRatio())
618      .addGauge(Interns.info(L1_CACHE_MISS_RATIO, L1_CACHE_MISS_RATIO_DESC),
619        rsWrap.getL1CacheMissRatio())
620      .addGauge(Interns.info(L1_CACHE_MISS_CACHING_RATIO, L1_CACHE_MISS_CACHING_RATIO_DESC),
621        rsWrap.getL1CacheMissCachingRatio())
622      .addGauge(Interns.info(L2_CACHE_SIZE, L2_CACHE_SIZE_DESC), rsWrap.getL2CacheSize())
623      .addGauge(Interns.info(L2_CACHE_FREE_SIZE, L2_CACHE_FREE_SIZE_DESC),
624        rsWrap.getL2CacheFreeSize())
625      .addGauge(Interns.info(L2_CACHE_COUNT, L2_CACHE_COUNT_DESC), rsWrap.getL2CacheCount())
626      .addCounter(Interns.info(L2_CACHE_EVICTION_COUNT, L2_CACHE_EVICTION_COUNT_DESC),
627        rsWrap.getL2CacheEvictedCount())
628      .addGauge(Interns.info(L2_CACHE_HIT_COUNT, L2_CACHE_HIT_COUNT_DESC),
629        rsWrap.getL2CacheHitCount())
630      .addGauge(Interns.info(L2_CACHE_HIT_CACHING_COUNT, L2_CACHE_HIT_CACHING_COUNT_DESC),
631        rsWrap.getL2CacheHitCachingCount())
632      .addGauge(Interns.info(L2_CACHE_MISS_COUNT, L2_CACHE_MISS_COUNT_DESC),
633        rsWrap.getL2CacheMissCount())
634      .addGauge(Interns.info(L2_CACHE_MISS_CACHING_COUNT, L2_CACHE_MISS_CACHING_COUNT_DESC),
635        rsWrap.getL2CacheMissCachingCount())
636      .addGauge(Interns.info(L2_CACHE_HIT_RATIO, L2_CACHE_HIT_RATIO_DESC),
637        rsWrap.getL2CacheHitRatio())
638      .addGauge(Interns.info(L2_CACHE_HIT_CACHING_RATIO, L2_CACHE_HIT_CACHING_RATIO_DESC),
639        rsWrap.getL2CacheHitCachingRatio())
640      .addGauge(Interns.info(L2_CACHE_MISS_RATIO, L2_CACHE_MISS_RATIO_DESC),
641        rsWrap.getL2CacheMissRatio())
642      .addGauge(Interns.info(L2_CACHE_MISS_CACHING_RATIO, L2_CACHE_MISS_CACHING_RATIO_DESC),
643        rsWrap.getL2CacheMissCachingRatio())
644      .addGauge(Interns.info(MOB_FILE_CACHE_COUNT, MOB_FILE_CACHE_COUNT_DESC),
645        rsWrap.getMobFileCacheCount())
646      .addGauge(Interns.info(MOB_FILE_CACHE_HIT_PERCENT, MOB_FILE_CACHE_HIT_PERCENT_DESC),
647        rsWrap.getMobFileCacheHitPercent())
648      .addGauge(Interns.info(READ_REQUEST_RATE_PER_SECOND, READ_REQUEST_RATE_DESC),
649        rsWrap.getReadRequestsRatePerSecond())
650      .addGauge(Interns.info(WRITE_REQUEST_RATE_PER_SECOND, WRITE_REQUEST_RATE_DESC),
651        rsWrap.getWriteRequestsRatePerSecond())
652      .addGauge(
653        Interns.info(BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_BYTES,
654          BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_BYTES_DESC),
655        rsWrap.getByteBuffAllocatorHeapAllocationBytes())
656      .addGauge(
657        Interns.info(BYTE_BUFF_ALLOCATOR_POOL_ALLOCATION_BYTES,
658          BYTE_BUFF_ALLOCATOR_POOL_ALLOCATION_BYTES_DESC),
659        rsWrap.getByteBuffAllocatorPoolAllocationBytes())
660      .addGauge(
661        Interns.info(BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_RATIO,
662          BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_RATIO_DESC),
663        rsWrap.getByteBuffAllocatorHeapAllocRatio())
664      .addGauge(
665        Interns.info(BYTE_BUFF_ALLOCATOR_TOTAL_BUFFER_COUNT,
666          BYTE_BUFF_ALLOCATOR_TOTAL_BUFFER_COUNT_DESC),
667        rsWrap.getByteBuffAllocatorTotalBufferCount())
668      .addGauge(Interns.info(BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT,
669        BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT_DESC), rsWrap.getByteBuffAllocatorUsedBufferCount())
670      .addGauge(Interns.info(ACTIVE_SCANNERS, ACTIVE_SCANNERS_DESC), rsWrap.getActiveScanners());
671  }
672
673  @Override
674  public void incInfoThresholdExceeded(int count) {
675    infoPauseThresholdExceeded.incr(count);
676  }
677
678  @Override
679  public void incWarnThresholdExceeded(int count) {
680    warnPauseThresholdExceeded.incr(count);
681  }
682
683  @Override
684  public void updatePauseTimeWithGc(long t) {
685    pausesWithGc.add(t);
686  }
687
688  @Override
689  public void updatePauseTimeWithoutGc(long t) {
690    pausesWithoutGc.add(t);
691  }
692
693  @Override
694  public void updateDeleteBatch(long t) {
695    deleteBatchHisto.add(t);
696  }
697
698  @Override
699  public void updateCheckAndDelete(long t) {
700    checkAndDeleteHisto.add(t);
701  }
702
703  @Override
704  public void updateCheckAndPut(long t) {
705    checkAndPutHisto.add(t);
706  }
707
708  @Override
709  public void updateCheckAndMutate(long time, long blockBytesScanned) {
710    checkAndMutateHisto.add(time);
711    if (blockBytesScanned > 0) {
712      blockBytesScannedCount.incr(blockBytesScanned);
713      checkAndMutateBlockBytesScanned.add(blockBytesScanned);
714    }
715  }
716
717  @Override
718  public void updatePutBatch(long t) {
719    putBatchHisto.add(t);
720  }
721}