java - 套接字超时异常 : Read timed out on Insert to Google Drive - is it retryable?

标签 java exception google-drive-api

类似于Java Google Drive SDK SocketTimeoutException on File.insert.execute

上传数千个文件,一个接一个,似乎每50个文件中就有1个抛出

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.read(InputRecord.java:480)
        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 java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1323)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
        at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:36)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:94)
        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965)
        at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequestWithoutGZip(MediaHttpUploader.java:545)
        at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequest(MediaHttpUploader.java:562)
        at com.google.api.client.googleapis.media.MediaHttpUploader.executeUploadInitiation(MediaHttpUploader.java:519)
        at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:384)
        at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:336)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:418)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
...

关于 files().insert().execute()

我不确定在插入文件时出现此异常“意味着”什么。

  1. 这是否意味着插入请求未完成,或者不一定?
  2. 这是否仅仅意味着客户端在发送插入请求后没有收到来自 Google 服务器的回复?
  3. 当我收到此错误时,是否应该执行指数退避并重试

最佳答案

我也有同样的问题。一种可能的解决方案是增加读取超时: <强> Timeouts and Errors

private HttpRequestInitializer setHttpTimeout(final HttpRequestInitializer requestInitializer) {
    return new HttpRequestInitializer() {
        @Override
        public void initialize(HttpRequest httpRequest) throws IOException {
            requestInitializer.initialize(httpRequest);
            httpRequest.setConnectTimeout(3 * 60000);  // 3 minutes connect timeout
            httpRequest.setReadTimeout(3 * 60000);  // 3 minutes read timeout
        }
    };
}
...
service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, setHttpTimeout(credential)).build();

关于java - 套接字超时异常 : Read timed out on Insert to Google Drive - is it retryable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29518231/

相关文章:

java - 我可以告诉 Mylyn 的上下文默认包含在内吗?

java - Hibernate:线程 "main"org.hibernate.exception.SQLGrammarException 中出现异常: 'DTYPE' 中的未知列 'field list'

c# - 异常与特殊返回值

java - 无法使用 Google Drive API 获取所有文件的列表

java - 为什么要在 for 的主体中而不是在 header 中增加计数器?

Java AWT : Will applet run without main(), init()、start()、paint()

java - Glassfish 和 MySQL 连接池

Java 应用程序在打开套接字时立即抛出 ClosedByInterruptException,原因是什么?

php - 如何使用 php-curl 将文件上传到 "multipart"类型的 Google 云端硬盘?

php - 从 Google Drive 流式传输视频