1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.regionserver;
20
21 import org.apache.hadoop.hbase.classification.InterfaceAudience;
22
23
24
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 aggImpl;
32 private MetricsTableAggregateSourceImpl tblAggImpl;
33 }
34
35 private synchronized MetricsRegionAggregateSourceImpl getAggregate() {
36 synchronized (FactoryStorage.INSTANCE.aggLock) {
37 if (FactoryStorage.INSTANCE.aggImpl == null) {
38 FactoryStorage.INSTANCE.aggImpl = new MetricsRegionAggregateSourceImpl();
39 }
40 return FactoryStorage.INSTANCE.aggImpl;
41 }
42 }
43
44 @Override
45 public synchronized MetricsTableAggregateSourceImpl getTableAggregate() {
46 synchronized (FactoryStorage.INSTANCE.aggLock) {
47 if (FactoryStorage.INSTANCE.tblAggImpl == null) {
48 FactoryStorage.INSTANCE.tblAggImpl = new MetricsTableAggregateSourceImpl();
49 }
50 return FactoryStorage.INSTANCE.tblAggImpl;
51 }
52 }
53
54 @Override
55 public synchronized MetricsRegionServerSource createServer(MetricsRegionServerWrapper regionServerWrapper) {
56 return new MetricsRegionServerSourceImpl(regionServerWrapper);
57 }
58
59 @Override
60 public MetricsRegionSource createRegion(MetricsRegionWrapper wrapper) {
61 return new MetricsRegionSourceImpl(wrapper, getAggregate());
62 }
63
64 @Override
65 public MetricsTableSource createTable(String table, MetricsTableWrapperAggregate wrapper) {
66 return new MetricsTableSourceImpl(table, getTableAggregate(), wrapper);
67 }
68 }