This is an automated email from the ASF dual-hosted git repository.
gaul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git
The following commit(s) were added to refs/heads/master by this push:
new 47f34770c9 JCLOUDS-1606: JCLOUDS-1608: Fix MPU off-by-one
47f34770c9 is described below
commit 47f34770c9daaa5fe0224ce5bc1adbb7332d9aea
Author: Jan Vermeulen <[email protected]>
AuthorDate: Tue Feb 20 21:41:47 2024 +0900
JCLOUDS-1606: JCLOUDS-1608: Fix MPU off-by-one
Previously GCS could not upload large objects due to its 32 part
limit.
---
.../strategy/internal/MultipartUploadSlicingAlgorithm.java | 5 +++++
.../blobstore/strategy/internal/MpuPartitioningAlgorithmTest.java | 6 +++---
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git
a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
b/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
index f8cc9f3f0b..92ee96cacb 100644
---
a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
+++
b/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
@@ -72,6 +72,7 @@ public final class MultipartUploadSlicingAlgorithm {
this.maximumNumberOfParts = maximumNumberOfParts;
}
+ // TODO: This algorithm is needlessly complicated.
public long calculateChunkSize(long length) {
long unitPartSize = defaultPartSize; // first try with default part size
int parts = (int)(length / unitPartSize);
@@ -112,6 +113,10 @@ public final class MultipartUploadSlicingAlgorithm {
if (remainder == 0 && parts > 0) {
parts -= 1;
}
+ if (remainder > 0 && parts == maximumNumberOfParts) {
+ parts -= 1;
+ partSize = length / parts;
+ }
this.chunkSize = partSize;
this.parts = parts;
this.remaining = length - partSize * parts;
diff --git
a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/MpuPartitioningAlgorithmTest.java
b/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/MpuPartitioningAlgorithmTest.java
index 423e91a064..fab35981da 100644
---
a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/MpuPartitioningAlgorithmTest.java
+++
b/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/MpuPartitioningAlgorithmTest.java
@@ -137,9 +137,9 @@ public final class MpuPartitioningAlgorithmTest {
// then the number of parts is increasing
length += 1;
chunkSize = strategy.calculateChunkSize(length);
- assertEquals(chunkSize, MAX_PART_SIZE);
- assertEquals(strategy.getParts(), MAX_NUMBER_OF_PARTS);
- assertEquals(strategy.getRemaining(), 1);
+ assertEquals(chunkSize, 5369246044L);
+ assertEquals(strategy.getParts(), MAX_NUMBER_OF_PARTS - 1);
+ assertEquals(strategy.getRemaining(), 6045);
assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(),
length);
}
}