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