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.master;
019
020import static org.apache.hadoop.hbase.master.MetricsMaster.convertToProcedureMetrics;
021
022import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
023import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;
024import org.apache.yetus.audience.InterfaceAudience;
025
026@InterfaceAudience.Private
027public class MetricsAssignmentManager {
028  private final MetricsAssignmentManagerSource assignmentManagerSource;
029
030  private final ProcedureMetrics assignProcMetrics;
031  private final ProcedureMetrics unassignProcMetrics;
032  private final ProcedureMetrics moveProcMetrics;
033  private final ProcedureMetrics reopenProcMetrics;
034  private final ProcedureMetrics openProcMetrics;
035  private final ProcedureMetrics closeProcMetrics;
036  private final ProcedureMetrics splitProcMetrics;
037  private final ProcedureMetrics mergeProcMetrics;
038
039  public MetricsAssignmentManager() {
040    assignmentManagerSource =
041      CompatibilitySingletonFactory.getInstance(MetricsAssignmentManagerSource.class);
042
043    assignProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getAssignMetrics());
044    unassignProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getUnassignMetrics());
045    moveProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getMoveMetrics());
046    reopenProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getReopenMetrics());
047    openProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getOpenMetrics());
048    closeProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getCloseMetrics());
049    splitProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getSplitMetrics());
050    mergeProcMetrics = convertToProcedureMetrics(assignmentManagerSource.getMergeMetrics());
051  }
052
053  public MetricsAssignmentManagerSource getMetricsProcSource() {
054    return assignmentManagerSource;
055  }
056
057  /**
058   * set new value for number of regions in transition.
059   */
060  public void updateRITCount(final int ritCount) {
061    assignmentManagerSource.setRIT(ritCount);
062  }
063
064  /**
065   * update RIT count that are in this state for more than the threshold as defined by the property
066   * rit.metrics.threshold.time.
067   */
068  public void updateRITCountOverThreshold(final int ritCountOverThreshold) {
069    assignmentManagerSource.setRITCountOverThreshold(ritCountOverThreshold);
070  }
071
072  /**
073   * update the timestamp for oldest region in transition metrics.
074   */
075  public void updateRITOldestAge(final long timestamp) {
076    assignmentManagerSource.setRITOldestAge(timestamp);
077  }
078
079  /**
080   * update the duration metrics of region is transition
081   */
082  public void updateRitDuration(long duration) {
083    assignmentManagerSource.updateRitDuration(duration);
084  }
085
086  /*
087   * TODO: Remove. This may not be required as assign and unassign operations are tracked separately
088   * Increment the count of assignment operation (assign/unassign).
089   */
090  public void incrementOperationCounter() {
091    assignmentManagerSource.incrementOperationCounter();
092  }
093
094  public void updateDeadServerOpenRegions(int deadRegions) {
095    assignmentManagerSource.updateDeadServerOpenRegions(deadRegions);
096  }
097
098  public void updateUnknownServerOpenRegions(int unknownRegions) {
099    assignmentManagerSource.updateUnknownServerOpenRegions(unknownRegions);
100  }
101
102  public void updateOrphanRegionsOnRs(int orphanRegionsOnRs) {
103    assignmentManagerSource.setOrphanRegionsOnRs(orphanRegionsOnRs);
104  }
105
106  public void updateOrphanRegionsOnFs(int orphanRegionsOnFs) {
107    assignmentManagerSource.setOrphanRegionsOnFs(orphanRegionsOnFs);
108  }
109
110  public void updateInconsistentRegions(int inconsistentRegions) {
111    assignmentManagerSource.setInconsistentRegions(inconsistentRegions);
112  }
113
114  public void updateHoles(int holes) {
115    assignmentManagerSource.setHoles(holes);
116  }
117
118  public void updateOverlaps(int overlaps) {
119    assignmentManagerSource.setOverlaps(overlaps);
120  }
121
122  public void updateUnknownServerRegions(int unknownServerRegions) {
123    assignmentManagerSource.setUnknownServerRegions(unknownServerRegions);
124  }
125
126  public void updateEmptyRegionInfoRegions(int emptyRegionInfoRegions) {
127    assignmentManagerSource.setEmptyRegionInfoRegions(emptyRegionInfoRegions);
128  }
129
130  /** Returns Set of common metrics for assign procedure */
131  public ProcedureMetrics getAssignProcMetrics() {
132    return assignProcMetrics;
133  }
134
135  /** Returns Set of common metrics for unassign procedure */
136  public ProcedureMetrics getUnassignProcMetrics() {
137    return unassignProcMetrics;
138  }
139
140  /** Returns Set of common metrics for move procedure */
141  public ProcedureMetrics getMoveProcMetrics() {
142    return moveProcMetrics;
143  }
144
145  /** Returns Set of common metrics for reopen procedure */
146  public ProcedureMetrics getReopenProcMetrics() {
147    return reopenProcMetrics;
148  }
149
150  /** Returns Set of common metrics for OpenRegionProcedure */
151  public ProcedureMetrics getOpenProcMetrics() {
152    return openProcMetrics;
153  }
154
155  /** Returns Set of common metrics for CloseRegionProcedure */
156  public ProcedureMetrics getCloseProcMetrics() {
157    return closeProcMetrics;
158  }
159
160  /** Returns Set of common metrics for split procedure */
161  public ProcedureMetrics getSplitProcMetrics() {
162    return splitProcMetrics;
163  }
164
165  /** Returns Set of common metrics for merge procedure */
166  public ProcedureMetrics getMergeProcMetrics() {
167    return mergeProcMetrics;
168  }
169}