View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.hadoop.hbase.regionserver;
20  
21  import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
22  import org.apache.hadoop.metrics2.MetricHistogram;
23  import org.apache.hadoop.metrics2.MetricsBuilder;
24  import org.apache.hadoop.metrics2.MetricsRecordBuilder;
25  import org.apache.hadoop.metrics2.lib.MetricMutableCounterLong;
26  
27  /**
28   * Hadoop1 implementation of MetricsRegionServerSource.
29   *
30   * Implements BaseSource through BaseSourceImpl, following the pattern
31   */
32  public class MetricsRegionServerSourceImpl
33      extends BaseSourceImpl implements MetricsRegionServerSource {
34  
35    final MetricsRegionServerWrapper rsWrap;
36    private final MetricHistogram putHisto;
37    private final MetricHistogram deleteHisto;
38    private final MetricHistogram getHisto;
39    private final MetricHistogram incrementHisto;
40    private final MetricHistogram appendHisto;
41    private final MetricMutableCounterLong slowPut;
42    private final MetricMutableCounterLong slowDelete;
43    private final MetricMutableCounterLong slowGet;
44    private final MetricMutableCounterLong slowIncrement;
45    private final MetricMutableCounterLong slowAppend;
46  
47    public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
48      this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
49    }
50  
51    public MetricsRegionServerSourceImpl(String metricsName,
52                                         String metricsDescription,
53                                         String metricsContext,
54                                         String metricsJmxContext,
55                                         MetricsRegionServerWrapper rsWrap) {
56      super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
57      this.rsWrap = rsWrap;
58  
59      putHisto = getMetricsRegistry().newHistogram(MUTATE_KEY);
60      slowPut = getMetricsRegistry().newCounter(SLOW_MUTATE_KEY, SLOW_MUTATE_DESC, 0l);
61  
62      deleteHisto = getMetricsRegistry().newHistogram(DELETE_KEY);
63      slowDelete = getMetricsRegistry().newCounter(SLOW_DELETE_KEY, SLOW_DELETE_DESC, 0l);
64  
65      getHisto = getMetricsRegistry().newHistogram(GET_KEY);
66      slowGet = getMetricsRegistry().newCounter(SLOW_GET_KEY, SLOW_GET_DESC, 0l);
67  
68      incrementHisto = getMetricsRegistry().newHistogram(INCREMENT_KEY);
69      slowIncrement = getMetricsRegistry().newCounter(SLOW_INCREMENT_KEY, SLOW_INCREMENT_DESC, 0l);
70  
71      appendHisto = getMetricsRegistry().newHistogram(APPEND_KEY);
72      slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0l);
73    }
74  
75    @Override
76    public void updatePut(long t) {
77      putHisto.add(t);
78    }
79  
80    @Override
81    public void updateDelete(long t) {
82      deleteHisto.add(t);
83    }
84  
85    @Override
86    public void updateGet(long t) {
87      getHisto.add(t);
88    }
89  
90    @Override
91    public void updateIncrement(long t) {
92      incrementHisto.add(t);
93    }
94  
95    @Override
96    public void updateAppend(long t) {
97      appendHisto.add(t);
98    }
99  
100   @Override
101   public void incrSlowPut() {
102     slowPut.incr();
103   }
104 
105   @Override
106   public void incrSlowDelete() {
107     slowDelete.incr();
108   }
109 
110   @Override
111   public void incrSlowGet() {
112     slowGet.incr();
113   }
114 
115   @Override
116   public void incrSlowIncrement() {
117     slowIncrement.incr();
118   }
119 
120   @Override
121   public void incrSlowAppend() {
122     slowAppend.incr();
123   }
124 
125   /**
126    * Yes this is a get function that doesn't return anything.  Thanks Hadoop for breaking all
127    * expectations of java programmers.  Instead of returning anything Hadoop metrics expects
128    * getMetrics to push the metrics into the metricsBuilder.
129    *
130    * @param metricsBuilder Builder to accept metrics
131    * @param all            push all or only changed?
132    */
133   @Override
134   public void getMetrics(MetricsBuilder metricsBuilder, boolean all) {
135 
136     MetricsRecordBuilder mrb = metricsBuilder.addRecord(metricsName)
137         .setContext(metricsContext);
138 
139     // rsWrap can be null because this function is called inside of init.
140     if (rsWrap != null) {
141       mrb.addGauge(REGION_COUNT, REGION_COUNT_DESC, rsWrap.getNumOnlineRegions())
142           .addGauge(STORE_COUNT, STORE_COUNT_DESC, rsWrap.getNumStores())
143           .addGauge(STOREFILE_COUNT, STOREFILE_COUNT_DESC, rsWrap.getNumStoreFiles())
144           .addGauge(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC, rsWrap.getMemstoreSize())
145           .addGauge(STOREFILE_SIZE, STOREFILE_SIZE_DESC, rsWrap.getStoreFileSize())
146           .addGauge(RS_START_TIME_NAME, RS_START_TIME_DESC, rsWrap.getStartCode())
147           .addCounter(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC, rsWrap.getTotalRequestCount())
148           .addCounter(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC, rsWrap.getReadRequestsCount())
149           .addCounter(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC, rsWrap.getWriteRequestsCount())
150           .addCounter(CHECK_MUTATE_FAILED_COUNT,
151               CHECK_MUTATE_FAILED_COUNT_DESC,
152               rsWrap.getCheckAndMutateChecksFailed())
153           .addCounter(CHECK_MUTATE_PASSED_COUNT,
154               CHECK_MUTATE_PASSED_COUNT_DESC,
155               rsWrap.getCheckAndMutateChecksPassed())
156           .addGauge(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC, rsWrap.getStoreFileIndexSize())
157           .addGauge(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC, rsWrap.getTotalStaticIndexSize())
158           .addGauge(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC, rsWrap.getTotalStaticBloomSize())
159           .addGauge(NUMBER_OF_PUTS_WITHOUT_WAL,
160               NUMBER_OF_PUTS_WITHOUT_WAL_DESC,
161               rsWrap.getNumPutsWithoutWAL())
162           .addGauge(DATA_SIZE_WITHOUT_WAL,
163               DATA_SIZE_WITHOUT_WAL_DESC,
164               rsWrap.getDataInMemoryWithoutWAL())
165           .addGauge(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC, rsWrap.getPercentFileLocal())
166           .addGauge(COMPACTION_QUEUE_LENGTH,
167               COMPACTION_QUEUE_LENGTH_DESC,
168               rsWrap.getCompactionQueueSize())
169           .addGauge(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC, rsWrap.getFlushQueueSize())
170           .addGauge(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC, rsWrap.getBlockCacheFreeSize())
171           .addGauge(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC, rsWrap.getBlockCacheCount())
172           .addGauge(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC, rsWrap.getBlockCacheSize())
173           .addCounter(BLOCK_CACHE_HIT_COUNT,
174               BLOCK_CACHE_HIT_COUNT_DESC,
175               rsWrap.getBlockCacheHitCount())
176           .addCounter(BLOCK_CACHE_MISS_COUNT,
177               BLOCK_COUNT_MISS_COUNT_DESC,
178               rsWrap.getBlockCacheMissCount())
179           .addCounter(BLOCK_CACHE_EVICTION_COUNT,
180               BLOCK_CACHE_EVICTION_COUNT_DESC,
181               rsWrap.getBlockCacheEvictedCount())
182           .addGauge(BLOCK_CACHE_HIT_PERCENT,
183               BLOCK_CACHE_HIT_PERCENT_DESC,
184               rsWrap.getBlockCacheHitPercent())
185           .addGauge(BLOCK_CACHE_EXPRESS_HIT_PERCENT,
186               BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC,
187               rsWrap.getBlockCacheHitCachingPercent())
188           .addCounter(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC, rsWrap.getUpdatesBlockedTime())
189           .tag(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC, rsWrap.getZookeeperQuorum())
190           .tag(SERVER_NAME_NAME, SERVER_NAME_DESC, rsWrap.getServerName())
191           .tag(CLUSTER_ID_NAME, CLUSTER_ID_DESC, rsWrap.getClusterId());
192     }
193 
194     metricsRegistry.snapshot(mrb, all);
195   }
196 
197 
198 }