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