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.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
24 import org.apache.hadoop.metrics2.MetricsBuilder;
25 import org.apache.hadoop.metrics2.MetricsRecordBuilder;
26
27 import java.util.TreeSet;
28 import java.util.concurrent.locks.ReentrantReadWriteLock;
29
30 public class MetricsRegionAggregateSourceImpl extends BaseSourceImpl
31 implements MetricsRegionAggregateSource {
32 private final Log LOG = LogFactory.getLog(this.getClass());
33
34 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(MetricsBuilder metricsBuilder, boolean all) {
81
82 MetricsRecordBuilder mrb = metricsBuilder.addRecord(metricsName)
83 .setContext(metricsContext);
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 }