1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.rest;
20
21 import java.io.IOException;
22
23 import org.apache.hadoop.hbase.classification.InterfaceAudience;
24 import org.apache.hadoop.conf.Configuration;
25 import org.apache.hadoop.hbase.client.HBaseAdmin;
26 import org.apache.hadoop.hbase.client.HTableInterface;
27 import org.apache.hadoop.hbase.security.UserProvider;
28 import org.apache.hadoop.hbase.util.ConnectionCache;
29 import org.apache.hadoop.hbase.util.JvmPauseMonitor;
30 import org.apache.hadoop.security.UserGroupInformation;
31 import org.apache.hadoop.security.authorize.ProxyUsers;
32
33
34
35
36 @InterfaceAudience.Private
37 public class RESTServlet implements Constants {
38 private static RESTServlet INSTANCE;
39 private final Configuration conf;
40 private final MetricsREST metrics;
41 private final ConnectionCache connectionCache;
42 private final UserGroupInformation realUser;
43 private final JvmPauseMonitor pauseMonitor;
44
45 static final String CLEANUP_INTERVAL = "hbase.rest.connection.cleanup-interval";
46 static final String MAX_IDLETIME = "hbase.rest.connection.max-idletime";
47 static final String HBASE_REST_SUPPORT_PROXYUSER = "hbase.rest.support.proxyuser";
48
49 UserGroupInformation getRealUser() {
50 return realUser;
51 }
52
53
54
55
56 public synchronized static RESTServlet getInstance() {
57 assert(INSTANCE != null);
58 return INSTANCE;
59 }
60
61
62
63
64
65
66
67 public synchronized static RESTServlet getInstance(Configuration conf,
68 UserProvider userProvider) throws IOException {
69 if (INSTANCE == null) {
70 INSTANCE = new RESTServlet(conf, userProvider);
71 }
72 return INSTANCE;
73 }
74
75 public synchronized static void stop() {
76 if (INSTANCE != null) INSTANCE = null;
77 }
78
79
80
81
82
83
84
85 RESTServlet(final Configuration conf,
86 final UserProvider userProvider) throws IOException {
87 this.realUser = userProvider.getCurrent().getUGI();
88 this.conf = conf;
89
90 int cleanInterval = conf.getInt(CLEANUP_INTERVAL, 10 * 1000);
91 int maxIdleTime = conf.getInt(MAX_IDLETIME, 10 * 60 * 1000);
92 connectionCache = new ConnectionCache(
93 conf, userProvider, cleanInterval, maxIdleTime);
94 if (supportsProxyuser()) {
95 ProxyUsers.refreshSuperUserGroupsConfiguration(conf);
96 }
97
98 metrics = new MetricsREST();
99
100 pauseMonitor = new JvmPauseMonitor(conf, metrics.getSource());
101 pauseMonitor.start();
102 }
103
104 HBaseAdmin getAdmin() throws IOException {
105 return connectionCache.getAdmin();
106 }
107
108
109
110
111 HTableInterface getTable(String tableName) throws IOException {
112 return connectionCache.getTable(tableName);
113 }
114
115 Configuration getConfiguration() {
116 return conf;
117 }
118
119 MetricsREST getMetrics() {
120 return metrics;
121 }
122
123
124
125
126
127
128 boolean isReadOnly() {
129 return getConfiguration().getBoolean("hbase.rest.readonly", false);
130 }
131
132 void setEffectiveUser(String effectiveUser) {
133 connectionCache.setEffectiveUser(effectiveUser);
134 }
135
136 boolean supportsProxyuser() {
137 return conf.getBoolean(HBASE_REST_SUPPORT_PROXYUSER, false);
138 }
139 }