|
22 | 22 | import com.google.cloud.spanner.testing.RemoteSpannerHelper;
|
23 | 23 | import com.google.common.collect.Iterators;
|
24 | 24 | import com.google.spanner.admin.instance.v1.CreateInstanceMetadata;
|
| 25 | +import io.grpc.Status; |
| 26 | +import java.util.Random; |
25 | 27 | import java.util.concurrent.TimeUnit;
|
26 | 28 | import java.util.logging.Level;
|
27 | 29 | import java.util.logging.Logger;
|
@@ -82,7 +84,10 @@ protected void before() throws Throwable {
|
82 | 84 | isOwnedInstance = false;
|
83 | 85 | logger.log(Level.INFO, "Using existing test instance: {0}", instanceId);
|
84 | 86 | } else {
|
85 |
| -instanceId = InstanceId.of(config.spannerOptions().getProjectId(), "test-instance"); |
| 87 | +instanceId = |
| 88 | +InstanceId.of( |
| 89 | +config.spannerOptions().getProjectId(), |
| 90 | +String.format("test-instance-%08d", new Random().nextInt(100000000))); |
86 | 91 | isOwnedInstance = true;
|
87 | 92 | }
|
88 | 93 | testHelper = createTestHelper(options, instanceId);
|
@@ -123,6 +128,34 @@ private void initializeInstance(InstanceId instanceId) {
|
123 | 128 | try {
|
124 | 129 | createdInstance = op.get(30000L, TimeUnit.MILLISECONDS);
|
125 | 130 | } catch (Exception e) {
|
| 131 | +boolean cancelled = false; |
| 132 | +try { |
| 133 | +// Try to cancel the createInstance operation. |
| 134 | +instanceAdminClient.cancelOperation(op.getName()); |
| 135 | +com.google.longrunning.Operation createOperation = |
| 136 | +instanceAdminClient.getOperation(op.getName()); |
| 137 | +cancelled = |
| 138 | +createOperation.hasError() |
| 139 | +&& createOperation.getError().getCode() == Status.CANCELLED.getCode().value(); |
| 140 | +if (cancelled) { |
| 141 | +logger.info("Cancelled the createInstance operation because the operation failed"); |
| 142 | +} else { |
| 143 | +logger.info( |
| 144 | +"Tried to cancel the createInstance operation because the operation failed, but the operation could not be cancelled. Current status: " |
| 145 | ++ createOperation.getError().getCode()); |
| 146 | +} |
| 147 | +} catch (Throwable t) { |
| 148 | +logger.log(Level.WARNING, "Failed to cancel the createInstance operation", t); |
| 149 | +} |
| 150 | +if (!cancelled) { |
| 151 | +try { |
| 152 | +instanceAdminClient.deleteInstance(instanceId.getInstance()); |
| 153 | +logger.info( |
| 154 | +"Deleted the test instance because the createInstance operation failed and cancelling the operation did not succeed"); |
| 155 | +} catch (Throwable t) { |
| 156 | +logger.log(Level.WARNING, "Failed to delete the test instance", t); |
| 157 | +} |
| 158 | +} |
126 | 159 | throw SpannerExceptionFactory.newSpannerException(e);
|
127 | 160 | }
|
128 | 161 | logger.log(Level.INFO, "Created test instance: {0}", createdInstance.getId());
|
|
0 commit comments