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