1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.client;
19
20 import org.apache.hadoop.conf.Configuration;
21 import org.apache.hadoop.hbase.HConstants;
22 import org.apache.hadoop.hbase.util.ReflectionUtils;
23
24
25
26
27 public class RpcRetryingCallerFactory {
28
29
30 public static final String CUSTOM_CALLER_CONF_KEY = "hbase.rpc.callerfactory.class";
31 protected final Configuration conf;
32 private final long pause;
33 private final int retries;
34 private final int startLogErrorsCnt;
35
36 public RpcRetryingCallerFactory(Configuration conf) {
37 this.conf = conf;
38 pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,
39 HConstants.DEFAULT_HBASE_CLIENT_PAUSE);
40 retries = conf.getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,
41 HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);
42 startLogErrorsCnt = conf.getInt(AsyncProcess.START_LOG_ERRORS_AFTER_COUNT_KEY,
43 AsyncProcess.DEFAULT_START_LOG_ERRORS_AFTER_COUNT);
44 }
45
46 public <T> RpcRetryingCaller<T> newCaller() {
47
48
49 return new RpcRetryingCaller<T>(pause, retries, startLogErrorsCnt);
50 }
51
52 public static RpcRetryingCallerFactory instantiate(Configuration configuration) {
53 String clazzName = RpcRetryingCallerFactory.class.getName();
54 String rpcCallerFactoryClazz =
55 configuration.get(RpcRetryingCallerFactory.CUSTOM_CALLER_CONF_KEY, clazzName);
56 if (rpcCallerFactoryClazz.equals(clazzName)) {
57 return new RpcRetryingCallerFactory(configuration);
58 }
59 return ReflectionUtils.instantiateWithCustomCtor(rpcCallerFactoryClazz,
60 new Class[] { Configuration.class }, new Object[] { configuration });
61 }
62 }