【问题标题】:jclouds IOExpection: Error writing request body to serverjclouds IOExpection:将请求正文写入服务器时出错
【发布时间】:2015-07-16 12:08:50
【问题描述】:

我们使用jcloudsRackspace 以及通过cloudfile api (multi threaded) 上传大量文件时

有一次我们在objectApi.put 行遇到异常(参见底部的示例代码)

异常

16-Jul-2015 11:58:00.811 SEVERE [threadsPool-1]      org.jclouds.logging.jdk.JDKLogger.logError error after writing 8192/streaming bytes to https://*****/****.jpg
 java.io.IOException: Error writing request body to server
        at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(HttpURLConnection.java:3478)
        at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(HttpURLConnection.java:3461)
        at com.google.common.io.CountingOutputStream.write(CountingOutputStream.java:53)
        at com.google.common.io.ByteStreams.copy(ByteStreams.java:74)
        at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.writePayloadToConnection(JavaUrlHttpCommandExecutorService.java:297)
        at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.convert(JavaUrlHttpCommandExecutorService.java:160)
        at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.convert(JavaUrlHttpCommandExecutorService.java:64)
        at org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:91)
        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.$Proxy176.put(Unknown Source)
        at

S3 的类似问题

can be found here

示例代码

ObjectApi objectApi = cloudFiles.getObjectApi(REGION, container);
ByteSource byteSource = Files.asByteSource(file);
Payload payload = Payloads.newByteSourcePayload(byteSource);
objectApi.put(hashedName, payload);

问题:

有人经历过这样的行为吗?也许有人有解决这类问题的方法?

谢谢

阿隆

【问题讨论】:

    标签: java jclouds cloudfiles rackspace-cloudfiles


    【解决方案1】:

    网络不可靠,因此在使用云服务时会出现一些例外情况,尤其是在处理大量文件时。专门针对 jclouds 上传,我们这里有一些示例代码:

    https://github.com/jclouds/jclouds-examples/tree/master/blobstore-uploader

    编辑:我还添加了一个 JIRA 问题,以确保我们在 swift 中专门针对这种情况添加测试:

    https://issues.apache.org/jira/browse/JCLOUDS-965

    【讨论】:

    • jclouds 重试机制应该处理可重复有效负载的网络错误,例如 ByteSource。除非使用 InputStream 有效负载,否则用户无需添加自己的重试逻辑。
    • 我正在调查可能丢失的重试逻辑。
    • 感谢您的回答。现在重试逻辑不起作用,所以我们用一个循环来扭曲它并尝试/捕获以强制重试。
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2015-11-02
    • 2020-12-31
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多