Skip to content
Snippets Groups Projects
Commit 81f6f146 authored by Sean Busbey's avatar Sean Busbey
Browse files

Merge pull request #682 from yuyantingzero/master

[googledatastore] Update googledatastore API version to v1beta3.
parents 9e922c9e 2cc1414b
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,9 @@ LICENSE file. ...@@ -20,6 +20,9 @@ LICENSE file.
https://cloud.google.com/datastore/docs/concepts/overview?hl=en https://cloud.google.com/datastore/docs/concepts/overview?hl=en
Please refer [here] (https://cloud.google.com/datastore/docs/apis/overview) for more information on
Google Cloud Datastore API.
## Configure ## Configure
YCSB_HOME - YCSB home directory YCSB_HOME - YCSB home directory
...@@ -44,7 +47,7 @@ A. Configuration and setup: ...@@ -44,7 +47,7 @@ A. Configuration and setup:
See this link for instructions about setting up Google Cloud Datastore and See this link for instructions about setting up Google Cloud Datastore and
authentication: authentication:
https://cloud.google.com/datastore/docs/getstarted/start_java/ https://cloud.google.com/datastore/docs/activate#accessing_the_datastore_api_from_another_platform
After you setup your environment, you will have 3 pieces of information ready: After you setup your environment, you will have 3 pieces of information ready:
- datasetId, - datasetId,
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
# Google Cloud Datastore's read and update APIs do not support # Google Cloud Datastore's read and update APIs do not support
# reading or updating a select subset of properties for an entity. # reading or updating a select subset of properties for an entity.
# (as of version v1beta2-rev1-3.0.2) # (as of version v1beta3)
# Therefore, it's recommended that you set writeallfields and readallfields # Therefore, it's recommended that you set writeallfields and readallfields
# to true to get stable and comparable performance numbers. # to true to get stable and comparable performance numbers.
writeallfields = true writeallfields = true
......
...@@ -31,9 +31,9 @@ LICENSE file. ...@@ -31,9 +31,9 @@ LICENSE file.
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.google.apis</groupId> <groupId>com.google.cloud.datastore</groupId>
<artifactId>google-api-services-datastore-protobuf</artifactId> <artifactId>datastore-v1beta3-proto-client</artifactId>
<version>v1beta2-rev1-3.0.2</version> <version>1.0.0-beta.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>log4j</groupId>
......
...@@ -18,15 +18,14 @@ ...@@ -18,15 +18,14 @@
package com.yahoo.ycsb.db; package com.yahoo.ycsb.db;
import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.auth.oauth2.Credential;
import com.google.api.services.datastore.DatastoreV1.*; import com.google.datastore.v1beta3.*;
import com.google.api.services.datastore.DatastoreV1.CommitRequest.Mode; import com.google.datastore.v1beta3.CommitRequest.Mode;
import com.google.api.services.datastore.DatastoreV1.ReadOptions import com.google.datastore.v1beta3.ReadOptions.ReadConsistency;
.ReadConsistency; import com.google.datastore.v1beta3.client.Datastore;
import com.google.api.services.datastore.client.Datastore; import com.google.datastore.v1beta3.client.DatastoreException;
import com.google.api.services.datastore.client.DatastoreException; import com.google.datastore.v1beta3.client.DatastoreFactory;
import com.google.api.services.datastore.client.DatastoreFactory; import com.google.datastore.v1beta3.client.DatastoreHelper;
import com.google.api.services.datastore.client.DatastoreHelper; import com.google.datastore.v1beta3.client.DatastoreOptions;
import com.google.api.services.datastore.client.DatastoreOptions;
import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.ByteIterator;
import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DB;
...@@ -165,7 +164,7 @@ public class GoogleDatastoreClient extends DB { ...@@ -165,7 +164,7 @@ public class GoogleDatastoreClient extends DB {
serviceAccountEmail + ", Private Key File Path: " + privateKeyFile); serviceAccountEmail + ", Private Key File Path: " + privateKeyFile);
datastore = DatastoreFactory.get().create( datastore = DatastoreFactory.get().create(
options.credential(credential).dataset(datasetId).build()); options.credential(credential).projectId(datasetId).build());
} catch (GeneralSecurityException exception) { } catch (GeneralSecurityException exception) {
throw new DBException("Security error connecting to the datastore: " + throw new DBException("Security error connecting to the datastore: " +
...@@ -184,7 +183,7 @@ public class GoogleDatastoreClient extends DB { ...@@ -184,7 +183,7 @@ public class GoogleDatastoreClient extends DB {
public Status read(String table, String key, Set<String> fields, public Status read(String table, String key, Set<String> fields,
HashMap<String, ByteIterator> result) { HashMap<String, ByteIterator> result) {
LookupRequest.Builder lookupRequest = LookupRequest.newBuilder(); LookupRequest.Builder lookupRequest = LookupRequest.newBuilder();
lookupRequest.addKey(buildPrimaryKey(table, key)); lookupRequest.addKeys(buildPrimaryKey(table, key));
lookupRequest.getReadOptionsBuilder().setReadConsistency( lookupRequest.getReadOptionsBuilder().setReadConsistency(
this.readConsistency); this.readConsistency);
// Note above, datastore lookupRequest always reads the entire entity, it // Note above, datastore lookupRequest always reads the entire entity, it
...@@ -219,7 +218,7 @@ public class GoogleDatastoreClient extends DB { ...@@ -219,7 +218,7 @@ public class GoogleDatastoreClient extends DB {
Entity entity = response.getFound(0).getEntity(); Entity entity = response.getFound(0).getEntity();
logger.debug("Read entity: " + entity.toString()); logger.debug("Read entity: " + entity.toString());
Map<String, Value> properties = DatastoreHelper.getPropertyMap(entity); Map<String, Value> properties = entity.getProperties();
Set<String> propertiesToReturn = Set<String> propertiesToReturn =
(fields == null ? properties.keySet() : fields); (fields == null ? properties.keySet() : fields);
...@@ -267,11 +266,11 @@ public class GoogleDatastoreClient extends DB { ...@@ -267,11 +266,11 @@ public class GoogleDatastoreClient extends DB {
if (this.entityGroupingMode == EntityGroupingMode.MULTI_ENTITY_PER_GROUP) { if (this.entityGroupingMode == EntityGroupingMode.MULTI_ENTITY_PER_GROUP) {
// All entities are in side the same group when we are in this mode. // All entities are in side the same group when we are in this mode.
result.addPathElement(Key.PathElement.newBuilder().setKind(table). result.addPath(Key.PathElement.newBuilder().setKind(table).
setName(rootEntityName)); setName(rootEntityName));
} }
return result.addPathElement(Key.PathElement.newBuilder().setKind(table) return result.addPath(Key.PathElement.newBuilder().setKind(table)
.setName(key)); .setName(key));
} }
...@@ -289,25 +288,25 @@ public class GoogleDatastoreClient extends DB { ...@@ -289,25 +288,25 @@ public class GoogleDatastoreClient extends DB {
commitRequest.setMode(Mode.NON_TRANSACTIONAL); commitRequest.setMode(Mode.NON_TRANSACTIONAL);
if (mutationType == MutationType.DELETE) { if (mutationType == MutationType.DELETE) {
commitRequest.getMutationBuilder().addDelete(datastoreKey); commitRequest.addMutationsBuilder().setDelete(datastoreKey);
} else { } else {
// If this is not for delete, build the entity. // If this is not for delete, build the entity.
Entity.Builder entityBuilder = Entity.newBuilder(); Entity.Builder entityBuilder = Entity.newBuilder();
entityBuilder.setKey(datastoreKey); entityBuilder.setKey(datastoreKey);
for (Entry<String, ByteIterator> val : values.entrySet()) { for (Entry<String, ByteIterator> val : values.entrySet()) {
entityBuilder.addProperty(Property.newBuilder() entityBuilder.getMutableProperties()
.setName(val.getKey()) .put(val.getKey(),
.setValue(Value.newBuilder() Value.newBuilder()
.setStringValue(val.getValue().toString()))); .setStringValue(val.getValue().toString()).build());
} }
Entity entity = entityBuilder.build(); Entity entity = entityBuilder.build();
logger.debug("entity built as: " + entity.toString()); logger.debug("entity built as: " + entity.toString());
if (mutationType == MutationType.UPSERT) { if (mutationType == MutationType.UPSERT) {
commitRequest.getMutationBuilder().addUpsert(entity); commitRequest.addMutationsBuilder().setUpsert(entity);
} else if (mutationType == MutationType.UPDATE){ } else if (mutationType == MutationType.UPDATE){
commitRequest.getMutationBuilder().addUpdate(entity); commitRequest.addMutationsBuilder().setUpdate(entity);
} else { } else {
throw new RuntimeException("Impossible MutationType, code bug."); throw new RuntimeException("Impossible MutationType, code bug.");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment