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 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 }