我在一个循环中插入100个文件.对于这个测试,我有DISABLED退避并重试,所以如果插入失败了403,我忽略它并继续下一个文件.在100个文件中,我得到63 403个速率限制例外.
但是,在检查Drive时,在63次故障中,3次实际成功,即.该文件是在驱动器上创建的.如果我做了通常的退避并重试,我最终会重复插入.这证实了我在启用退避重试时看到的行为,即.从我的100个文件测试中,我一直看到3-4次重复插入.
它闻起来像API端点服务器和Drive存储服务器之间存在异步连接,这会导致非确定性结果,尤其是在高容量写入时.
因为这意味着我不能依靠"403速率限制"来限制插入,我需要知道什么是安全插入速率,以免触发这些定时错误.
运行下面的代码,给出...
Summary...
File insert attempts (a) = 100
rate limit errors (b) = 31
expected number of files (a-b) = 69
Actual number of files = 73
Run Code Online (Sandbox Code Playgroud)
码...
package com.cnw.test.servlets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.model.ChildList;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.File.Labels;
import com.google.api.services.drive.model.ParentReference;
import couk.cleverthinking.cnw.oauth.CredentialMediatorB;
import couk.cleverthinking.cnw.oauth.CredentialMediatorB.InvalidClientSecretsException;
@SuppressWarnings("serial")
/**
*
* AppEngine servlet to …Run Code Online (Sandbox Code Playgroud) 我的应用偶尔(每天一次)运行大约1,000个文件的批量插入.在少量插入后,我开始获得403速率限制响应.由于我的应用程序按顺序执行插入操作,因此我尝试的插入速率绝不会高于每秒1次.
我已经检查过我已启用结算并且我的配额限制是每秒100+,所以我不明白为什么我会如此积极地受到限制.结果是插入花了一个多小时,这不是Drive的广告:-(