【问题标题】:How can we prevent Google Cloud API from swallowing exceptions?我们如何防止 Google Cloud API 吞下异常?
【发布时间】:2016-12-29 03:45:41
【问题描述】:

我有时会在 put() 上遇到以下异常。 (虽然总的来说,我的代码工作正常。)

我最好的猜测是 Datastore 内部遇到了索引错误(有 no tools for diagnosing),但我不确定,因为错误被 Protobuf 解析问题吞没了。

In another case,与 Protobuf 解析消息类似的异常吞咽,是由 Dataflow 自己的 Datastore API 内部的错误引起的,Dataflow 团队修复了该问题 - 但这里我根本没有使用 Dataflow。

我怎样才能知道是什么原因造成的?

使用谷歌云 API 0.28。

   ... at com.google.cloud.datastore.DatastoreImpl.put(DatastoreImpl.java:340)
    at com.google.cloud.datastore.DatastoreImpl.commitMutation(DatastoreImpl.java:380)
    at com.google.cloud.datastore.DatastoreImpl.commit(DatastoreImpl.java:386)
    at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:244)
    at com.google.cloud.RetryHelper.doRetry(RetryHelper.java:179)
    at com.google.cloud.datastore.DatastoreImpl$4.call(DatastoreImpl.java:387)
    at com.google.cloud.datastore.DatastoreImpl$4.call(DatastoreImpl.java:390)
    at com.google.cloud.datastore.spi.DefaultDatastoreRpc.commit(DefaultDatastoreRpc.java:131)
    at com.google.datastore.v1.client.Datastore.commit(Datastore.java:84)
    at com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:89)
    at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:148)
    at com.google.rpc.Status.parseFrom(Status.java:323)
    java.lang.NoSuchMethodError: com.google.protobuf.GeneratedMessage.parseWithIOException(Lcom/google/protobuf/Parser;Ljava/io/InputStream;)Lcom/google/protobuf/Message;

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore google-cloud-platform


    【解决方案1】:

    我认为这是旧版本的 com.google.protobuf:protobuf-java 工件进入您的类路径的症状。在com.google.protobuf:protobuf-java:jar:3.0.0中添加了GeneratedMessage.parseWithIOException方法。

    防止这种情况的一种方法是在您的 pom 文件中添加 dependencyManagement 部分:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.protobuf</groupId>
          <artifactId>protobuf-java</artifactId>
          <version>3.0.0</version>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    一旦清除了依赖问题,客户端应该能够正确解析Status protos 并显示底层错误。

    【讨论】:

    • 谢谢。这成功了。该异常确实是“索引条目对于实体而言太大”异常
    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多