Hi
I have written a sample code for multipart upload using jClouds-2.0
Properties overrides = new Properties();
BlobStoreContext context = ContextBuilder.newBuilder("openstack-swift")
.endpoint("http://x.xxx.xx.xx:5000/v2.0")
.credentials("xx:xx", "xx")
.overrides(overrides)
.modules(modules)
.buildView(BlobStoreContext.class);
BlobStore blobStore = context.getBlobStore();
blobStore.createContainerInLocation(null, CONTAINER_NAME);
Path path = Paths.get("test2");
File f = new File("test2");
byte []byteArray = Files.readAllBytes(path);
Payload payload = newByteSourcePayload(wrap(byteArray));
PutOptions opt = new PutOptions();
opt.multipart();
Blob blob = blobStore.blobBuilder(OBJECT_NAME)
.payload(payload).contentLength(f.length())
.build();
String etag = blobStore.putBlob(CONTAINER_NAME, blob, opt);
test2 is the file I am trying to upload which is of size 36MB and I am getting
the following exception
10:21:52.355 [main] DEBUG o.j.h.i.JavaUrlHttpCommandExecutorService - Sending
request 1344471693: PUT
http://x.x.x.x:8091/v1/AUTH_0909ac10e7024847b1a9fe9787c7de8f/arctestMP HTTP/1.1
10:21:52.356 [main] DEBUG jclouds.headers - >> PUT
http://x.x.x.x:8091/v1/AUTH_0909ac10e7024847b1a9fe9787c7de8f/arctestMP HTTP/1.1
10:21:52.356 [main] DEBUG jclouds.headers - >> Accept: application/json
10:21:52.357 [main] DEBUG jclouds.headers - >> X-Auth-Token:
fd72b74db90c46cabcca3f317d5a09d4
10:21:53.129 [main] DEBUG o.j.h.i.JavaUrlHttpCommandExecutorService - Receiving
response 1344471693: HTTP/1.1 201 Created
10:21:53.129 [main] DEBUG jclouds.headers - << HTTP/1.1 201 Created
10:21:53.129 [main] DEBUG jclouds.headers - << Date: Fri, 03 Feb 2017 04:51:53
GMT
10:21:53.129 [main] DEBUG jclouds.headers - << X-Trans-Id:
tx83ba6249347c43c99bb41-0058940c68
10:21:53.129 [main] DEBUG jclouds.headers - << Connection: keep-alive
10:21:53.129 [main] DEBUG jclouds.headers - << Content-Type: text/html;
charset=UTF-8
10:21:53.129 [main] DEBUG jclouds.headers - << Content-Length: 0
-------> Container Creation Successful
10:21:53.373 [user thread 1] DEBUG o.j.rest.internal.InvokeHttpMethod - >>
invoking object:put
10:21:53.373 [user thread 0] DEBUG o.j.rest.internal.InvokeHttpMethod - >>
invoking object:put
10:21:53.374 [user thread 1] DEBUG o.j.h.i.JavaUrlHttpCommandExecutorService -
Sending request 823625484: PUT
http://x.x.x.x:8091/v1/AUTH_0909ac10e7024847b1a9fe9787c7de8f/arctestMP/arc/slo/1486097513.327000/0/33554432/00000001
HTTP/1.1
10:21:53.376 [user thread 0] DEBUG o.j.h.i.JavaUrlHttpCommandExecutorService -
Sending request -1220101806: PUT
http://x.x.x.x:8091/v1/AUTH_0909ac10e7024847b1a9fe9787c7de8f/arctestMP/arc/slo/1486097513.327000/0/33554432/00000000
HTTP/1.1
10:21:53.396 [user thread 1] DEBUG org.jclouds.http.internal.HttpWire - over
limit 3145728/262144: wrote temp file
10:21:53.552 [user thread 0] DEBUG org.jclouds.http.internal.HttpWire - over
limit 33554432/262144: wrote temp fileException in thread "main"
com.google.common.util.concurrent.ExecutionError: java.lang.OutOfMemoryError:
Java heap space
at
com.google.common.util.concurrent.Futures.wrapAndThrowUnchecked(Futures.java:1380)
at com.google.common.util.concurrent.Futures.getUnchecked(Futures.java:1373)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putMultipartBlob(RegionScopedSwiftBlobStore.java:650)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putMultipartBlob(RegionScopedSwiftBlobStore.java:628)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putBlob(RegionScopedSwiftBlobStore.java:274)
at jclouds20.App.main(App.java:83)
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.lang.StringBuilder.ensureCapacityImpl(StringBuilder.java:342)
at java.lang.StringBuilder.append(StringBuilder.java:208)
at org.jclouds.logging.internal.Wire.wire(Wire.java:68)
at org.jclouds.logging.internal.Wire.copy(Wire.java:99)
at org.jclouds.logging.internal.Wire.output(Wire.java:176)
at org.jclouds.logging.internal.Wire.output(Wire.java:143)
at org.jclouds.http.HttpUtils.wirePayloadIfEnabled(HttpUtils.java:296)
at
org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:97)
at
org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:90)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44)
at
org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
at
com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
at com.sun.proxy.$Proxy68.put(Unknown Source)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.uploadMultipartPart(RegionScopedSwiftBlobStore.java:529)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore$BlobUploader.call(RegionScopedSwiftBlobStore.java:666)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore$BlobUploader.call(RegionScopedSwiftBlobStore.java:653)
at java.util.concurrent.FutureTask.run(FutureTask.java:274)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627)
at java.lang.Thread.run(Thread.java:798)
at java.lang.Thread.getStackTraceImpl(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:1133)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putMultipartBlob(RegionScopedSwiftBlobStore.java:647)
... 3 more
Feb 03, 2017 10:22:03 AM
com.google.common.util.concurrent.Futures$CombinedFuture setExceptionAndMaybeLog
SEVERE: input future failed.
java.lang.OutOfMemoryError: Java heap space
at java.lang.StringBuilder.ensureCapacityImpl(StringBuilder.java:342)
at java.lang.StringBuilder.append(StringBuilder.java:208)
at org.jclouds.logging.internal.Wire.wire(Wire.java:68)
at org.jclouds.logging.internal.Wire.copy(Wire.java:99)
at org.jclouds.logging.internal.Wire.output(Wire.java:176)
at org.jclouds.logging.internal.Wire.output(Wire.java:143)
at org.jclouds.http.HttpUtils.wirePayloadIfEnabled(HttpUtils.java:296)
at
org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:97)
at
org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:90)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44)
at
org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
at
com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
at com.sun.proxy.$Proxy68.put(Unknown Source)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.uploadMultipartPart(RegionScopedSwiftBlobStore.java:529)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore$BlobUploader.call(RegionScopedSwiftBlobStore.java:666)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore$BlobUploader.call(RegionScopedSwiftBlobStore.java:653)
at java.util.concurrent.FutureTask.run(FutureTask.java:274)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627)
at java.lang.Thread.run(Thread.java:798)
at java.lang.Thread.getStackTraceImpl(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:1133)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putMultipartBlob(RegionScopedSwiftBlobStore.java:647)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putMultipartBlob(RegionScopedSwiftBlobStore.java:628)
at
org.jclouds.openstack.swift.v1.blobstore.RegionScopedSwiftBlobStore.putBlob(RegionScopedSwiftBlobStore.java:274)
at jclouds20.App.main(App.java:83)
Should putBlob with multipart enabled in PutOptions not be used for uploading
files greater than 32MB from jClouds-2.0 ?
Is it mandatory to use Swift API's initiate, upload and complete multipart from
jClouds-2.0 ?
RegardsArchana