blob: 1aa191162d44d4361300e10c6071d9b1f139b09a [file] [log] [blame]
/*
* Copyright The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.apache.hadoop.hbase.regionserver;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
import org.apache.hadoop.metrics2.MetricHistogram;
import org.apache.hadoop.metrics2.lib.MutableFastCounter;
import org.apache.hadoop.metrics2.lib.MutableGaugeLong;
/**
* Hadoop2 implementation of MetricsHeapMemoryManagerSource. Implements BaseSource through
* BaseSourceImpl, following the pattern
*/
@InterfaceAudience.Private
public class MetricsHeapMemoryManagerSourceImpl extends BaseSourceImpl implements
MetricsHeapMemoryManagerSource {
private final MetricHistogram blockedFlushHistogram;
private final MetricHistogram unblockedFlushHistogram;
private final MetricHistogram incMemStoreSizeHistogram;
private final MetricHistogram decMemStoreSizeHistogram;
private final MetricHistogram incBlockCacheSizeHistogram;
private final MetricHistogram decBlockCacheSizeHistogram;
private final MutableGaugeLong blockedFlushGauge;
private final MutableGaugeLong unblockedFlushGauge;
private final MutableGaugeLong memStoreSizeGauge;
private final MutableGaugeLong blockCacheSizeGauge;
private final MutableFastCounter doNothingCounter;
private final MutableFastCounter aboveHeapOccupancyLowWatermarkCounter;
public MetricsHeapMemoryManagerSourceImpl() {
this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT);
}
public MetricsHeapMemoryManagerSourceImpl(String metricsName, String metricsDescription,
String metricsContext, String metricsJmxContext) {
super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
// Histograms
blockedFlushHistogram = getMetricsRegistry()
.newSizeHistogram(BLOCKED_FLUSH_NAME, BLOCKED_FLUSH_DESC);
unblockedFlushHistogram = getMetricsRegistry()
.newSizeHistogram(UNBLOCKED_FLUSH_NAME, UNBLOCKED_FLUSH_DESC);
incMemStoreSizeHistogram = getMetricsRegistry()
.newSizeHistogram(INC_MEMSTORE_TUNING_NAME, INC_MEMSTORE_TUNING_DESC);
decMemStoreSizeHistogram = getMetricsRegistry()
.newSizeHistogram(DEC_MEMSTORE_TUNING_NAME, DEC_MEMSTORE_TUNING_DESC);
incBlockCacheSizeHistogram = getMetricsRegistry()
.newSizeHistogram(INC_BLOCKCACHE_TUNING_NAME, INC_BLOCKCACHE_TUNING_DESC);
decBlockCacheSizeHistogram = getMetricsRegistry()
.newSizeHistogram(DEC_BLOCKCACHE_TUNING_NAME, DEC_BLOCKCACHE_TUNING_DESC);
// Gauges
blockedFlushGauge = getMetricsRegistry()
.newGauge(BLOCKED_FLUSH_GAUGE_NAME, BLOCKED_FLUSH_GAUGE_DESC, 0L);
unblockedFlushGauge = getMetricsRegistry()
.newGauge(UNBLOCKED_FLUSH_GAUGE_NAME, UNBLOCKED_FLUSH_GAUGE_DESC, 0L);
memStoreSizeGauge = getMetricsRegistry()
.newGauge(MEMSTORE_SIZE_GAUGE_NAME, MEMSTORE_SIZE_GAUGE_DESC, 0L);
blockCacheSizeGauge = getMetricsRegistry()
.newGauge(BLOCKCACHE_SIZE_GAUGE_NAME, BLOCKCACHE_SIZE_GAUGE_DESC, 0L);
// Counters
doNothingCounter = getMetricsRegistry()
.newCounter(DO_NOTHING_COUNTER_NAME, DO_NOTHING_COUNTER_DESC, 0L);
aboveHeapOccupancyLowWatermarkCounter = getMetricsRegistry()
.newCounter(ABOVE_HEAP_LOW_WATERMARK_COUNTER_NAME,
ABOVE_HEAP_LOW_WATERMARK_COUNTER_DESC, 0L);
}
@Override
public void updateBlockedFlushCount(long blockedFlushCount) {
if (blockedFlushCount > 0) {
blockedFlushHistogram.add(blockedFlushCount);
blockedFlushGauge.set(blockedFlushCount);
}
}
@Override
public void updateUnblockedFlushCount(long unblockedFlushCount) {
if (unblockedFlushCount > 0) {
unblockedFlushHistogram.add(unblockedFlushCount);
unblockedFlushGauge.set(unblockedFlushCount);
}
}
@Override
public void setCurBlockCacheSizeGauge(long blockcacheSize) {
blockCacheSizeGauge.set(blockcacheSize);
}
@Override
public void setCurMemStoreSizeGauge(long memstoreSize) {
memStoreSizeGauge.set(memstoreSize);
}
@Override
public void updateMemStoreDeltaSizeHistogram(int memStoreDeltaSize) {
if (memStoreDeltaSize >= 0) {
incMemStoreSizeHistogram.add(memStoreDeltaSize);
} else if (memStoreDeltaSize < 0) {
decMemStoreSizeHistogram.add(-memStoreDeltaSize);
}
}
@Override
public void updateBlockCacheDeltaSizeHistogram(int blockCacheDeltaSize) {
if (blockCacheDeltaSize >= 0) {
incBlockCacheSizeHistogram.add(blockCacheDeltaSize);
} else if (blockCacheDeltaSize < 0) {
decBlockCacheSizeHistogram.add(-blockCacheDeltaSize);
}
}
@Override
public void increaseTunerDoNothingCounter() {
doNothingCounter.incr();
}
@Override
public void increaseAboveHeapOccupancyLowWatermarkCounter() {
aboveHeapOccupancyLowWatermarkCounter.incr();
}
}