我们如何阻止Google Cloud API吞噬异常?

时间:2016-12-24 17:38:54

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

我有时会在put()上得到以下异常。 (虽然一般情况下,我的代码运行正常。)

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

In another case,类似吞噬异常,使用Protobuf解析消息,是由Dataflow自己的数据存储区API内部的一个错误引起的,而Dataflow团队修复了这个错误 - 但在这里我根本不使用Dataflow。

我如何了解造成这种情况的原因?

使用Google Cloud 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;

1 个答案:

答案 0 :(得分:2)

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

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

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

清理依赖项问题后,客户端应该能够正确解析Status个原语并显示基础错误。