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 java.util.TreeSet;
22 import java.util.concurrent.locks.ReentrantReadWriteLock;
23
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
26 import org.apache.hadoop.metrics2.MetricsCollector;
27 import org.apache.hadoop.metrics2.MetricsRecordBuilder;
28
29 @InterfaceAudience.Private
30 public class MetricsRegionAggregateSourceImpl extends BaseSourceImpl
31 implements MetricsRegionAggregateSource {
32
33
34 private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
35
36 private final TreeSet<MetricsRegionSourceImpl> regionSources =
37 new TreeSet<MetricsRegionSourceImpl>();
38
39 public MetricsRegionAggregateSourceImpl() {
40 this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT);
41 }
42
43
44 public MetricsRegionAggregateSourceImpl(String metricsName,
45 String metricsDescription,
46 String metricsContext,
47 String metricsJmxContext) {
48 super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
49 }
50
51 @Override
52 public void register(MetricsRegionSource source) {
53 lock.writeLock().lock();
54 try {
55 regionSources.add((MetricsRegionSourceImpl) source);
56 } finally {
57 lock.writeLock().unlock();
58 }
59 }
60
61 @Override
62 public void deregister(MetricsRegionSource source) {
63 lock.writeLock().lock();
64 try {
65 regionSources.remove(source);
66 } finally {
67 lock.writeLock().unlock();
68 }
69 }
70
71
72
73
74
75
76
77
78
79 @Override
80 public void getMetrics(MetricsCollector collector, boolean all) {
81
82
83 MetricsRecordBuilder mrb = collector.addRecord(metricsName);
84
85 if (regionSources != null) {
86 lock.readLock().lock();
87 try {
88 for (MetricsRegionSourceImpl regionMetricSource : regionSources) {
89 regionMetricSource.snapshot(mrb, all);
90 }
91 } finally {
92 lock.readLock().unlock();
93 }
94 }
95
96 metricsRegistry.snapshot(mrb, all);
97 }
98 }