2015-01-28 10 views
8

AWS Java 1.9.3Download di file> 3Gb da S3 non riesce con "SocketTimeoutException: Leggi scaduta" SDK

Quando si scaricano molti file di grandi dimensioni (~ 3 Gb) da AWS S3 in application server Java ottengo SocketTimeoutException di tanto in tempo come seguendo:

Caused by: com.amazonaws.AmazonClientException: Unable to store object contents to disk: Read timed out 
at com.amazonaws.services.s3.internal.ServiceUtils.downloadObjectToFile(ServiceUtils.java:270) 
at com.amazonaws.services.s3.internal.ServiceUtils.retryableDownloadS3ObjectToFile(ServiceUtils.java:344) 
at com.amazonaws.services.s3.transfer.TransferManager$2.call(TransferManager.java:737) 
... 4 more 
Caused by: java.net.SocketTimeoutException: Read timed out 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(SocketInputStream.java:152) 
at java.net.SocketInputStream.read(SocketInputStream.java:122) 
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:554) 
at sun.security.ssl.InputRecord.read(InputRecord.java:509) 
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884) 
at sun.security.ssl.AppInputStream.read(AppInputStream.java:102) 
at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:198) 
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178) 
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137) 
at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73) 
at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:151) 
at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73) 
at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73) 
at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73) 
at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:151) 
at java.security.DigestInputStream.read(DigestInputStream.java:161) 
at com.amazonaws.services.s3.internal.DigestValidationInputStream.read(DigestValidationInputStream.java:59) 
at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73) 
at java.io.FilterInputStream.read(FilterInputStream.java:107) 
at com.amazonaws.services.s3.internal.ServiceUtils.downloadObjectToFile(ServiceUtils.java:265) 
... 6 more 

posso scaricare i file da S3 con 4 fili, tutte le discussioni utilizzare la stessa istanza TransferManager. Come in precedenza, sto usando AWS SDK 1.9.3 e ricevo tali eccezioni solo di volta in volta. Il codice è il seguente:

... 
Download d = transferManager.download(currentBucket, remoteFileName, new File(tmpName)); 
d.waitForCompletion(); 
... 

È un problema di SDK? Forse della v1.9.3?

E c'è qualche soluzione salvo aumentare socketTimeout per ClientConfiguration?

+0

Sto avendo lo stesso problema. Sto usando AWS S3 Android SDK 2.1.7 ei miei file hanno circa 10 MB. Hai una risposta per risolverlo? –

+0

Ancora nessuna soluzione per questo problema tranne il cambio di timeout. – Yury

+0

Ciao @Yury, puoi, per favore, mostrarmi come modificare i timeout? – Caaarlos

risposta

8

Ecco come posso fare in AWS SDK 1.9.3:

ClientConfiguration config = new ClientConfiguration(); 
config.setConnectionTimeout(connectionTimeout); 
config.setSocketTimeout(readTimeout); 
AmazonS3 s3 = new AmazonS3Client(credentials, config); 
+0

Qual è il timeout predefinito? – samthebest

+1

il timeout predefinito come in 1.10.x è 50 secondi per i timeout di socket e di connessione. –

Problemi correlati