app_identity_service.GetAccessToken()需要的配额多于可用的配额

时间:2015-10-19 06:21:53

标签: python-2.7 google-app-engine google-bigquery google-authentication google-oauth2

我正在使用app引擎和大查询作为我网站的后端。每当用户进行一些点击时,我都会将它们记录到bigquery中,以便在当天晚些时候进行分析。我每天接近75k次点击。它工作得很好,直到上周。这是我使用的代码。

    body = {"rows":[bodyFields]}

    credentials = appengine.AppAssertionCredentials(scope=BIGQUERY_SCOPE)
    http = credentials.authorize(httplib2.Http())
    bigquery = discovery.build('bigquery', 'v2', http=http)

    response = bigquery.tabledata().insertAll(
        projectId=PROJECT_ID,
        datasetId=BIGQUERY_DATASETID,
        tableId=BIGQUERY_TABLEID,
        body=body).execute()

现在突然间我超过配额例外。我的应用程序是付费应用程序引擎实例。下面是我的异常的堆栈跟踪

dashboard screenshot

Attempting refresh to obtain initial access_token

The API call app_identity_service.GetAccessToken() required more quota than is available.
Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/filename.py", line 1611, in post
    bigquery = discovery.build('bigquery', 'v2', http=http)
  File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/util.py", line 129, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/apiclient/discovery.py", line 198, in build
    resp, content = http.request(requested_url)
  File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/util.py", line 129, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/client.py", line 516, in new_request
    self._refresh(request_orig)
  File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/appengine.py", line 194, in _refresh
    scopes, service_account_id=self.service_account_id)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/app_identity/app_identity.py", line 589, in get_access_token
    scopes, service_account_id=service_account_id)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/app_identity/app_identity.py", line 547, in get_access_token_uncached
    return rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/app_identity/app_identity.py", line 519, in get_access_token_result
    rpc.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 579, in check_success
    self.__rpc.CheckSuccess()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 134, in CheckSuccess
    raise self.exception
OverQuotaError: The API call app_identity_service.GetAccessToken() required more quota than is available.

我的流量也没有增加,处理程序被击中的时间与过去2个月的数据几乎相同。那么为什么我会收到这个错误。

1 个答案:

答案 0 :(得分:2)

为了确定您遇到配额错误的原因,您需要分享有关您的使用情况的更多详细信息。配额应每24小时重置一次。您知道错误出现需要多长时间以及您在该时间点成功投放了多少流量?

您提到您在当天晚些时候进行分析",这表明您可能正在使用TaskQueue APIDeferred Tasks。这些任务可能由于其他原因而失败,retrying可能会很快耗尽您的配额。如果您使用的是TaskQueues,则可以尝试调整queue configuration and retry options

您可以节省配额的另一种方法是将您正在构建的bigquery发现服务保存到Memcache API之类的内容,以便可以将其重复用于多个请求。 BigQuery服务。