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.io.IOException;
22 import org.apache.hadoop.conf.Configuration;
23 import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.ipc.RpcServer;
26 import org.apache.hadoop.hbase.security.User;
27 import org.apache.hadoop.hbase.security.UserProvider;
28 import org.apache.hadoop.hbase.util.LossyCounting;
29
30 @InterfaceAudience.Private
31 public class MetricsUserAggregateImpl implements MetricsUserAggregate{
32
33
34 private final UserProvider userProvider;
35
36 private final MetricsUserAggregateSource source;
37 private final LossyCounting<MetricsUserSource> userMetricLossyCounting;
38
39 public MetricsUserAggregateImpl(Configuration conf) {
40 source = CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
41 .getUserAggregate();
42 userMetricLossyCounting = new LossyCounting<>("userMetrics", conf,
43 new LossyCounting.LossyCountingListener<MetricsUserSource>() {
44 @Override
45 public void sweep(MetricsUserSource key) {
46 source.deregister(key);
47 }
48 });
49 this.userProvider = UserProvider.instantiate(conf);
50 }
51
52
53
54
55
56
57 private String getActiveUser() {
58 User user = RpcServer.getRequestUser();
59 if (user == null) {
60 try {
61 user = userProvider.getCurrent();
62 } catch (IOException e) { }
63 }
64 return user != null ? user.getShortName() : null;
65 }
66
67 MetricsUserAggregateSource getSource() {
68 return source;
69 }
70
71 @Override
72 public void updatePut(long t) {
73 String user = getActiveUser();
74 if (user != null) {
75 getOrCreateMetricsUser(user).updatePut(t);
76 }
77 }
78
79 @Override
80 public void updateDelete(long t) {
81 String user = getActiveUser();
82 if (user != null) {
83 getOrCreateMetricsUser(user).updateDelete(t);
84 }
85 }
86
87 @Override
88 public void updateGet(long t) {
89 String user = getActiveUser();
90 if (user != null) {
91 getOrCreateMetricsUser(user).updateGet(t);
92 }
93 }
94
95 @Override
96 public void updateIncrement(long t) {
97 String user = getActiveUser();
98 if (user != null) {
99 getOrCreateMetricsUser(user).updateIncrement(t);
100 }
101 }
102
103 @Override
104 public void updateAppend(long t) {
105 String user = getActiveUser();
106 if (user != null) {
107 getOrCreateMetricsUser(user).updateAppend(t);
108 }
109 }
110
111 @Override
112 public void updateReplay(long t) {
113 String user = getActiveUser();
114 if (user != null) {
115 getOrCreateMetricsUser(user).updateReplay(t);
116 }
117 }
118
119 @Override
120 public void updateScanTime(long t) {
121 String user = getActiveUser();
122 if (user != null) {
123 getOrCreateMetricsUser(user).updateScanTime(t);
124 }
125 }
126
127 private MetricsUserSource getOrCreateMetricsUser(String user) {
128 MetricsUserSource userSource = source.getOrCreateMetricsUser(user);
129 userMetricLossyCounting.add(userSource);
130 return userSource;
131 }
132 }