1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.metrics;
20
21
22
23 import com.google.common.cache.CacheBuilder;
24 import com.google.common.cache.CacheLoader;
25 import com.google.common.cache.LoadingCache;
26
27 import java.util.Map;
28 import java.util.concurrent.ConcurrentHashMap;
29 import java.util.concurrent.TimeUnit;
30
31 import org.apache.hadoop.hbase.classification.InterfaceAudience;
32 import org.apache.hadoop.hbase.classification.InterfaceStability;
33 import org.apache.hadoop.metrics2.MetricsInfo;
34 import org.apache.hadoop.metrics2.MetricsTag;
35
36
37
38
39
40 @InterfaceAudience.Private
41 @InterfaceStability.Evolving
42 public final class Interns {
43
44 private static LoadingCache<String, ConcurrentHashMap<String, MetricsInfo>> infoCache =
45 CacheBuilder.newBuilder().expireAfterAccess(1, TimeUnit.DAYS)
46 .build(new CacheLoader<String, ConcurrentHashMap<String, MetricsInfo>>() {
47 public ConcurrentHashMap<String, MetricsInfo> load(String key) {
48 return new ConcurrentHashMap<String, MetricsInfo>();
49 }
50 });
51 private static LoadingCache<MetricsInfo, ConcurrentHashMap<String, MetricsTag>> tagCache =
52 CacheBuilder.newBuilder().expireAfterAccess(1, TimeUnit.DAYS)
53 .build(new CacheLoader<MetricsInfo, ConcurrentHashMap<String, MetricsTag>>() {
54 public ConcurrentHashMap<String, MetricsTag> load(MetricsInfo key) {
55 return new ConcurrentHashMap<String, MetricsTag>();
56 }
57 });
58
59 private Interns(){}
60
61
62
63
64
65
66 public static MetricsInfo info(String name, String description) {
67 Map<String, MetricsInfo> map = infoCache.getUnchecked(name);
68 MetricsInfo info = map.get(description);
69 if (info == null) {
70 info = new MetricsInfoImpl(name, description);
71 map.put(description, info);
72 }
73 return info;
74 }
75
76
77
78
79
80
81
82
83 public static MetricsTag tag(MetricsInfo info, String value) {
84 Map<String, MetricsTag> map = tagCache.getUnchecked(info);
85 MetricsTag tag = map.get(value);
86 if (tag == null) {
87 tag = new MetricsTag(info, value);
88 map.put(value, tag);
89 }
90 return tag;
91 }
92
93
94
95
96
97
98
99
100
101 public static MetricsTag tag(String name, String description, String value) {
102 return tag(info(name, description), value);
103 }
104 }