Skip to content
This repository was archived by the owner on Apr 22, 2025. It is now read-only.

Commit 413a242

Browse files
committed
FAB-10322 HFCAClient needs timeout settings
Change-Id: I155916557518d2392b241d44a05027ffd6ca208d Signed-off-by: rickr <cr22rc@gmail.com>
1 parent 8f6944a commit 413a242

File tree

2 files changed

+75
-16
lines changed

2 files changed

+75
-16
lines changed

src/main/java/org/hyperledger/fabric_ca/sdk/HFCAClient.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import org.apache.http.client.AuthCache;
7272
import org.apache.http.client.CredentialsProvider;
7373
import org.apache.http.client.HttpClient;
74+
import org.apache.http.client.config.RequestConfig;
7475
import org.apache.http.client.methods.HttpDelete;
7576
import org.apache.http.client.methods.HttpGet;
7677
import org.apache.http.client.methods.HttpPost;
@@ -173,6 +174,10 @@ public class HFCAClient {
173174

174175
private static final Config config = Config.getConfig(); // DO NOT REMOVE THIS IS NEEDED TO MAKE SURE WE FIRST LOAD CONFIG!!!
175176

177+
private static final int CONNECTION_REQUEST_TIMEOUT = config.getConnectionRequestTimeout();
178+
private static final int CONNECT_TIMEOUT = config.getConnectTimeout();
179+
private static final int SOCKET_TIMEOUT = config.getSocketTimeout();
180+
176181
private static final Log logger = LogFactory.getLog(HFCAClient.class);
177182

178183
static final String FABRIC_CA_REQPROP = "caname";
@@ -1088,6 +1093,7 @@ String httpPost(String url, String body, UsernamePasswordCredentials credentials
10881093
HttpClient client = httpClientBuilder.build();
10891094

10901095
HttpPost httpPost = new HttpPost(url);
1096+
httpPost.setConfig(getRequestConfig());
10911097

10921098
AuthCache authCache = new BasicAuthCache();
10931099

@@ -1142,6 +1148,7 @@ String httpPost(String url, String body, UsernamePasswordCredentials credentials
11421148
JsonObject httpPost(String url, String body, User registrar) throws Exception {
11431149
String authHTTPCert = getHTTPAuthCertificate(registrar.getEnrollment(), body);
11441150
HttpPost httpPost = new HttpPost(url);
1151+
httpPost.setConfig(getRequestConfig());
11451152
logger.debug(format("httpPost %s, body:%s, authHTTPCert: %s", url, body, authHTTPCert));
11461153

11471154
final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
@@ -1163,6 +1170,7 @@ JsonObject httpGet(String url, User registrar) throws Exception {
11631170
String authHTTPCert = getHTTPAuthCertificate(registrar.getEnrollment(), "");
11641171
url = getURL(url);
11651172
HttpGet httpGet = new HttpGet(url);
1173+
httpGet.setConfig(getRequestConfig());
11661174
logger.debug(format("httpGet %s, authHTTPCert: %s", url, authHTTPCert));
11671175

11681176
final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
@@ -1182,6 +1190,7 @@ JsonObject httpGet(String url, User registrar) throws Exception {
11821190
JsonObject httpPut(String url, String body, User registrar) throws Exception {
11831191
String authHTTPCert = getHTTPAuthCertificate(registrar.getEnrollment(), body);
11841192
HttpPut httpPut = new HttpPut(url);
1193+
httpPut.setConfig(getRequestConfig());
11851194
logger.debug(format("httpPutt %s, body:%s, authHTTPCert: %s", url, body, authHTTPCert));
11861195

11871196
final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
@@ -1202,6 +1211,7 @@ JsonObject httpPut(String url, String body, User registrar) throws Exception {
12021211
JsonObject httpDelete(String url, User registrar) throws Exception {
12031212
String authHTTPCert = getHTTPAuthCertificate(registrar.getEnrollment(), "");
12041213
HttpDelete httpDelete = new HttpDelete(url);
1214+
httpDelete.setConfig(getRequestConfig());
12051215
logger.debug(format("httpPut %s, authHTTPCert: %s", url, authHTTPCert));
12061216

12071217
final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
@@ -1461,5 +1471,17 @@ String toJson(JsonObject toJsonFunc) {
14611471
return stringWriter.toString();
14621472
}
14631473

1474+
private RequestConfig getRequestConfig() {
1475+
1476+
RequestConfig.Builder ret = RequestConfig.custom();
1477+
1478+
ret.setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT);
1479+
ret.setConnectTimeout(CONNECT_TIMEOUT);
1480+
ret.setSocketTimeout(SOCKET_TIMEOUT);
1481+
1482+
return ret.build();
1483+
1484+
}
1485+
14641486
}
14651487

src/main/java/org/hyperledger/fabric_ca/sdk/helper/Config.java

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,29 @@
3535
public class Config {
3636
private static final Log logger = LogFactory.getLog(Config.class);
3737

38+
private static final String BASE_PROP = "org.hyperledger.fabric_ca.sdk.";
39+
3840
private static final String DEFAULT_CONFIG = "config.properties";
39-
public static final String ORG_HYPERLEDGER_FABRIC_SDK_CONFIGURATION = "org.hyperledger.fabric.sdk.configuration";
40-
public static final String SECURITY_LEVEL = "org.hyperledger.fabric.sdk.security_level";
41-
public static final String HASH_ALGORITHM = "org.hyperledger.fabric.sdk.hash_algorithm";
42-
public static final String CACERTS = "org.hyperledger.fabric.sdk.cacerts";
43-
public static final String PROPOSAL_WAIT_TIME = "org.hyperledger.fabric.sdk.proposal.wait.time";
44-
45-
public static final String ASYMMETRIC_KEY_TYPE = "org.hyperledger.fabric.sdk.crypto.asymmetric_key_type";
46-
public static final String KEY_AGREEMENT_ALGORITHM = "org.hyperledger.fabric.sdk.crypto.key_agreement_algorithm";
47-
public static final String SYMMETRIC_KEY_TYPE = "org.hyperledger.fabric.sdk.crypto.symmetric_key_type";
48-
public static final String SYMMETRIC_KEY_BYTE_COUNT = "org.hyperledger.fabric.sdk.crypto.symmetric_key_byte_count";
49-
public static final String SYMMETRIC_ALGORITHM = "org.hyperledger.fabric.sdk.crypto.symmetric_algorithm";
50-
public static final String MAC_KEY_BYTE_COUNT = "org.hyperledger.fabric.sdk.crypto.mac_key_byte_count";
51-
public static final String CERTIFICATE_FORMAT = "org.hyperledger.fabric.sdk.crypto.certificate_format";
52-
public static final String SIGNATURE_ALGORITHM = "org.hyperledger.fabric.sdk.crypto.default_signature_algorithm";
53-
public static final String MAX_LOG_STRING_LENGTH = "org.hyperledger.fabric.sdk.log.stringlengthmax";
54-
public static final String LOGGERLEVEL = "org.hyperledger.fabric_ca.sdk.loglevel"; // ORG_HYPERLEDGER_FABRIC_CA_SDK_LOGLEVEL=TRACE,DEBUG
41+
public static final String ORG_HYPERLEDGER_FABRIC_SDK_CONFIGURATION = BASE_PROP + "configuration";
42+
public static final String SECURITY_LEVEL = BASE_PROP + "security_level";
43+
public static final String HASH_ALGORITHM = BASE_PROP + "hash_algorithm";
44+
public static final String CACERTS = "cacerts";
45+
public static final String PROPOSAL_WAIT_TIME = BASE_PROP + "proposal.wait.time";
46+
47+
public static final String ASYMMETRIC_KEY_TYPE = BASE_PROP + "crypto.asymmetric_key_type";
48+
public static final String KEY_AGREEMENT_ALGORITHM = BASE_PROP + "crypto.key_agreement_algorithm";
49+
public static final String SYMMETRIC_KEY_TYPE = BASE_PROP + "crypto.symmetric_key_type";
50+
public static final String SYMMETRIC_KEY_BYTE_COUNT = BASE_PROP + "crypto.symmetric_key_byte_count";
51+
public static final String SYMMETRIC_ALGORITHM = BASE_PROP + "crypto.symmetric_algorithm";
52+
public static final String MAC_KEY_BYTE_COUNT = BASE_PROP + "crypto.mac_key_byte_count";
53+
public static final String CERTIFICATE_FORMAT = BASE_PROP + "crypto.certificate_format";
54+
public static final String SIGNATURE_ALGORITHM = BASE_PROP + "crypto.default_signature_algorithm";
55+
public static final String MAX_LOG_STRING_LENGTH = BASE_PROP + "log.stringlengthmax";
56+
public static final String LOGGERLEVEL = BASE_PROP + "loglevel"; // ORG_HYPERLEDGER_FABRIC_CA_SDK_LOGLEVEL=TRACE,DEBUG
57+
58+
public static final String CONNECTION_REQUEST_TIMEOUT = BASE_PROP + "connection.connection_request_timeout"; //ORG_HYPERLEDGER_FABRIC_CA_SDK_CONNECTION_CONNECTION_REQUEST_TIMEOUT
59+
public static final String CONNECT_TIMEOUT = BASE_PROP + "connection.connect_timeout"; //ORG_HYPERLEDGER_FABRIC_CA_SDK_CONNECTION_CONNECT_TIMEOUT
60+
public static final String SOCKET_TIMEOUT = BASE_PROP + "connection.socket_timeout"; //ORG_HYPERLEDGER_FABRIC_CA_SDK_CONNECTION_SOCKET_TIMEOUT
5561

5662
private static Config config;
5763
private static final Properties sdkProperties = new Properties();
@@ -84,6 +90,11 @@ private Config() {
8490
defaultProperty(SIGNATURE_ALGORITHM, "SHA256withECDSA");
8591
defaultProperty(SECURITY_LEVEL, "256");
8692
defaultProperty(HASH_ALGORITHM, "SHA2");
93+
94+
defaultProperty(CONNECTION_REQUEST_TIMEOUT, "-1");
95+
defaultProperty(CONNECT_TIMEOUT, "-1");
96+
defaultProperty(SOCKET_TIMEOUT, "-1");
97+
8798
// TODO remove this once we have implemented MSP and get the peer certs from the channel
8899
defaultProperty(CACERTS, "/genesisblock/peercacert.pem");
89100

@@ -256,4 +267,30 @@ public int maxLogStringLength() {
256267
return Integer.parseInt(getProperty(MAX_LOG_STRING_LENGTH));
257268
}
258269

270+
/**
271+
* milliseconds used when requesting a connection.
272+
*
273+
* @return
274+
*/
275+
276+
public int getConnectionRequestTimeout() {
277+
return Integer.parseInt(getProperty(CONNECTION_REQUEST_TIMEOUT));
278+
}
279+
280+
/**
281+
* Determines the timeout in milliseconds until a connection is established.
282+
* @return
283+
*/
284+
public int getConnectTimeout() {
285+
return Integer.parseInt(getProperty(CONNECT_TIMEOUT));
286+
}
287+
288+
/**
289+
* Defines the socket timeout (SO_TIMEOUT) in milliseconds, which is the timeout for waiting for data
290+
* @return
291+
*/
292+
public int getSocketTimeout() {
293+
294+
return Integer.parseInt(getProperty(SOCKET_TIMEOUT));
295+
}
259296
}

0 commit comments

Comments
 (0)