[
https://issues.apache.org/jira/browse/JCLOUDS-1073?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrew Gaul resolved JCLOUDS-1073.
----------------------------------
Resolution: Fixed
Assignee: Andrew Gaul
Fix Version/s: 2.0.0
> in local-fs getBlob with open-ended range: parseInt instead of parseLong ->
> NumberFormatException
> -------------------------------------------------------------------------------------------------
>
> Key: JCLOUDS-1073
> URL: https://issues.apache.org/jira/browse/JCLOUDS-1073
> Project: jclouds
> Issue Type: Bug
> Components: jclouds-blobstore
> Affects Versions: 2.0.0
> Reporter: quod3
> Assignee: Andrew Gaul
> Labels: filesystem
> Fix For: 2.0.0
>
>
> [~gaul] LocalBlobStore tries to parse the open-ended ranges using parseInt,
> causing multipart downloads to fail on the last chunk of files that are 2GB+.
> This causes the following error from s3proxy (latest git head):
> {code}
> GET /bucket/key.tar HTTP/1.1
> Host: 10.10.10.10:8080
> Accept-Encoding: identity
> Date: Sat, 30 Jan 2016 04:57:54 GMT
> Range: bytes=2357198848-
> Authorization: AWS ---
> User-Agent: Boto3/1.2.3 Python/2.7.6 Linux/3.19.0-43-generic Botocore/1.3.22
> Resource
> ***
> HTTP/1.1 416 Requested Range Not Satisfiable
> Date: Sat, 30 Jan 2016 04:57:54 GMT
> Transfer-Encoding: chunked
> Server: Jetty(9.2.z-SNAPSHOT)
> <?xml version="1.0" ?><Error><Code>InvalidRange</Code><Message>The requested
> range is not satisfiable</Message><RequestId>...</RequestId></Error>
> {code}
> This fixes it for me:
> {code}
> diff --git
> a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
> b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
> index 9c06f21..ce244ef 100644
> --- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
> +++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
> @@ -662,12 +662,12 @@ public final class LocalBlobStore implements BlobStore {
> long offset = 0;
> long last =
> blob.getPayload().getContentMetadata().getContentLength() - 1;
> if (s.startsWith("-")) {
> - offset = last - Integer.parseInt(s.substring(1)) + 1;
> + offset = last - Long.parseLong(s.substring(1)) + 1;
> if (offset < 0) {
> offset = 0;
> }
> } else if (s.endsWith("-")) {
> - offset = Integer.parseInt(s.substring(0, s.length() - 1));
> + offset = Long.parseLong(s.substring(0, s.length() - 1));
> } else if (s.contains("-")) {
> String[] firstLast = s.split("\\-");
> offset = Long.parseLong(firstLast[0]);
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)