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