Merge lp:~karni/ubuntuone-files-java-library/consume-content into lp:ubuntuone-files-java-library

Proposed by Michał Karnicki
Status: Merged
Merged at revision: 13
Proposed branch: lp:~karni/ubuntuone-files-java-library/consume-content
Merge into: lp:ubuntuone-files-java-library
Diff against target: 193 lines (+34/-12)
2 files modified
src/main/com/ubuntuone/api/files/U1FileAPI.java (+32/-12)
src/main/com/ubuntuone/api/files/client/ContentClient.java (+2/-0)
To merge this branch: bzr merge lp:~karni/ubuntuone-files-java-library/consume-content
Reviewer Review Type Date Requested Status
Roberto Alsina (community) Approve
Review via email: mp+146149@code.launchpad.net

Commit message

Fully consume http entity content.

Description of the change

Ensure content is properly consumed. This is a "just in case" workaround for known HttpClient source of issues.

To post a comment you must log in.
Revision history for this message
Roberto Alsina (ralsina) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/main/com/ubuntuone/api/files/U1FileAPI.java'
2--- src/main/com/ubuntuone/api/files/U1FileAPI.java 2012-09-09 22:38:24 +0000
3+++ src/main/com/ubuntuone/api/files/U1FileAPI.java 2013-02-01 15:33:22 +0000
4@@ -225,7 +225,7 @@
5 String.format("%s Response failure (%d).", message, statusCode), statusCode));
6 break;
7 }
8- consumeContent(response.getEntity());
9+ consumeContent(response);
10 }
11
12 /**
13@@ -247,6 +247,7 @@
14 final int statusCode = getStatusCode(response);
15 if (statusCode == HttpStatus.SC_OK) {
16 U1UserJson.fromJson(getContentInputStream(response), callback);
17+ consumeContent(response);
18 } else {
19 handleNon200HttpResponse(response, "Could not get user.", callback);
20 }
21@@ -295,6 +296,7 @@
22 final int statusCode = getStatusCode(response);
23 if (statusCode == HttpStatus.SC_OK) {
24 U1VolumeJson.fromJson(getContentInputStream(response), callback);
25+ consumeContent(response);
26 } else {
27 handleNon200HttpResponse(response, "Could not get volumes.", callback);
28 }
29@@ -342,6 +344,7 @@
30 final int statusCode = getStatusCode(response);
31 if (statusCode == HttpStatus.SC_OK) {
32 U1VolumeJson.fromJson(getContentInputStream(response), callback);
33+ consumeContent(response);
34 } else {
35 handleNon200HttpResponse(response, "Could not get volume.", callback);
36 }
37@@ -394,6 +397,7 @@
38 final int statusCode = getStatusCode(response);
39 if (statusCode == HttpStatus.SC_OK) {
40 U1DeltaJson.fromJson(getContentInputStream(response), callback);
41+ consumeContent(response);
42 } else {
43 handleNon200HttpResponse(response, "Could not get volume.", callback);
44 }
45@@ -441,6 +445,7 @@
46 final int statusCode = getStatusCode(response);
47 if (statusCode == HttpStatus.SC_OK) {
48 U1VolumeJson.fromJson(getContentInputStream(response), callback);
49+ consumeContent(response);
50 } else {
51 handleNon200HttpResponse(response, "Could not get volumes.", callback);
52 }
53@@ -489,7 +494,7 @@
54 response = resourceClient.request(HttpDelete.METHOD_NAME, path);
55 final int statusCode = getStatusCode(response);
56 if (statusCode == HttpStatus.SC_OK) {
57- consumeContent(response.getEntity());
58+ consumeContent(response);
59 callback.onSuccess(null);
60 } else {
61 handleNon200HttpResponse(response, "Could not delete volume.", callback);
62@@ -570,7 +575,7 @@
63 response = resourceClient.request(HttpDelete.METHOD_NAME, path);
64 final int statusCode = getStatusCode(response);
65 if (statusCode == HttpStatus.SC_OK) {
66- consumeContent(response.getEntity());
67+ consumeContent(response);
68 callback.onSuccess(null);
69 } else {
70 handleNon200HttpResponse(response, "Could not delete node.", callback);
71@@ -627,6 +632,7 @@
72 final int statusCode = getStatusCode(response);
73 if (statusCode == HttpStatus.SC_OK) {
74 U1NodeJson.fromJson(getContentInputStream(response), callback);
75+ consumeContent(response);
76 } else {
77 handleNon200HttpResponse(response, "Could not get node.", callback);
78 }
79@@ -677,6 +683,7 @@
80 final int statusCode = getStatusCode(response);
81 if (statusCode == HttpStatus.SC_OK) {
82 U1NodeJson.fromJson(getContentInputStream(response), callback);
83+ consumeContent(response);
84 } else {
85 handleNon200HttpResponse(response, "Could not perform move.", callback);
86 }
87@@ -728,6 +735,7 @@
88 final int statusCode = getStatusCode(response);
89 if (statusCode == HttpStatus.SC_OK) {
90 U1NodeJson.fromJson(getContentInputStream(response), callback);
91+ consumeContent(response);
92 } else {
93 handleNon200HttpResponse(response, "Could not publis file.", callback);
94 }
95@@ -773,6 +781,7 @@
96 final int statusCode = getStatusCode(response);
97 if (statusCode == HttpStatus.SC_OK) {
98 U1NodeJson.fromJson(getContentInputStream(response), callback);
99+ consumeContent(response);
100 } else {
101 handleNon200HttpResponse(response, "Could not get public files.", callback);
102 }
103@@ -851,6 +860,7 @@
104 if (statusCode == 200 || statusCode == 201) {
105 LOGGER.info("Magic upload success, status code: " + statusCode);
106 U1NodeJson.fromJson(getContentInputStream(response), callback);
107+ consumeContent(response);
108 return;
109 } else if (statusCode == 400) {
110 LOGGER.info("Magic upload failure, status code: " + statusCode);
111@@ -875,6 +885,7 @@
112 final int statusCode = getStatusCode(response);
113 if (200 <= statusCode && statusCode <= 299) {
114 U1NodeJson.fromJson(getContentInputStream(response), callback);
115+ consumeContent(response);
116 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {
117 // Do nothing, request has been cancelled.
118 } else {
119@@ -941,7 +952,7 @@
120 contentPath, offset, cancelTrigger);
121 statusCode = getStatusCode(response);
122 if (statusCode != HttpStatus.SC_PARTIAL_CONTENT) {
123- consumeContent(response.getEntity());
124+ consumeContent(response);
125 offset = 0;
126 }
127 }
128@@ -964,6 +975,7 @@
129
130 final FileOutputStream stream = new FileOutputStream(file, isResuming);
131 in.writeTo(stream);
132+ consumeContent(response);
133 callback.onSuccess();
134 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {
135 // Do nothing, request has been cancelled.
136@@ -1010,7 +1022,7 @@
137 contentPath, offset, cancelTrigger);
138 statusCode = getStatusCode(response);
139 if (statusCode != HttpStatus.SC_PARTIAL_CONTENT) {
140- consumeContent(response.getEntity());
141+ consumeContent(response);
142 offset = 0;
143 }
144 }
145@@ -1031,6 +1043,7 @@
146
147 final FileOutputStream stream = new FileOutputStream(file, isResuming);
148 in.writeTo(stream);
149+ consumeContent(response);
150 callback.onSuccess();
151 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {
152 // Do nothing, request has been cancelled.
153@@ -1069,13 +1082,20 @@
154 return response != null ? response.getEntity().getContent() : null;
155 }
156
157- private static final void consumeContent(HttpEntity entity) {
158- if (entity != null) {
159- try {
160- final InputStream in = entity.getContent();
161- if (in != null) in.close();
162- } catch (Exception e) {
163- // Ignore.
164+ private static final void consumeContent(HttpResponse response) {
165+ if (response != null) {
166+ HttpEntity entity = response.getEntity();
167+ if (entity != null) {
168+ try {
169+ InputStream in = entity.getContent();
170+ if (in != null) {
171+ while (in.read() != -1)
172+ ; // Just read the content.
173+ in.close();
174+ }
175+ } catch (IOException e) {
176+ // Ignore.
177+ }
178 }
179 }
180 }
181
182=== modified file 'src/main/com/ubuntuone/api/files/client/ContentClient.java'
183--- src/main/com/ubuntuone/api/files/client/ContentClient.java 2012-08-06 20:37:39 +0000
184+++ src/main/com/ubuntuone/api/files/client/ContentClient.java 2013-02-01 15:33:22 +0000
185@@ -100,6 +100,8 @@
186
187 sign(request);
188 logger.fine(request.getRequestLine().toString());
189+ HttpUtils.dumpHeaders(request.getAllHeaders(), logger, Level.FINE);
190+
191 final HttpResponse response = httpClient.execute(getHost(), request);
192 if (response != null) {
193 int statusCode = response.getStatusLine().getStatusCode();

Subscribers

People subscribed via source and target branches