0

我有一个使用 gcloud-java 0.1.4 运行一段时间的 java GAE 应用程序,并且想升级到 gcloud-java 0.1.7/0.2.0,因为我们遇到了几个 404 等(另一个问题)。当我们连接到另一个 GAE 应用程序中的数据存储实例时,我们正在使用 gcloud。

但是升级包后,我们的认证失败了。根据我在发行说明中读到的内容,我们必须在“主机”应用程序上重新启用 datastore-api,所以我们这样做了,但没有任何结果。再次“降级”时,应用程序按预期工作,但仍存在一些稳定性问题。

是否有其他未记录的修复/方法可以使其正常工作?

我的连接代码/功能看起来像(剥离):

fis = new FileInputStream(Constants.PATH_TO_JSON_KEY);
sac = AuthCredentials.createForJson(fis); 

DatastoreOptions.Builder builder = DatastoreOptions.builder();
builder.projectId(Constants.DATASTORE_PROJECT_ID);
builder.authCredentials(sac);
DatastoreOptions options = builder.build();

return options.service();

编辑:

这是我得到的一些堆栈跟踪。

[INFO] apr 17, 2016 6:19:33 PM com.google.datastore.v1beta3.client.DatastoreFactory makeClient
[INFO] com.google.cloud.datastore.DatastoreException: Not authorized.
[INFO]  at com.google.cloud.datastore.spi.DefaultDatastoreRpc.translate(DefaultDatastoreRpc.java:102)
[INFO]  at com.google.cloud.datastore.spi.DefaultDatastoreRpc.runQuery(DefaultDatastoreRpc.java:157)
[INFO]  at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:92)
[INFO]  at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:89)
[INFO]  at com.google.cloud.RetryHelper.doRetry(RetryHelper.java:181)
[INFO]  at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:247)
[INFO]  at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:237)
[INFO]  at com.google.cloud.datastore.DatastoreImpl.runQuery(DatastoreImpl.java:88)
[INFO]  at com.google.cloud.datastore.QueryResultsImpl.sendRequest(QueryResultsImpl.java:73)
[INFO]  at com.google.cloud.datastore.QueryResultsImpl.<init>(QueryResultsImpl.java:57)
[INFO]  at com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:82)
[INFO]  at com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:73)
.....
[INFO] Caused by: com.google.datastore.v1beta3.client.DatastoreException: Not authorized., code=PERMISSION_DENIED
[INFO]  at com.google.datastore.v1beta3.client.RemoteRpc.makeException(RemoteRpc.java:126)
[INFO]  at com.google.datastore.v1beta3.client.RemoteRpc.makeException(RemoteRpc.java:169)
[INFO]  at com.google.datastore.v1beta3.client.RemoteRpc.call(RemoteRpc.java:89)
[INFO]  at com.google.datastore.v1beta3.client.Datastore.runQuery(Datastore.java:108)
[INFO]  at com.google.cloud.datastore.spi.DefaultDatastoreRpc.runQuery(DefaultDatastoreRpc.java:155)
[INFO]  ... 56 more
4

2 回答 2

0

我们使用的服务帐户没有在目标应用程序中设置适当的权限。所以我们(来自谷歌的建议)在这里重新添加服务帐户作为查看器: https ://console.cloud.google.com/permissions/projectpermissions

我希望这可以在未来帮助其他人!

于 2016-04-20T10:16:45.430 回答
0

感谢您报告此问题。我有几个后续问题,以便我们深入了解:

您设置的项目 ID ( Constants.DATASTORE_PROJECT_ID) 是否包含任何带有波浪号的前缀,可能是“s~”或“e~”?Datastore v1beta3 不再接受这些前缀;相反,您应该提供波浪号之后的所有内容作为您的项目 ID。例如,如果您的项目 ID 是s~my-project-id-123,则应仅使用my-project-id-123. 如果您看到类似于以下内容的错误消息,则可能是问题所在:

com.google.datastore.v1beta3.client.DatastoreFactory makeClient: Not using any credentials
com.google.cloud.datastore.DatastoreException: The project s~my-project-id-123 does not exist.

如果这不是问题,您介意提供堆栈跟踪和异常文本的副本(必要时删除机密信息)。谢谢!

于 2016-04-15T17:48:33.000 回答