gcloud-java authentication datastore (upgrade to v1beta3 in 0.1.7/0.2.0)

14 views
Skip to first unread message

Henrik M via StackOverflow

unread,
Apr 14, 2016, 6:44:08 AM4/14/16
to google-appengin...@googlegroups.com

I had a java GAE application running using gcloud-java 0.1.4 for some time and wanted to upgrade to gcloud-java 0.1.7/0.2.0, as we are experiences several 404s etc. (another problem). We are using gcloud as we connect to a datastore instance in another GAE application.

But after upgrading the package, our authentication fails. From what I read in release notes, we had to re-enable the datastore-api on the "host" application, so we did but without any results. When "downgrading" again, the application works as intended but still with some stability issues.

Are there other undocumented fixes/methods to get it to work?

My connection code/function looks like (stripped):

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();


Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/36620622/gcloud-java-authentication-datastore-upgrade-to-v1beta3-in-0-1-7-0-2-0

Ajay Kannan via StackOverflow

unread,
Apr 15, 2016, 1:54:04 PM4/15/16
to google-appengin...@googlegroups.com

Thanks for reporting this issue. I have a couple of follow up questions so that we can get to the bottom of this:

Does the project ID you set (Constants.DATASTORE_PROJECT_ID) contain any prefixes with a tilde, perhaps "s~" or "e~"? Datastore v1beta3 no longer accepts those prefixes; instead you should provide everything after the tilde as your project ID. For example, if your project ID is s~my-project-id-123, you should use just my-project-id-123. This might be the issue if you see an error message similar to:

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.

If that isn't the issue, do you mind providing a stack trace and a copy of the exception text (removing confidential information as necessary). Thanks!



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/36620622/gcloud-java-authentication-datastore-upgrade-to-v1beta3-in-0-1-7-0-2-0/36653741#36653741

Gregory Was via StackOverflow

unread,
Apr 16, 2016, 4:34:03 PM4/16/16
to google-appengin...@googlegroups.com

Thank you for answer Ajay. But my question is do we need set projectId and authCredentials if we are using Datastore in AppEngine? Is it not setting automatically? According to Google documentation: http://googlecloudplatform.github.io/gcloud-java/0.2.0/index.html# "gcloud is configured to access Google Cloud Platform services and authorize (OAuth 2.0) automatically on your behalf. Add the gcloud dependency to your project and get a private key to be up and ready to go. Better yet, if you are running on Google App Engine or Compute Engine, the private key is automatically detected."

And piece of code from this side:

// Authentication is automatic inside Google Compute Engine
// and Google App Engine.
Datastore datastore = DatastoreOptions.defaultInstance().service();
KeyFactory keyFactory = datastore.newKeyFactory().kind(KIND);
Key key = keyFactory.newKey(keyName);
Entity entity = datastore.get(key);


Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/36620622/gcloud-java-authentication-datastore-upgrade-to-v1beta3-in-0-1-7-0-2-0/36669376#36669376

Henrik M via StackOverflow

unread,
Apr 17, 2016, 12:34:05 PM4/17/16
to google-appengin...@googlegroups.com

I had a java GAE application running using gcloud-java 0.1.4 for some time and wanted to upgrade to gcloud-java 0.1.7/0.2.0, as we are experiences several 404s etc. (another problem). We are using gcloud as we connect to a datastore instance in another GAE application.

But after upgrading the package, our authentication fails. From what I read in release notes, we had to re-enable the datastore-api on the "host" application, so we did but without any results. When "downgrading" again, the application works as intended but still with some stability issues.

Are there other undocumented fixes/methods to get it to work?

My connection code/function looks like (stripped):

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();

EDIT:

Here are the some of the stack traces that I get.

[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

Henrik M via StackOverflow

unread,
Apr 20, 2016, 6:44:03 AM4/20/16
to google-appengin...@googlegroups.com

The service account we were using wasnt set setup with the appropriate permissions in the destination application. So we had (from advice from google) re-add the service account as a viewer here: https://console.cloud.google.com/permissions/projectpermissions

I hope this can help others in the future!



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/36620622/gcloud-java-authentication-datastore-upgrade-to-v1beta3-in-0-1-7-0-2-0/36740719#36740719
Reply all
Reply to author
Forward
0 new messages