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;
019
020import java.util.Map;
021import org.apache.hadoop.hbase.client.CompactionState;
022import org.apache.hadoop.hbase.util.Bytes;
023import org.apache.yetus.audience.InterfaceAudience;
024
025/**
026 * Encapsulates per-region load metrics.
027 */
028@InterfaceAudience.Public
029public interface RegionMetrics {
030
031  /** Returns the region name */
032  byte[] getRegionName();
033
034  /** Returns the number of stores */
035  int getStoreCount();
036
037  /** Returns the number of storefiles */
038  int getStoreFileCount();
039
040  /** Returns the total size of the storefiles */
041  Size getStoreFileSize();
042
043  /** Returns the memstore size */
044  Size getMemStoreSize();
045
046  /** Returns the number of read requests made to region */
047  long getReadRequestCount();
048
049  /** Returns the number of write requests made to region */
050  long getWriteRequestCount();
051
052  /** Returns the number of coprocessor service requests made to region */
053  public long getCpRequestCount();
054
055  /**
056   * Returns the number of write requests and read requests and coprocessor service requests made to
057   * region
058   */
059  default long getRequestCount() {
060    return getReadRequestCount() + getWriteRequestCount() + getCpRequestCount();
061  }
062
063  /** Returns the region name as a string */
064  default String getNameAsString() {
065    return Bytes.toStringBinary(getRegionName());
066  }
067
068  /** Returns the number of filtered read requests made to region */
069  long getFilteredReadRequestCount();
070
071  /**
072   * TODO: why we pass the same value to different counters? Currently, the value from
073   * getStoreFileIndexSize() is same with getStoreFileRootLevelIndexSize() see
074   * HRegionServer#createRegionLoad.
075   * @return The current total size of root-level indexes for the region
076   */
077  Size getStoreFileIndexSize();
078
079  /** Returns The current total size of root-level indexes for the region */
080  Size getStoreFileRootLevelIndexSize();
081
082  /** Returns The total size of all index blocks, not just the root level */
083  Size getStoreFileUncompressedDataIndexSize();
084
085  /** Returns The total size of all Bloom filter blocks, not just loaded into the block cache */
086  Size getBloomFilterSize();
087
088  /** Returns the total number of cells in current compaction */
089  long getCompactingCellCount();
090
091  /** Returns the number of already compacted kvs in current compaction */
092  long getCompactedCellCount();
093
094  /**
095   * This does not really belong inside RegionLoad but its being done in the name of expediency.
096   * @return the completed sequence Id for the region
097   */
098  long getCompletedSequenceId();
099
100  /** Returns completed sequence id per store. */
101  Map<byte[], Long> getStoreSequenceId();
102
103  /** Returns the uncompressed size of the storefiles */
104  Size getUncompressedStoreFileSize();
105
106  /** Returns the data locality of region in the regionserver. */
107  float getDataLocality();
108
109  /** Returns the timestamp of the oldest hfile for any store of this region. */
110  long getLastMajorCompactionTimestamp();
111
112  /** Returns the reference count for the stores of this region */
113  int getStoreRefCount();
114
115  /**
116   * Returns the max reference count for any store file among all compacted stores files of this
117   * region
118   */
119  int getMaxCompactedStoreFileRefCount();
120
121  /**
122   * Different from dataLocality,this metric's numerator only include the data stored on ssd
123   * @return the data locality for ssd of region in the regionserver
124   */
125  float getDataLocalityForSsd();
126
127  /** Returns the data at local weight of this region in the regionserver */
128  long getBlocksLocalWeight();
129
130  /**
131   * Different from blocksLocalWeight,this metric's numerator only include the data stored on ssd
132   * @return the data at local with ssd weight of this region in the regionserver
133   */
134  long getBlocksLocalWithSsdWeight();
135
136  /** Returns the block total weight of this region */
137  long getBlocksTotalWeight();
138
139  /** Returns the compaction state of this region */
140  CompactionState getCompactionState();
141
142  /** Returns the total size of the hfiles in the region */
143  Size getRegionSizeMB();
144
145  /** Returns current prefetch ratio of this region on this server */
146  float getCurrentRegionCachedRatio();
147}