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