1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.regionserver.compactions;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.hadoop.conf.Configuration;
23 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.regionserver.RegionServerServices;
26 import org.apache.hadoop.util.ReflectionUtils;
27
28 @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)
29 public class CompactionThroughputControllerFactory {
30
31 private static final Log LOG = LogFactory.getLog(CompactionThroughputControllerFactory.class);
32
33 public static final String HBASE_THROUGHPUT_CONTROLLER_KEY =
34 "hbase.regionserver.throughput.controller";
35
36 private static final Class<? extends CompactionThroughputController>
37 DEFAULT_THROUGHPUT_CONTROLLER_CLASS = NoLimitCompactionThroughputController.class;
38
39 public static CompactionThroughputController create(RegionServerServices server,
40 Configuration conf) {
41 Class<? extends CompactionThroughputController> clazz = getThroughputControllerClass(conf);
42 CompactionThroughputController controller = ReflectionUtils.newInstance(clazz, conf);
43 controller.setup(server);
44 return controller;
45 }
46
47 public static Class<? extends CompactionThroughputController> getThroughputControllerClass(
48 Configuration conf) {
49 String className =
50 conf.get(HBASE_THROUGHPUT_CONTROLLER_KEY, DEFAULT_THROUGHPUT_CONTROLLER_CLASS.getName());
51 try {
52 return Class.forName(className).asSubclass(CompactionThroughputController.class);
53 } catch (Exception e) {
54 LOG.warn(
55 "Unable to load configured throughput controller '" + className
56 + "', load default throughput controller "
57 + DEFAULT_THROUGHPUT_CONTROLLER_CLASS.getName() + " instead", e);
58 return DEFAULT_THROUGHPUT_CONTROLLER_CLASS;
59 }
60 }
61 }