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 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
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 aggImpl;
35 private MetricsTableAggregateSourceImpl tblAggImpl;
36 }
37
38 private synchronized MetricsRegionAggregateSourceImpl getAggregate() {
39 synchronized (FactoryStorage.INSTANCE.aggLock) {
40 if (FactoryStorage.INSTANCE.aggImpl == null) {
41 FactoryStorage.INSTANCE.aggImpl = new MetricsRegionAggregateSourceImpl();
42 }
43 return FactoryStorage.INSTANCE.aggImpl;
44 }
45 }
46
47 @Override
48 public synchronized MetricsTableAggregateSourceImpl getTableAggregate() {
49 synchronized (FactoryStorage.INSTANCE.aggLock) {
50 if (FactoryStorage.INSTANCE.tblAggImpl == null) {
51 FactoryStorage.INSTANCE.tblAggImpl = new MetricsTableAggregateSourceImpl();
52 }
53 return FactoryStorage.INSTANCE.tblAggImpl;
54 }
55 }
56
57 @Override
58 public synchronized MetricsRegionServerSource createServer(MetricsRegionServerWrapper regionServerWrapper) {
59 return new MetricsRegionServerSourceImpl(regionServerWrapper);
60 }
61
62 @Override
63 public MetricsRegionSource createRegion(MetricsRegionWrapper wrapper) {
64 return new MetricsRegionSourceImpl(wrapper, getAggregate());
65 }
66
67 @Override
68 public MetricsTableSource createTable(String table, MetricsTableWrapperAggregate wrapper) {
69 return new MetricsTableSourceImpl(table, getTableAggregate(), wrapper);
70 }
71
72 public MetricsIOSource createIO(MetricsIOWrapper wrapper) {
73 return new MetricsIOSourceImpl(wrapper);
74 }
75 }