Merge pull request #2038 from nosqlbench/spanner

Spanner - Handle Drop DB more elegantly
This commit is contained in:
Madhavan 2024-10-09 14:27:41 -04:00 committed by GitHub
commit 930daed65f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 43 additions and 21 deletions

View File

@ -7,7 +7,7 @@
</extension> </extension>
<option name="JAR_PATH" value="$PROJECT_DIR$/nb5/target/nb5.jar" /> <option name="JAR_PATH" value="$PROJECT_DIR$/nb5/target/nb5.jar" />
<option name="VM_PARAMETERS" value="--enable-preview" /> <option name="VM_PARAMETERS" value="--enable-preview" />
<option name="PROGRAM_PARAMETERS" value="insert_vector default.insert_vector project_id=stratperf instance_id=spanner-vector database_id=baselines1 service_account_file=./stratperf-068083077315.json cycles=1180 dataset=https://testeng-assets.s3.us-east-2.amazonaws.com/vector/testdata/vector/ANN/glove-25-angular/glove-25-angular.hdf5 --progress console:1s -v --add-labels=&quot;target:spanner,instance:vectors,vendor:gcp&quot; --report-prompush-to https://vector-perf.feat.apps.paas.datastax.com:8427/api/v1/import/prometheus/metrics/job/nosqlbench/instance/vectors --annotators &quot;[{'type':'log','level':'info'},{'type':'grafana','baseurl':'https://vector-perf.feat.apps.paas.datastax.com/'}]&quot; --report-interval 10 --show-stacktraces --logs-max 5" /> <option name="PROGRAM_PARAMETERS" value="insert_vector default.insert_vector project_id=stratperf instance_id=spanner-vector database_id=baselines12 service_account_file=./stratperf-068083077315.json cycles=1180 dataset=https://testeng-assets.s3.us-east-2.amazonaws.com/vector/testdata/vector/ANN/glove-25-angular/glove-25-angular.hdf5 --progress console:1s -v --add-labels=&quot;target:spanner,instance:vectors,vendor:gcp&quot; --report-prompush-to https://vector-perf.feat.apps.paas.datastax.com:8427/api/v1/import/prometheus/metrics/job/nosqlbench/instance/vectors --annotators &quot;[{'type':'log','level':'info'},{'type':'grafana','baseurl':'https://vector-perf.feat.apps.paas.datastax.com/'}]&quot; --report-interval 10 --show-stacktraces --logs-max 5" />
<option name="WORKING_DIRECTORY" value="$ProjectFileDir$/local/google_spanner" /> <option name="WORKING_DIRECTORY" value="$ProjectFileDir$/local/google_spanner" />
<option name="ALTERNATIVE_JRE_PATH" value="jdk21" /> <option name="ALTERNATIVE_JRE_PATH" value="jdk21" />
<envs> <envs>

View File

@ -7,7 +7,7 @@
</extension> </extension>
<option name="JAR_PATH" value="$PROJECT_DIR$/nb5/target/nb5.jar" /> <option name="JAR_PATH" value="$PROJECT_DIR$/nb5/target/nb5.jar" />
<option name="VM_PARAMETERS" value="--enable-preview" /> <option name="VM_PARAMETERS" value="--enable-preview" />
<option name="PROGRAM_PARAMETERS" value="create_database_ddl default.create_db_ddl project_id=stratperf instance_id=spanner-vector database_id=baselines1 service_account_file=./stratperf-068083077315.json --progress console:1s -v --add-labels=&quot;target:spanner,instance:vectors,vendor:gcp&quot; --report-prompush-to https://vector-perf.feat.apps.paas.datastax.com:8427/api/v1/import/prometheus/metrics/job/nosqlbench/instance/vectors --annotators &quot;[{'type':'log','level':'info'},{'type':'grafana','baseurl':'https://vector-perf.feat.apps.paas.datastax.com/'}]&quot; --report-interval 10 --show-stacktraces --logs-max 5" /> <option name="PROGRAM_PARAMETERS" value="create_database_ddl default.create_db_ddl project_id=stratperf instance_id=spanner-vector database_id=baselines12 service_account_file=./stratperf-068083077315.json --progress console:1s -v --add-labels=&quot;target:spanner,instance:vectors,vendor:gcp&quot; --report-prompush-to https://vector-perf.feat.apps.paas.datastax.com:8427/api/v1/import/prometheus/metrics/job/nosqlbench/instance/vectors --annotators &quot;[{'type':'log','level':'info'},{'type':'grafana','baseurl':'https://vector-perf.feat.apps.paas.datastax.com/'}]&quot; --report-interval 10 --show-stacktraces --logs-max 5" />
<option name="WORKING_DIRECTORY" value="$ProjectFileDir$/local/google_spanner" /> <option name="WORKING_DIRECTORY" value="$ProjectFileDir$/local/google_spanner" />
<option name="ALTERNATIVE_JRE_PATH" value="jdk21" /> <option name="ALTERNATIVE_JRE_PATH" value="jdk21" />
<envs> <envs>

