JCLOUDS-1477: Upload single part for small B2 MPU
B2 requires two parts to use multi-part upload but jclouds will
attempt to use one with small uploads. Instead it should fall back to
single-part when the content length is small.
diff --git a/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java b/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java
index 0069e25..c36773f 100644
--- a/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java
+++ b/providers/b2/src/main/java/org/jclouds/b2/blobstore/B2BlobStore.java
@@ -229,7 +229,9 @@
throw new UnsupportedOperationException("B2 only supports private access blobs");
}
- if (options.isMultipart()) {
+ long contentLength = Preconditions.checkNotNull(blob.getMetadata().getContentMetadata().getContentLength(),
+ "must provide content-length to use multi-part upload");
+ if (options.isMultipart() && contentLength >= auth.get().recommendedPartSize()) {
return putMultipartBlob(container, blob, options);
} else {
String name = blob.getMetadata().getName();
diff --git a/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java b/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java
index 85d37fa..b7acf98 100644
--- a/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java
+++ b/providers/b2/src/test/java/org/jclouds/b2/blobstore/integration/B2BlobIntegrationLiveTest.java
@@ -244,36 +244,6 @@
}
}
- @Test(groups = { "integration", "live" })
- public void testPutBlobTierStandardMultipart() throws Exception {
- try {
- super.testPutBlobTierStandardMultipart();
- failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
- } catch (IllegalArgumentException iae) {
- throw new SkipException("B2 requires at least two parts", iae);
- }
- }
-
- @Test(groups = { "integration", "live" })
- public void testPutBlobTierInfrequentMultipart() throws Exception {
- try {
- super.testPutBlobTierInfrequentMultipart();
- failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
- } catch (IllegalArgumentException iae) {
- throw new SkipException("B2 requires at least two parts", iae);
- }
- }
-
- @Test(groups = { "integration", "live" })
- public void testPutBlobTierArchiveMultipart() throws Exception {
- try {
- super.testPutBlobTierArchiveMultipart();
- failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
- } catch (IllegalArgumentException iae) {
- throw new SkipException("B2 requires at least two parts", iae);
- }
- }
-
@Override
protected void checkTier(BlobMetadata metadata, Tier expected) {
// B2 maps all tiers to STANDARD