删除GAE上的搜索文档时出现暂时性错误(一致)

时间:2014-07-23 13:03:44

标签: google-app-engine google-cloud-datastore gae-search

我们在其中一个GAE应用程序上遇到了一致错误(堆栈跟踪如下)。有谁知道是什么原因引起的?它会抛出一个瞬态错误(这应该是一个短暂的错误),但我们会一致地得到这个错误。

栈跟踪

com.google.appengine.api.search.DeleteException:瞬态错误。超过RPC截止日期。         在com.google.appengine.api.search.IndexImpl $ 2.convertException(IndexImpl.java:217)         在com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:94)         在com.google.appengine.api.search.FutureHelper.getInternal(FutureHelper.java:73)         在com.google.appengine.api.search.FutureHelper.quietGet(FutureHelper.java:32)         在com.google.appengine.api.search.IndexImpl.delete(IndexImpl.java:480)

代码

        Index index = getIndex(nameSpace, indexKind);
    while (true) {
        List<String> docIds = new ArrayList<String>();
        // Return a set of doc_ids.
        GetRequest request = GetRequest.newBuilder().setReturningIdsOnly(true).build();
        GetResponse<Document> response = index.getRange(request);
        if (response.getResults().isEmpty()) {
            break;
        }
        for (Document doc : response) {
            docIds.add(doc.getId());
        }
        index.delete(docIds);
    }

谢谢, 麦克

2 个答案:

答案 0 :(得分:2)

我们每个请求最多支持200次删除。事实证明,我们的后端版本中存在一个与我们如何跨多个线程并行索引(和删除)文档相关的错误。在一次索引或删除超过76个文档时,它会导致一些请求超时。批量大小为76或更小不受影响。我们在星期三下午(太平洋时间)到处都找到了解决方案,因此您应该能够再次发送最多200份文档的批次。

答案 1 :(得分:0)

删除查询超出了RPC截止日期。要传递多少文件才能删除?尝试分批50个。这应该解决问题。