View File

@ -7,7 +7,7 @@
</extension> </extension>
<option name="JAR_PATH" value="$PROJECT_DIR$/nb5/target/nb5.jar" /> <option name="JAR_PATH" value="$PROJECT_DIR$/nb5/target/nb5.jar" />
<option name="VM_PARAMETERS" value="--enable-preview" /> <option name="VM_PARAMETERS" value="--enable-preview" />
<option name="PROGRAM_PARAMETERS" value="drop_database_ddl default.drop_db_ddl project_id=stratperf instance_id=spanner-vector database_id=baselines1 service_account_file=./stratperf-068083077315.json --progress console:1s -v --add-labels=&quot;target:spanner,instance:vectors,vendor:gcp&quot; --report-prompush-to https://vector-perf.feat.apps.paas.datastax.com:8427/api/v1/import/prometheus/metrics/job/nosqlbench/instance/vectors --annotators &quot;[{'type':'log','level':'info'},{'type':'grafana','baseurl':'https://vector-perf.feat.apps.paas.datastax.com/'}]&quot; --report-interval 10 --show-stacktraces --logs-max 5" /> <option name="PROGRAM_PARAMETERS" value="drop_database_ddl default.drop_db_ddl project_id=stratperf instance_id=spanner-vector database_id=baselines12 service_account_file=./stratperf-068083077315.json --progress console:1s -v --add-labels=&quot;target:spanner,instance:vectors,vendor:gcp&quot; --report-prompush-to https://vector-perf.feat.apps.paas.datastax.com:8427/api/v1/import/prometheus/metrics/job/nosqlbench/instance/vectors --annotators &quot;[{'type':'log','level':'info'},{'type':'grafana','baseurl':'https://vector-perf.feat.apps.paas.datastax.com/'}]&quot; --report-interval 10 --show-stacktraces --logs-max 5" />
<option name="WORKING_DIRECTORY" value="$ProjectFileDir$/local/google_spanner" /> <option name="WORKING_DIRECTORY" value="$ProjectFileDir$/local/google_spanner" />
<option name="ALTERNATIVE_JRE_PATH" value="jdk21" /> <option name="ALTERNATIVE_JRE_PATH" value="jdk21" />
<envs> <envs>

View File

