[ https://issues.apache.org/jira/browse/JCLOUDS-1625?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17819962#comment-17819962 ]
Andrew Gaul commented on JCLOUDS-1625: -------------------------------------- Please submit a PR if you are able. > getSize() from blob metadata returns full size when sending range request to > JClouds running on GCS > --------------------------------------------------------------------------------------------------- > > Key: JCLOUDS-1625 > URL: https://issues.apache.org/jira/browse/JCLOUDS-1625 > Project: jclouds > Issue Type: Bug > Components: jclouds-blobstore > Affects Versions: 2.5.0 > Reporter: Amine RACHYD > Priority: Major > Labels: blobstore, gcs > > Hello > We noticed an error when requesting a blob via a range request when *running > on GCS mode* > The payload requested is correct, however the size announced by its metadata > points to the full blob size. > This was noticed on JClouds 2.5.0, running on Java 8 > For some reason I couldn't package a reproducer project but I'm putting a > code snippet that reproduces this error: > > {code:java} > // ---- REDACTED: Creating a blobStore context from GCS provider ----- > // Create blob, payload size is 12 bytes > byte[] payload = "Hello World!".getBytes(); > assertEquals(12, payload.length); > Blob blob = blobStore.blobBuilder(blobName).payload(payload).build(); > // Put blob to GCS > blobStore.putBlob(bucketName, blob); > // ----- 1. Retrieve blob ----- > Blob resultBlob = blobStore.getBlob(bucketName, blobName); > // ----- 2. Retrieve blob with range query ----- > GetOptions getOptions = new GetOptions().range(0,4); > Blob resultRangeBlob = blobStore.getBlob(bucketName, blobName, getOptions); > // ----- 3. Read content of blob and assert size (12 for the first one, 5 for > the second) ----- > byte[] buffer = new byte[15]; > int readBytesFromBlob = resultBlob.getPayload().openStream().read(buffer); > int readBytesFromRangeBlob = > resultRangeBlob.getPayload().openStream().read(buffer);Assert.assertEquals(12, > readBytesFromBlob); > assertEquals(12, readBytesFromBlob); > assertEquals(5, readBytesFromRangeBlob); > // ----- 4. Get blobs sizes from respective metadata ----- > Long blobSize = resultBlob.getMetadata().getSize(); > Long rangeBlobSize = resultRangeBlob.getMetadata().getSize(); > assertEquals(Long.valueOf(12), blobSize); > // The following assertion fails > // The rangeBlobSize equals 12, the full blob length > // Whereas it should reflect only the size that has been read (5 in this case) > assertEquals(Long.valueOf(5), rangeBlobSize); > {code} > For info, I think it's this > [line|https://github.com/apache/jclouds/blob/611b4c4a1107501b705191495fb034e2b8ac1bcc/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java#L255] > that causes the error, as the payload metadata is being set from the initial > metadata of the full blob (object retrieved on L246). > I'm opening this Jira ticket before proceeding by creating a PR to fix this > bug. > -- This message was sent by Atlassian Jira (v8.20.10#820010)