Hi James,
Thanks for the quick response.
You are right!! The root cause is reusing the same S3Object inside
the retry logic without resetting dataInputStream. I was not aware
that S3Object is kind of "stateful" (the dataInputStream)
Simply resetting the dataInputStream solves the issue, or creating a
brand new S3Object.
I noticed there are two different exceptions for the same underlying
cause and this is driven by the presence of a property setting
"httpclient.socket-timeout-ms".
With the "httpclient.socket-timeout-ms" property setting, I saw the
following:
Caused by: org.jets3t.service.S3ServiceException: S3 Error Message.
PUT '/my_small_object' on Host <bucketname>.
s3.amazonaws.com' @ 'Tue,
27 Jul 2010 23:20:49 GMT' -- ResponseCode: 400, ResponseStatus: Bad
Request, XML Error Message: <?xml version="1.0" encoding="UTF-8"?
><Error><Code>RequestTimeout</Code><Message>Your socket connection to
the server was not read from or written to within the timeout period.
Idle connections will be closed.</Message><RequestId>5611CCACCDAD7E2E</
RequestId><HostId>sW4Mcwn0rxOsFlDkoN0HpzsHGry1hKL6RyvKGzinen0pYcbDb2SSEUWEZDjQQpLU</
HostId></Error>
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.performRequest(RestS3Service.java:
452)
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.performRestPut(RestS3Service.java:
940)
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.createObjectImpl(RestS3Service.java:
1754)
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.putObjectImpl(RestS3Service.java:
1685)
at
org.jets3t.service.S3Service.putObject(S3Service.java:2145)
Without the "httpclient.socket-timeout-ms" property setting, I saw the
following:
Caused by: org.jets3t.service.S3ServiceException: Request Error. PUT '/
my_small_object' on Host '<bucketname>.
s3.amazonaws.com'
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.performRequest(RestS3Service.java:
551)
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.performRestPut(RestS3Service.java:
940)
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.createObjectImpl(RestS3Service.java:
1754)
at
org.jets3t.service.impl.rest.httpclient.RestS3Service.putObjectImpl(RestS3Service.java:
1685)
at
org.jets3t.service.S3Service.putObject(S3Service.java:2145)
... 25 more
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native
Method)
at
java.net.SocketInputStream.read(SocketInputStream.java:155)
at com.ibm.jsse2.a.a(a.java:140)
at com.ibm.jsse2.a.a(a.java:96)
at com.ibm.jsse2.jc.a(jc.java:356)
at com.ibm.jsse2.jc.a(jc.java:538)
at com.ibm.jsse2.e.read(e.java:28)
Any ideas why that is the case?
Thanks a lot.
Hien
On Jul 26, 9:56 pm, James Murty <
jamu...@gmail.com> wrote:
> Hi Hien,
>
> If you are seeing SocketTimeoutExceptions when uploading content to S3 it is
> possible that you are providing empty, or pre-consumed, input streams to the
> S3Objects you are sending. Someone had a similar issue recently where the
> input stream used in an S3Object had already been completely read, seehttp://
groups.google.com/group/jets3t-users/browse_thread/thread/3d47...
> >
jets3t-users...@googlegroups.com<jets3t-users%2Bunsubscribe@google
groups.com>
> > .