【发布时间】:2014-05-27 18:28:08
【问题描述】:
我正在使用 java google drive API 将一些文件上传到各种 Google Drive 文件夹中。我正在使用其凭据的用户可以访问所有文件夹。
我正在从两个运行 CentOS 的不同服务器上传大约 100 个 PDF 和 100 个 CSV 文件。这些通常是更新,尽管我偶尔会插入文件。这些文件的大小在 35k 到 700 字节之间,因此不大。
大约一周前,我在上传 CSV 文件(但不是 PDF 文件)时开始出现异常。异常如下所示:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error
{
"code" : 500,
"errors" : [ {
"domain" : "global",
"message" : "Internal Error",
"reason" : "internalError"
} ],
"message" : "Internal Error"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
在转换 csv 文件和不转换时都会发生这种情况(这个答案暗示转换是问题:Google Drive SDK - 500: Internal Server error: File uploads successfully most of the time)。
我也看到了 503 错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 503 Service Unavailable
{
"code" : 503,
"errors" : [ {
"domain" : "global",
"message" : "Backend Error",
"reason" : "backendError"
} ],
"message" : "Backend Error"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
这些错误似乎并没有消失——在一天中的不同时间、从不同的计算机、使用不同的凭据和不同的文件夹(尽管总是使用相同的 API 项目访问)进行了尝试。
Google 状态页面没有说明 Drive API 已关闭:http://www.google.com/appsstatus#hl=en&v=status
我用来查看 API 请求数量的 API 控制台没有任何信息。
这是我的环境信息:
- java 1.6.0_25-b06
- google-api-services-drive: v2-rev126-1.18.0-rc
- 使用杰克逊:com.google.api.client.json.jackson.JacksonFactory
- com.google.api.client.http.javanet.NetHttpTransport()
我按照此处所述进行指数退避:https://developers.google.com/drive/web/handle-errors#implementing_exponential_backoff 但仅适用于 403 错误。
我已经对错误消息进行了一些谷歌搜索并查看了 SO 问题。这一个表示唯一的响应是等待:500 Internal Server Error v3 Upload API: GoogleJsonResponseException 但是已经过了一个多星期了。
我被难住了。我在这里发帖是因为这显然是获得 Google Drive 问题支持的最佳地点 (https://developers.google.com/drive/support)
更新:
更多细节。我试过了:
- 将线程数降低到 1(我有多达 15 个线程推送文件)。没有变化,还是报错。
- 仅推送 CSV(不是 PDF)。没有变化,还是报错。
- 在更新时将“创建新修订”设置为 false:https://developers.google.com/drive/v2/reference/files/update 没有变化,仍然出现错误。
- 将 CSV 推送到不同的文件名。这有效!
- 从文件夹中删除 CSV。这有效!
- 在调用 google 之前添加等待,范围从 200 毫秒到 500 毫秒
可以正常上传的 PDF 的修订版本少了两个数量级(约 20 个)。某些 csv 文件的修订数高达 2000+。我不确定这是否是一个问题。
【问题讨论】:
-
关于什么有效/有帮助的任何更新?我正在经历类似的情况
-
我想我必须重试多次,然后将其限制。我也认为它刚刚消失了,我可能将其归结为“分布式系统中的短暂错误”。老实说,我不记得了。对不起。
标签: google-api google-drive-api google-api-java-client