@ -418,7 +418,7 @@
<dependency> <dependency>
<groupId>com.google.cloud</groupId> <groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner</artifactId> <artifactId>google-cloud-spanner</artifactId>
<version>6.76.0</version> <version>6.77.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
@ -778,7 +778,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version> <version>3.13.0</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -17,7 +17,10 @@
package io.nosqlbench.adapter.gcpspanner.opdispensers; package io.nosqlbench.adapter.gcpspanner.opdispensers;
import com.google.cloud.spanner.DatabaseAdminClient;
import com.google.cloud.spanner.Options;
import io.nosqlbench.adapter.gcpspanner.GCPSpannerDriverAdapter; import io.nosqlbench.adapter.gcpspanner.GCPSpannerDriverAdapter;
import io.nosqlbench.adapter.gcpspanner.GCPSpannerSpace;
import io.nosqlbench.adapter.gcpspanner.ops.GCPSpannerBaseOp; import io.nosqlbench.adapter.gcpspanner.ops.GCPSpannerBaseOp;
import io.nosqlbench.adapter.gcpspanner.ops.GCPSpannerDropDatabaseDdlOp; import io.nosqlbench.adapter.gcpspanner.ops.GCPSpannerDropDatabaseDdlOp;
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
@ -45,7 +48,7 @@ public class GCPSpannerDropDatabaseDdlOpDispenser extends GCPSpannerBaseOpDispen
*/ */
public GCPSpannerDropDatabaseDdlOpDispenser(GCPSpannerDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) { public GCPSpannerDropDatabaseDdlOpDispenser(GCPSpannerDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op, targetFunction); super(adapter, op, targetFunction);
this.opFunction = DropOpFunction(op); this.opFunction = dropOpFunction(op);
} }
/** /**
@ -54,15 +57,28 @@ public class GCPSpannerDropDatabaseDdlOpDispenser extends GCPSpannerBaseOpDispen
* @param op the {@link ParsedOp} instance * @param op the {@link ParsedOp} instance
* @return a {@link LongFunction} that generates {@link GCPSpannerDropDatabaseDdlOp} instances * @return a {@link LongFunction} that generates {@link GCPSpannerDropDatabaseDdlOp} instances
*/ */
private LongFunction<GCPSpannerDropDatabaseDdlOp> DropOpFunction(ParsedOp op) { private LongFunction<GCPSpannerDropDatabaseDdlOp> dropOpFunction(ParsedOp op) {
return (l) -> new GCPSpannerDropDatabaseDdlOp( return l -> {
spaceFunction.apply(l).getSpanner(), GCPSpannerSpace space = spaceFunction.apply(l);
if (space.getSpanner() != null && space.getDbAdminClient() != null && space.getDbClient() != null) {
String dbId = targetFunction.apply(l);
DatabaseAdminClient dbAdminClient = space.getDbAdminClient();
if (dbAdminClient.listDatabases(spaceFunction.apply(l).getInstanceId(), Options.filter(null))
.streamValues().anyMatch(d -> d.getId().getDatabase().equals(dbId))) {
return new GCPSpannerDropDatabaseDdlOp(
space.getSpanner(),
l, l,
targetFunction.apply(l), dbId,
spaceFunction.apply(l).getDbAdminClient(), space.getDbAdminClient(),
spaceFunction.apply(l).getDbAdminClient().getDatabase(spaceFunction.apply(l).getInstanceId(), spaceFunction.apply(l).getDatabaseIdString()) space.getDbAdminClient().getDatabase(space.getInstanceId(), space.getDatabaseIdString())
); );
} }
}
logger.info("Database to be deleted not found [{}]", space.getDatabaseId().getName());
return null;
};
}
/** /**
* Retrieves an operation instance based on the provided value. * Retrieves an operation instance based on the provided value.
@ -72,6 +88,6 @@ public class GCPSpannerDropDatabaseDdlOpDispenser extends GCPSpannerBaseOpDispen
*/ */
@Override @Override
public GCPSpannerBaseOp<?> getOp(long value) { public GCPSpannerBaseOp<?> getOp(long value) {
return opFunction.apply(value); return opFunction != null ? opFunction.apply(value) : null;
} }
} }

View File

@ -18,6 +18,7 @@ package io.nosqlbench.adapter.gcpspanner.ops;
import com.google.cloud.spanner.Database; import com.google.cloud.spanner.Database;
import com.google.cloud.spanner.DatabaseAdminClient; import com.google.cloud.spanner.DatabaseAdminClient;
import com.google.cloud.spanner.DatabaseNotFoundException;
import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.Spanner;
/** /**
@ -56,11 +57,17 @@ public class GCPSpannerDropDatabaseDdlOp extends GCPSpannerBaseOp<Long> {
@Override @Override
public Object applyOp(long value) { public Object applyOp(long value) {
try { try {
if (null != db && db.exists()) {
db.drop(); db.drop();
}
} catch (Exception e) { } catch (Exception e) {
logger.warn("Error dropping database using the Database object: {}. Will re-try using the DBAdminClient now...", e.getMessage()); logger.warn("Error dropping database using the Database object: {}. Will re-try using the DBAdminClient now...", e.getMessage());
try { try {
if (null != dbAdminClient) {
dbAdminClient.dropDatabase(databaseId, null); dbAdminClient.dropDatabase(databaseId, null);
}
} catch (DatabaseNotFoundException noDB) {
logger.info("Database does not exist. {}", noDB.getMessage());
} catch (Exception ex) { } catch (Exception ex) {
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2022-2023 nosqlbench * Copyright (c) 2020-2024 nosqlbench
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -105,7 +105,6 @@ public class OpDef extends OpTemplate {
return tagsWithName; return tagsWithName;
} }
@Override
public String toString() { public String toString() {
return "stmt(name:" + getName() + ", stmt:" + getOp() + ", tags:(" + getTags() + "), params:(" + getParams() + "), bindings:(" + getBindings() + "))"; return "stmt(name:" + getName() + ", stmt:" + getOp() + ", tags:(" + getTags() + "), params:(" + getParams() + "), bindings:(" + getBindings() + "))";
} }