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.classification.InterfaceAudience;
22  import org.apache.hadoop.hbase.io.MetricsIOSource;
23  import org.apache.hadoop.hbase.io.MetricsIOSourceImpl;
24  import org.apache.hadoop.hbase.io.MetricsIOWrapper;
25  
26  /**
27   * Factory to create MetricsRegionServerSource when given a  MetricsRegionServerWrapper
28   */
29  @InterfaceAudience.Private
30  public class MetricsRegionServerSourceFactoryImpl implements MetricsRegionServerSourceFactory {
31    public static enum FactoryStorage {
32      INSTANCE;
33      private Object aggLock = new Object();
34      private MetricsRegionAggregateSourceImpl regionAggImpl;
35      private MetricsUserAggregateSourceImpl userAggImpl;
36      private MetricsTableAggregateSourceImpl tblAggImpl;
37    }
38  
39    private synchronized MetricsRegionAggregateSourceImpl getRegionAggregate() {
40      synchronized (FactoryStorage.INSTANCE.aggLock) {
41        if (FactoryStorage.INSTANCE.regionAggImpl == null) {
42          FactoryStorage.INSTANCE.regionAggImpl = new MetricsRegionAggregateSourceImpl();
43        }
44        return FactoryStorage.INSTANCE.regionAggImpl;
45      }
46    }
47  
48    public synchronized MetricsUserAggregateSourceImpl getUserAggregate() {
49      synchronized (FactoryStorage.INSTANCE.aggLock) {
50        if (FactoryStorage.INSTANCE.userAggImpl == null) {
51          FactoryStorage.INSTANCE.userAggImpl = new MetricsUserAggregateSourceImpl();
52        }
53        return FactoryStorage.INSTANCE.userAggImpl;
54      }
55    }
56  
57    @Override
58    public synchronized MetricsTableAggregateSourceImpl getTableAggregate() {
59      synchronized (FactoryStorage.INSTANCE.aggLock) {
60        if (FactoryStorage.INSTANCE.tblAggImpl == null) {
61          FactoryStorage.INSTANCE.tblAggImpl = new MetricsTableAggregateSourceImpl();
62        }
63        return FactoryStorage.INSTANCE.tblAggImpl;
64      }
65    }
66  
67    @Override
68    public synchronized MetricsRegionServerSource createServer(
69        MetricsRegionServerWrapper regionServerWrapper) {
70      return new MetricsRegionServerSourceImpl(regionServerWrapper);
71    }
72  
73    @Override
74    public MetricsRegionSource createRegion(MetricsRegionWrapper wrapper) {
75      return new MetricsRegionSourceImpl(wrapper, getRegionAggregate());
76    }
77  
78    @Override
79    public MetricsUserSource createUser(String shortUserName) {
80      return new MetricsUserSourceImpl(shortUserName, getUserAggregate());
81    }
82  
83    @Override
84    public MetricsTableSource createTable(String table, MetricsTableWrapperAggregate wrapper) {
85      return new MetricsTableSourceImpl(table, getTableAggregate(), wrapper);
86    }
87  
88    public MetricsIOSource createIO(MetricsIOWrapper wrapper) {
89      return new MetricsIOSourceImpl(wrapper);
90    }
91  }