You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@knox.apache.org by "Vincent Devillers (JIRA)" <ji...@apache.org> on 2016/12/26 13:48:58 UTC
[jira] [Work started] (KNOX-807) Missing resource deallocation
[ https://issues.apache.org/jira/browse/KNOX-807?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on KNOX-807 started by Vincent Devillers.
----------------------------------------------
> Missing resource deallocation
> -----------------------------
>
> Key: KNOX-807
> URL: https://issues.apache.org/jira/browse/KNOX-807
> Project: Apache Knox
> Issue Type: Bug
> Components: ClientDSL
> Reporter: Vincent Devillers
> Assignee: Vincent Devillers
> Labels: KIP-4
> Fix For: 0.12.0
>
> Attachments: KNOX-807.patch
>
>
> h2. Release connection to pool after HTTP call
> The close() method in BasicResponse does only EntityUtils.consumeQuietly(response.getEntity()):
> {code}
> public void close() {
> this.consume();
> }
> public void consume() {
> if(!this.consumed) {
> EntityUtils.consumeQuietly(this.response.getEntity());
> this.consumed = true;
> }
> }
> {code}
> The underlying HTTP connection is still held. In order to ensure correct deallocation of OS resources we need to call CloseableHttpResponse#close() like this:
> {code}
> public void close() {
> try {
> this.consume();
> } finally {
> if (response instanceof CloseableHttpResponse) {
> try {
> ((CloseableHttpResponse) response).close();
> } catch (IOException e) {
> throw Throwables.propagate(e);
> }
> }
> }
> }
> {code}
> h2. Shutdown connection pool
> Also when the Hadoop session is no more used, the only method present by to be call is shutdown(), but it close only the ExecutorService. When a CloseableHttpClient instance is no longer needed, we have to shut down the connection manager to ensure immediate deallocation of all OS resources.
> {code}
> public void close() {
> try {
> executor.shutdownNow();
> } catch(Exception e) {
> // log something here
> }
> try {
> client.close();
> // client.close() should call getConnectionManager().shutdown();
> } catch(Exception e) {
> // log something here
> }
> }
> {code}
> [Source|https://blog.layer4.fr/2016/12/06/knox-production-pitfalls-and-common-mistakes/]
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)