Ho un'applicazione che lavora molto su S3, per lo più il download di file da esso. Sto vedendo molti errori di questo tipo e mi piacerebbe sapere se questo è qualcosa sul mio codice o se il servizio è davvero inaffidabile come questo.Il client S3 Java non funziona molto con "Fine del corpo del messaggio delimitato Content-Length" o "Socket java.net.SocketException chiuso"
Il codice che sto usando per leggere dal flusso oggetto S3 è la seguente:
public static final void write(InputStream stream, OutputStream output) {
byte[] buffer = new byte[1024];
int read = -1;
try {
while ((read = stream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
stream.close();
output.flush();
output.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Questo OutputStream è una nuova BufferedOutputStream (nuova FileOutputStream (file)). Sto usando l'ultima versione del client Java Amazon S3 e questa chiamata viene ritentata quattro volte prima di mollare. Quindi, dopo aver provato questo per 4 volte non riesce ancora.
Eventuali suggerimenti o suggerimenti su come potrei migliorare questo sono apprezzati.
accade con tutti (o la maggior parte di) file, con file casuali, o con una serie limitata e riproducibile? Stai impostando dei metadati prima del primo caricamento? Ho visto casi in cui i metadati (o la mancanza di) su alcuni file potrebbero causare alcuni problemi strani. Se non hai ancora provato, potrebbe valere la pena provare. –
per lo più file casuali e non utilizziamo alcun metadata :( –
Solo un'ipotesi.Avete assicurato che quei file casuali siano correttamente caricati su s3? Provate a scaricare quei file tramite la richiesta GET o qualche altro strumento – shashankaholic