You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Sergey Alaev (Created) (JIRA)" <ji...@apache.org> on 2011/12/10 10:23:40 UTC
[jira] [Created] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
DefaultHttpClient does not release connection if zero-length reply received
---------------------------------------------------------------------------
Key: HTTPCLIENT-1151
URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
Project: HttpComponents HttpClient
Issue Type: Bug
Components: HttpClient
Affects Versions: 4.1.2, 4.1.1
Reporter: Sergey Alaev
When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
Request: org.apache.http.HttpPost
HTTP server response:
HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
Exception when doing another request reusing that DefaultHttpClient:
Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
We are using digest auth if that matters:
request.addHeader("X-Requested-Auth", "Digest");
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Commented] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Oleg Kalnichevski (Commented) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166875#comment-13166875 ]
Oleg Kalnichevski commented on HTTPCLIENT-1151:
-----------------------------------------------
I am fairly confident the content length is irrelevant and should have no impact on connection management.
I tried to reproduce the problem using a local Tomcat 6.0.x instance and the following code snippet and as far as I can tell HttpClient worked as advertised.
---
try {
for (int i = 0; i < 2; i++) {
HttpGet httpget = new HttpGet("http://localhost:8080/empty.txt");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
}
} finally {
httpclient.getConnectionManager().shutdown();
}
---
---
[DEBUG] SingleClientConnManager - Get connection for route HttpRoute[{}->http://localhost:8080]
[DEBUG] DefaultClientConnectionOperator - Connecting to localhost:8080
[DEBUG] RequestAddCookies - CookieSpec selected: best-match
[DEBUG] RequestAuthCache - Auth cache not set in the context
[DEBUG] DefaultHttpClient - Attempt 1 to execute request
[DEBUG] DefaultClientConnection - Sending request: GET /empty.txt HTTP/1.1
[DEBUG] headers - >> GET /empty.txt HTTP/1.1
[DEBUG] headers - >> Host: localhost:8080
[DEBUG] headers - >> Connection: Keep-Alive
[DEBUG] headers - >> User-Agent: Apache-HttpClient/4.1.2 (java 1.5)
[DEBUG] DefaultClientConnection - Receiving response: HTTP/1.1 200 OK
[DEBUG] headers - << HTTP/1.1 200 OK
[DEBUG] headers - << Server: Apache-Coyote/1.1
[DEBUG] headers - << Accept-Ranges: bytes
[DEBUG] headers - << ETag: W/"0-1323525939000"
[DEBUG] headers - << Last-Modified: Sat, 10 Dec 2011 14:05:39 GMT
[DEBUG] headers - << Content-Type: text/plain
[DEBUG] headers - << Content-Length: 0
[DEBUG] headers - << Date: Sat, 10 Dec 2011 14:21:00 GMT
[DEBUG] DefaultHttpClient - Connection can be kept alive indefinitely
[DEBUG] SingleClientConnManager - Releasing connection org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter@2b275d39
[DEBUG] SingleClientConnManager - Get connection for route HttpRoute[{}->http://localhost:8080]
[DEBUG] DefaultHttpClient - Stale connection check
[DEBUG] RequestAddCookies - CookieSpec selected: best-match
[DEBUG] RequestAuthCache - Auth cache not set in the context
[DEBUG] DefaultHttpClient - Attempt 1 to execute request
[DEBUG] DefaultClientConnection - Sending request: GET /empty.txt HTTP/1.1
[DEBUG] headers - >> GET /empty.txt HTTP/1.1
[DEBUG] headers - >> Host: localhost:8080
[DEBUG] headers - >> Connection: Keep-Alive
[DEBUG] headers - >> User-Agent: Apache-HttpClient/4.1.2 (java 1.5)
[DEBUG] DefaultClientConnection - Receiving response: HTTP/1.1 200 OK
[DEBUG] headers - << HTTP/1.1 200 OK
[DEBUG] headers - << Server: Apache-Coyote/1.1
[DEBUG] headers - << Accept-Ranges: bytes
[DEBUG] headers - << ETag: W/"0-1323525939000"
[DEBUG] headers - << Last-Modified: Sat, 10 Dec 2011 14:05:39 GMT
[DEBUG] headers - << Content-Type: text/plain
[DEBUG] headers - << Content-Length: 0
[DEBUG] headers - << Date: Sat, 10 Dec 2011 14:21:00 GMT
[DEBUG] DefaultHttpClient - Connection can be kept alive indefinitely
[DEBUG] SingleClientConnManager - Releasing connection org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter@2b5ac3c9
[DEBUG] DefaultClientConnection - Connection shut down
---
Feel free to run your application under debugger and find out whether or not the response stream gets closed and the connection release is attempted.
Oleg
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
> Attachments: wire.log
>
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Resolved] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Oleg Kalnichevski (Resolved) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Oleg Kalnichevski resolved HTTPCLIENT-1151.
-------------------------------------------
Resolution: Cannot Reproduce
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
> Attachments: wire.log
>
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Commented] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Oleg Kalnichevski (Commented) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166823#comment-13166823 ]
Oleg Kalnichevski commented on HTTPCLIENT-1151:
-----------------------------------------------
Please attach a complete wire / context log of the session
http://hc.apache.org/httpcomponents-client-ga/logging.html
Oleg
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Commented] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Sergey Alaev (Commented) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166868#comment-13166868 ]
Sergey Alaev commented on HTTPCLIENT-1151:
------------------------------------------
Yes.
Besides,
a) this code works nicely for hundreds other requests and
b) it starts working if server code patched to return single byte instead of zero.
Code snippet:
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
try {
return uctx.unmarshalDocument(stream, null);
} finally {
try {
stream.close();
} catch (IOException e) {
}
}
//.......
} finally {
httpclient.getConnectionManager().closeExpiredConnections();
httpclient.getConnectionManager().closeIdleConnections(0, TimeUnit.NANOSECONDS);
}
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
> Attachments: wire.log
>
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Commented] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Oleg Kalnichevski (Commented) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166867#comment-13166867 ]
Oleg Kalnichevski commented on HTTPCLIENT-1151:
-----------------------------------------------
I do not see the connection being released back to the connection manager. Are you sure your application correctly closes content stream of the response entity?
Oleg
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
> Attachments: wire.log
>
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Updated] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Sergey Alaev (Updated) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Alaev updated HTTPCLIENT-1151:
-------------------------------------
Attachment: wire.log
Wire/context log as requested
Exception throws right after last line.
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
> Attachments: wire.log
>
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[jira] [Commented] (HTTPCLIENT-1151) DefaultHttpClient does not
release connection if zero-length reply received
Posted by "Sergey Alaev (Commented) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166873#comment-13166873 ]
Sergey Alaev commented on HTTPCLIENT-1151:
------------------------------------------
Sorry, found a bug in my code... this ticket should be closed now.
> DefaultHttpClient does not release connection if zero-length reply received
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1151
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1151
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1.1, 4.1.2
> Reporter: Sergey Alaev
> Attachments: wire.log
>
>
> When doing zero-length POST query using DefaultHttpClient/SingleClientConnManager it does not call SingleClientConnManager.releaseConnection
> Request: org.apache.http.HttpPost
> HTTP server response:
> HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Content-Length: 0, Date: Sat, 10 Dec 2011 09:17:53 GMT, Connection: close]
> Exception when doing another request reusing that DefaultHttpClient:
> Caused by: java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
> Make sure to release the connection before allocating another one.
> at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> We are using digest auth if that matters:
> request.addHeader("X-Requested-Auth", "Digest");
> httpclient.getCredentialsProvider().setCredentials(
> new AuthScope(targetHost.getHostName(), targetHost.getPort(), AuthScope.ANY_REALM),
> new UsernamePasswordCredentials(username, password));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org