Google云端硬盘上传会间歇性地返回50x服务器错误

时间:2014-05-27 18:28:09

标签: google-api google-drive-api google-api-java-client

我正在使用java google驱动器API将一些文件上传到各种Google云端硬盘文件夹中。我正在使用其凭据的用户可以访问所有文件夹。

我从运行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
  • 使用jackson: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云端硬盘问题支持的最佳位置(https://developers.google.com/drive/support

更新

更多细节。我试过了:

  • 将线程数减少到1(我最多有15个线程推送文件)。没有变化,仍然会收到错误。
  • 仅推送CSV(不是PDF)。没有变化,仍然会收到错误。
  • 在更新时将“创建新版本”设置为false:https://developers.google.com/drive/v2/reference/files/update没有更改,仍然会收到错误。
  • 将CSV推送到不同的文件名。这很有效!
  • 从文件夹中删除CSV。这很有效!
  • 在拨打谷歌之前加入等待,范围从200毫秒到500毫秒

正在上传的PDF文件的修订版本减少了两个数量级(~20)。某些csv文件的修订版数量高达2000+。我不确定这是不是问题。

1 个答案:

答案 0 :(得分:0)

一种解决方法是通过Web界面删除CSV文件。确保完全删除它们,因为只是将它们移到垃圾箱是不够的。