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.master;
20  
21  import org.apache.commons.logging.Log;
22  import org.apache.commons.logging.LogFactory;
23  import org.apache.hadoop.hbase.classification.InterfaceAudience;
24  import org.apache.hadoop.hbase.classification.InterfaceStability;
25  import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
26  
27  /**
28   * This class is for maintaining the various master statistics
29   * and publishing them through the metrics interfaces.
30   * <p>
31   * This class has a number of metrics variables that are publicly accessible;
32   * these variables (objects) have methods to update their values.
33   */
34  @InterfaceStability.Evolving
35  @InterfaceAudience.Private
36  public class MetricsMaster {
37    private final Log LOG = LogFactory.getLog(this.getClass());
38    private MetricsMasterSource masterSource;
39    private MetricsMasterProcSource masterProcSource;
40    private MetricsMasterQuotaSource masterQuotaSource;
41  
42    public MetricsMaster(MetricsMasterWrapper masterWrapper) {
43      masterSource = CompatibilitySingletonFactory.getInstance(MetricsMasterSourceFactory.class).create(masterWrapper);
44      masterProcSource =
45              CompatibilitySingletonFactory.getInstance(MetricsMasterProcSourceFactory.class).create(masterWrapper);
46      masterQuotaSource =
47              CompatibilitySingletonFactory.getInstance(MetricsMasterQuotaSourceFactory.class).create(masterWrapper);
48    }
49  
50    // for unit-test usage
51    public MetricsMasterSource getMetricsSource() {
52      return masterSource;
53    }
54  
55    public MetricsMasterProcSource getMetricsProcSource() {
56      return masterProcSource;
57    }
58  
59    public MetricsMasterQuotaSource getMetricsQuotaSource() {
60      return masterQuotaSource;
61    }
62  
63    /**
64     * @param inc How much to add to requests.
65     */
66    public void incrementRequests(final long inc) {
67      masterSource.incRequests(inc);
68    }
69  
70    /**
71     * Sets the number of space quotas defined.
72     *
73     * @see MetricsMasterQuotaSource#updateNumSpaceQuotas(long)
74     */
75    public void setNumSpaceQuotas(final long numSpaceQuotas) {
76      masterQuotaSource.updateNumSpaceQuotas(numSpaceQuotas);
77    }
78  
79    /**
80     * Sets the number of table in violation of a space quota.
81     *
82     * @see MetricsMasterQuotaSource#updateNumTablesInSpaceQuotaViolation(long)
83     */
84    public void setNumTableInSpaceQuotaViolation(final long numTablesInViolation) {
85      masterQuotaSource.updateNumTablesInSpaceQuotaViolation(numTablesInViolation);
86    }
87  
88    /**
89     * Sets the number of namespaces in violation of a space quota.
90     *
91     * @see MetricsMasterQuotaSource#updateNumNamespacesInSpaceQuotaViolation(long)
92     */
93    public void setNumNamespacesInSpaceQuotaViolation(final long numNamespacesInViolation) {
94      masterQuotaSource.updateNumNamespacesInSpaceQuotaViolation(numNamespacesInViolation);
95    }
96  
97    /**
98     * Sets the number of region size reports the master currently has in memory.
99     *
100    * @see MetricsMasterQuotaSource#updateNumCurrentSpaceQuotaRegionSizeReports(long)
101    */
102   public void setNumRegionSizeReports(final long numRegionReports) {
103     masterQuotaSource.updateNumCurrentSpaceQuotaRegionSizeReports(numRegionReports);
104   }
105 
106   /**
107    * Sets the execution time of a period of the QuotaObserverChore.
108    *
109    * @param executionTime The execution time in milliseconds.
110    * @see MetricsMasterQuotaSource#incrementSpaceQuotaObserverChoreTime(long)
111    */
112   public void incrementQuotaObserverTime(final long executionTime) {
113     masterQuotaSource.incrementSpaceQuotaObserverChoreTime(executionTime);
114   }
115 }