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
=== modified file 'src/main/com/ubuntuone/api/files/U1FileAPI.java'
--- src/main/com/ubuntuone/api/files/U1FileAPI.java 2012-09-09 22:38:24 +0000
+++ src/main/com/ubuntuone/api/files/U1FileAPI.java 2013-02-01 15:33:22 +0000
@@ -225,7 +225,7 @@
225 String.format("%s Response failure (%d).", message, statusCode), statusCode));225 String.format("%s Response failure (%d).", message, statusCode), statusCode));
226 break;226 break;
227 }227 }
228 consumeContent(response.getEntity());228 consumeContent(response);
229 }229 }
230230
231 /**231 /**
@@ -247,6 +247,7 @@
247 final int statusCode = getStatusCode(response); 247 final int statusCode = getStatusCode(response);
248 if (statusCode == HttpStatus.SC_OK) {248 if (statusCode == HttpStatus.SC_OK) {
249 U1UserJson.fromJson(getContentInputStream(response), callback);249 U1UserJson.fromJson(getContentInputStream(response), callback);
250 consumeContent(response);
250 } else {251 } else {
251 handleNon200HttpResponse(response, "Could not get user.", callback);252 handleNon200HttpResponse(response, "Could not get user.", callback);
252 }253 }
@@ -295,6 +296,7 @@
295 final int statusCode = getStatusCode(response);296 final int statusCode = getStatusCode(response);
296 if (statusCode == HttpStatus.SC_OK) {297 if (statusCode == HttpStatus.SC_OK) {
297 U1VolumeJson.fromJson(getContentInputStream(response), callback);298 U1VolumeJson.fromJson(getContentInputStream(response), callback);
299 consumeContent(response);
298 } else {300 } else {
299 handleNon200HttpResponse(response, "Could not get volumes.", callback);301 handleNon200HttpResponse(response, "Could not get volumes.", callback);
300 }302 }
@@ -342,6 +344,7 @@
342 final int statusCode = getStatusCode(response);344 final int statusCode = getStatusCode(response);
343 if (statusCode == HttpStatus.SC_OK) {345 if (statusCode == HttpStatus.SC_OK) {
344 U1VolumeJson.fromJson(getContentInputStream(response), callback);346 U1VolumeJson.fromJson(getContentInputStream(response), callback);
347 consumeContent(response);
345 } else {348 } else {
346 handleNon200HttpResponse(response, "Could not get volume.", callback);349 handleNon200HttpResponse(response, "Could not get volume.", callback);
347 }350 }
@@ -394,6 +397,7 @@
394 final int statusCode = getStatusCode(response);397 final int statusCode = getStatusCode(response);
395 if (statusCode == HttpStatus.SC_OK) {398 if (statusCode == HttpStatus.SC_OK) {
396 U1DeltaJson.fromJson(getContentInputStream(response), callback);399 U1DeltaJson.fromJson(getContentInputStream(response), callback);
400 consumeContent(response);
397 } else {401 } else {
398 handleNon200HttpResponse(response, "Could not get volume.", callback);402 handleNon200HttpResponse(response, "Could not get volume.", callback);
399 }403 }
@@ -441,6 +445,7 @@
441 final int statusCode = getStatusCode(response);445 final int statusCode = getStatusCode(response);
442 if (statusCode == HttpStatus.SC_OK) {446 if (statusCode == HttpStatus.SC_OK) {
443 U1VolumeJson.fromJson(getContentInputStream(response), callback);447 U1VolumeJson.fromJson(getContentInputStream(response), callback);
448 consumeContent(response);
444 } else {449 } else {
445 handleNon200HttpResponse(response, "Could not get volumes.", callback);450 handleNon200HttpResponse(response, "Could not get volumes.", callback);
446 }451 }
@@ -489,7 +494,7 @@
489 response = resourceClient.request(HttpDelete.METHOD_NAME, path);494 response = resourceClient.request(HttpDelete.METHOD_NAME, path);
490 final int statusCode = getStatusCode(response);495 final int statusCode = getStatusCode(response);
491 if (statusCode == HttpStatus.SC_OK) {496 if (statusCode == HttpStatus.SC_OK) {
492 consumeContent(response.getEntity());497 consumeContent(response);
493 callback.onSuccess(null);498 callback.onSuccess(null);
494 } else {499 } else {
495 handleNon200HttpResponse(response, "Could not delete volume.", callback);500 handleNon200HttpResponse(response, "Could not delete volume.", callback);
@@ -570,7 +575,7 @@
570 response = resourceClient.request(HttpDelete.METHOD_NAME, path);575 response = resourceClient.request(HttpDelete.METHOD_NAME, path);
571 final int statusCode = getStatusCode(response);576 final int statusCode = getStatusCode(response);
572 if (statusCode == HttpStatus.SC_OK) {577 if (statusCode == HttpStatus.SC_OK) {
573 consumeContent(response.getEntity());578 consumeContent(response);
574 callback.onSuccess(null);579 callback.onSuccess(null);
575 } else {580 } else {
576 handleNon200HttpResponse(response, "Could not delete node.", callback);581 handleNon200HttpResponse(response, "Could not delete node.", callback);
@@ -627,6 +632,7 @@
627 final int statusCode = getStatusCode(response);632 final int statusCode = getStatusCode(response);
628 if (statusCode == HttpStatus.SC_OK) {633 if (statusCode == HttpStatus.SC_OK) {
629 U1NodeJson.fromJson(getContentInputStream(response), callback);634 U1NodeJson.fromJson(getContentInputStream(response), callback);
635 consumeContent(response);
630 } else {636 } else {
631 handleNon200HttpResponse(response, "Could not get node.", callback);637 handleNon200HttpResponse(response, "Could not get node.", callback);
632 }638 }
@@ -677,6 +683,7 @@
677 final int statusCode = getStatusCode(response);683 final int statusCode = getStatusCode(response);
678 if (statusCode == HttpStatus.SC_OK) {684 if (statusCode == HttpStatus.SC_OK) {
679 U1NodeJson.fromJson(getContentInputStream(response), callback);685 U1NodeJson.fromJson(getContentInputStream(response), callback);
686 consumeContent(response);
680 } else {687 } else {
681 handleNon200HttpResponse(response, "Could not perform move.", callback);688 handleNon200HttpResponse(response, "Could not perform move.", callback);
682 }689 }
@@ -728,6 +735,7 @@
728 final int statusCode = getStatusCode(response);735 final int statusCode = getStatusCode(response);
729 if (statusCode == HttpStatus.SC_OK) {736 if (statusCode == HttpStatus.SC_OK) {
730 U1NodeJson.fromJson(getContentInputStream(response), callback);737 U1NodeJson.fromJson(getContentInputStream(response), callback);
738 consumeContent(response);
731 } else {739 } else {
732 handleNon200HttpResponse(response, "Could not publis file.", callback);740 handleNon200HttpResponse(response, "Could not publis file.", callback);
733 }741 }
@@ -773,6 +781,7 @@
773 final int statusCode = getStatusCode(response);781 final int statusCode = getStatusCode(response);
774 if (statusCode == HttpStatus.SC_OK) {782 if (statusCode == HttpStatus.SC_OK) {
775 U1NodeJson.fromJson(getContentInputStream(response), callback);783 U1NodeJson.fromJson(getContentInputStream(response), callback);
784 consumeContent(response);
776 } else {785 } else {
777 handleNon200HttpResponse(response, "Could not get public files.", callback);786 handleNon200HttpResponse(response, "Could not get public files.", callback);
778 }787 }
@@ -851,6 +860,7 @@
851 if (statusCode == 200 || statusCode == 201) {860 if (statusCode == 200 || statusCode == 201) {
852 LOGGER.info("Magic upload success, status code: " + statusCode);861 LOGGER.info("Magic upload success, status code: " + statusCode);
853 U1NodeJson.fromJson(getContentInputStream(response), callback);862 U1NodeJson.fromJson(getContentInputStream(response), callback);
863 consumeContent(response);
854 return;864 return;
855 } else if (statusCode == 400) {865 } else if (statusCode == 400) {
856 LOGGER.info("Magic upload failure, status code: " + statusCode);866 LOGGER.info("Magic upload failure, status code: " + statusCode);
@@ -875,6 +885,7 @@
875 final int statusCode = getStatusCode(response);885 final int statusCode = getStatusCode(response);
876 if (200 <= statusCode && statusCode <= 299) {886 if (200 <= statusCode && statusCode <= 299) {
877 U1NodeJson.fromJson(getContentInputStream(response), callback);887 U1NodeJson.fromJson(getContentInputStream(response), callback);
888 consumeContent(response);
878 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {889 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {
879 // Do nothing, request has been cancelled.890 // Do nothing, request has been cancelled.
880 } else {891 } else {
@@ -941,7 +952,7 @@
941 contentPath, offset, cancelTrigger);952 contentPath, offset, cancelTrigger);
942 statusCode = getStatusCode(response);953 statusCode = getStatusCode(response);
943 if (statusCode != HttpStatus.SC_PARTIAL_CONTENT) {954 if (statusCode != HttpStatus.SC_PARTIAL_CONTENT) {
944 consumeContent(response.getEntity());955 consumeContent(response);
945 offset = 0;956 offset = 0;
946 }957 }
947 }958 }
@@ -964,6 +975,7 @@
964 975
965 final FileOutputStream stream = new FileOutputStream(file, isResuming);976 final FileOutputStream stream = new FileOutputStream(file, isResuming);
966 in.writeTo(stream);977 in.writeTo(stream);
978 consumeContent(response);
967 callback.onSuccess();979 callback.onSuccess();
968 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {980 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {
969 // Do nothing, request has been cancelled.981 // Do nothing, request has been cancelled.
@@ -1010,7 +1022,7 @@
1010 contentPath, offset, cancelTrigger);1022 contentPath, offset, cancelTrigger);
1011 statusCode = getStatusCode(response);1023 statusCode = getStatusCode(response);
1012 if (statusCode != HttpStatus.SC_PARTIAL_CONTENT) {1024 if (statusCode != HttpStatus.SC_PARTIAL_CONTENT) {
1013 consumeContent(response.getEntity());1025 consumeContent(response);
1014 offset = 0;1026 offset = 0;
1015 }1027 }
1016 }1028 }
@@ -1031,6 +1043,7 @@
1031 1043
1032 final FileOutputStream stream = new FileOutputStream(file, isResuming);1044 final FileOutputStream stream = new FileOutputStream(file, isResuming);
1033 in.writeTo(stream);1045 in.writeTo(stream);
1046 consumeContent(response);
1034 callback.onSuccess();1047 callback.onSuccess();
1035 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {1048 } else if (cancelTrigger != null && cancelTrigger.isCancelled()) {
1036 // Do nothing, request has been cancelled.1049 // Do nothing, request has been cancelled.
@@ -1069,13 +1082,20 @@
1069 return response != null ? response.getEntity().getContent() : null;1082 return response != null ? response.getEntity().getContent() : null;
1070 }1083 }
1071 1084
1072 private static final void consumeContent(HttpEntity entity) {1085 private static final void consumeContent(HttpResponse response) {
1073 if (entity != null) {1086 if (response != null) {
1074 try {1087 HttpEntity entity = response.getEntity();
1075 final InputStream in = entity.getContent();1088 if (entity != null) {
1076 if (in != null) in.close();1089 try {
1077 } catch (Exception e) {1090 InputStream in = entity.getContent();
1078 // Ignore.1091 if (in != null) {
1092 while (in.read() != -1)
1093 ; // Just read the content.
1094 in.close();
1095 }
1096 } catch (IOException e) {
1097 // Ignore.
1098 }
1079 }1099 }
1080 }1100 }
1081 }1101 }
10821102
=== modified file 'src/main/com/ubuntuone/api/files/client/ContentClient.java'
--- src/main/com/ubuntuone/api/files/client/ContentClient.java 2012-08-06 20:37:39 +0000
+++ src/main/com/ubuntuone/api/files/client/ContentClient.java 2013-02-01 15:33:22 +0000
@@ -100,6 +100,8 @@
100 100
101 sign(request);101 sign(request);
102 logger.fine(request.getRequestLine().toString());102 logger.fine(request.getRequestLine().toString());
103 HttpUtils.dumpHeaders(request.getAllHeaders(), logger, Level.FINE);
104
103 final HttpResponse response = httpClient.execute(getHost(), request);105 final HttpResponse response = httpClient.execute(getHost(), request);
104 if (response != null) {106 if (response != null) {
105 int statusCode = response.getStatusLine().getStatusCode();107 int statusCode = response.getStatusLine().getStatusCode();

Subscribers

People subscribed via source and target branches