From d10a1079aa4b67703e16112ca3d48ca050e6edcd Mon Sep 17 00:00:00 2001 From: Olav Loite Date: Tue, 27 Oct 2020 15:23:47 +0100 Subject: [PATCH 1/2] fix: always delete all backups from an owned test instance An instance can only be deleted once all backups on the instance have been deleted. The integration test environment should therefore first delete all backups on an owned instance before trying to delete the instance itself. Fixes #542 --- .../com/google/cloud/spanner/IntegrationTestEnv.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java index 687bb44ba15..af3d9ad8e9c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java @@ -165,6 +165,18 @@ private void cleanUpInstance() { if (isOwnedInstance) { // Delete the instance, which implicitly drops all databases in it. try { + // Backups must be explicitly deleted before the instance may be deleted. + logger.log( + Level.FINE, "Deleting backups on test instance {0}", testHelper.getInstanceId()); + for (Backup backup : + testHelper + .getClient() + .getDatabaseAdminClient() + .listBackups(testHelper.getInstanceId().getInstance()) + .iterateAll()) { + logger.log(Level.FINE, "Deleting backup {0}", backup.getId()); + backup.delete(); + } logger.log(Level.FINE, "Deleting test instance {0}", testHelper.getInstanceId()); instanceAdminClient.deleteInstance(testHelper.getInstanceId().getInstance()); logger.log(Level.INFO, "Deleted test instance {0}", testHelper.getInstanceId()); From 5cf721e8f196a21fef80a6e354a5812d0a0f83aa Mon Sep 17 00:00:00 2001 From: Olav Loite Date: Tue, 27 Oct 2020 15:39:03 +0100 Subject: [PATCH 2/2] fix: do not try to list backups on emulator --- .../cloud/spanner/IntegrationTestEnv.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java index af3d9ad8e9c..103b6f626ba 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkState; import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.cloud.spanner.testing.RemoteSpannerHelper; import com.google.common.collect.Iterators; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; @@ -165,17 +166,19 @@ private void cleanUpInstance() { if (isOwnedInstance) { // Delete the instance, which implicitly drops all databases in it. try { - // Backups must be explicitly deleted before the instance may be deleted. - logger.log( - Level.FINE, "Deleting backups on test instance {0}", testHelper.getInstanceId()); - for (Backup backup : - testHelper - .getClient() - .getDatabaseAdminClient() - .listBackups(testHelper.getInstanceId().getInstance()) - .iterateAll()) { - logger.log(Level.FINE, "Deleting backup {0}", backup.getId()); - backup.delete(); + if (!EmulatorSpannerHelper.isUsingEmulator()) { + // Backups must be explicitly deleted before the instance may be deleted. + logger.log( + Level.FINE, "Deleting backups on test instance {0}", testHelper.getInstanceId()); + for (Backup backup : + testHelper + .getClient() + .getDatabaseAdminClient() + .listBackups(testHelper.getInstanceId().getInstance()) + .iterateAll()) { + logger.log(Level.FINE, "Deleting backup {0}", backup.getId()); + backup.delete(); + } } logger.log(Level.FINE, "Deleting test instance {0}", testHelper.getInstanceId()); instanceAdminClient.deleteInstance(testHelper.getInstanceId().getInstance());