Skip to content

Commit 189ca2f

Browse files
authored
test: Fix flaky MaterializedViewIT, remove unnecessary instance creation (#2707)
Change-Id: I287cb35ba0ef34a50a851c48baa8c660f7aed34d
1 parent fc06050 commit 189ca2f

2 files changed

Lines changed: 37 additions & 33 deletions

File tree

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import com.google.api.gax.rpc.NotFoundException;
2525
import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient;
2626
import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient;
27-
import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest;
2827
import com.google.cloud.bigtable.admin.v2.models.CreateMaterializedViewRequest;
2928
import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest;
3029
import com.google.cloud.bigtable.admin.v2.models.MaterializedView;
31-
import com.google.cloud.bigtable.admin.v2.models.StorageType;
3230
import com.google.cloud.bigtable.admin.v2.models.Table;
3331
import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest;
3432
import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv;
@@ -38,7 +36,6 @@
3836
import java.io.IOException;
3937
import java.util.List;
4038
import java.util.logging.Logger;
41-
import org.junit.After;
4239
import org.junit.Before;
4340
import org.junit.BeforeClass;
4441
import org.junit.ClassRule;
@@ -55,9 +52,8 @@ public class BigtableMaterializedViewIT {
5552
private static final int[] BACKOFF_DURATION = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};
5653

5754
private BigtableInstanceAdminClient client;
58-
private BigtableTableAdminClient tableAdminClient;
5955
private Table testTable;
60-
private String instanceId = "";
56+
private String instanceId = testEnvRule.env().getInstanceId();
6157

6258
// TODO: Update this test once emulator supports InstanceAdmin operation
6359
// https://github.com/googleapis/google-cloud-go/issues/1069
@@ -72,23 +68,7 @@ public static void validatePlatform() throws IOException {
7268
@Before
7369
public void setUp() throws InterruptedException, IOException {
7470
client = testEnvRule.env().getInstanceAdminClient();
75-
76-
instanceId = new PrefixGenerator().newPrefix();
77-
client.createInstance(
78-
CreateInstanceRequest.of(instanceId)
79-
.setDisplayName("BigtableMaterializedViewIT")
80-
.addCluster(
81-
instanceId + "-c1", testEnvRule.env().getPrimaryZone(), 1, StorageType.SSD));
82-
tableAdminClient = testEnvRule.env().getTableAdminClientForInstance(instanceId);
83-
84-
testTable = createTestTable(tableAdminClient);
85-
}
86-
87-
@After
88-
public void deleteInstance() {
89-
if (!instanceId.isEmpty()) {
90-
client.deleteInstance(instanceId);
91-
}
71+
testTable = createTestTable(testEnvRule.env().getTableAdminClient());
9272
}
9373

9474
@Test

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@
2424
import com.google.cloud.bigtable.admin.v2.models.AppProfile;
2525
import com.google.cloud.bigtable.admin.v2.models.Cluster;
2626
import com.google.cloud.bigtable.admin.v2.models.Instance;
27+
import com.google.cloud.bigtable.admin.v2.models.LogicalView;
28+
import com.google.cloud.bigtable.admin.v2.models.MaterializedView;
2729
import com.google.cloud.bigtable.admin.v2.models.Table;
2830
import com.google.cloud.bigtable.admin.v2.models.UpdateAuthorizedViewRequest;
31+
import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest;
32+
import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest;
2933
import com.google.cloud.bigtable.admin.v2.models.UpdateTableRequest;
3034
import com.google.common.collect.ImmutableSet;
3135
import java.io.IOException;
@@ -161,8 +165,6 @@ void cleanUpStale() throws ExecutionException, InterruptedException, IOException
161165
/**
162166
* Clean up AppProfile that were dynamically created in the default instance that have been
163167
* orphaned.
164-
*
165-
* @param stalePrefix
166168
*/
167169
private void cleanupStaleTables(String stalePrefix) {
168170
LOGGER.info("Start cleaning up stale tables with stalePrefix=" + stalePrefix);
@@ -213,8 +215,6 @@ private void prepTableForDelete(String tableId) {
213215
/**
214216
* Clean up AppProfile that were dynamically created in the default instance that have been
215217
* orphaned.
216-
*
217-
* @param stalePrefix
218218
*/
219219
private void cleanUpStaleAppProfile(String stalePrefix) {
220220
for (AppProfile appProfile :
@@ -239,8 +239,6 @@ private void cleanUpStaleAppProfile(String stalePrefix) {
239239
/**
240240
* Clean up clusters that were dynamically created in the default instance that have been
241241
* orphaned.
242-
*
243-
* @param stalePrefix
244242
*/
245243
private void cleanUpStaleClusters(String stalePrefix)
246244
throws ExecutionException, InterruptedException {
@@ -264,11 +262,36 @@ private void cleanUpStaleClusters(String stalePrefix)
264262
}
265263
}
266264

267-
/**
268-
* Clean up dynamically created (non-default) instances that have been orphaned.
269-
*
270-
* @param stalePrefix
271-
*/
265+
private void prepInstanceForDelete(String instanceId) {
266+
if (env() instanceof EmulatorEnv) {
267+
return;
268+
}
269+
// Unprotected MaterializedViews.
270+
for (MaterializedView materializedView :
271+
env().getInstanceAdminClient().listMaterializedViews(instanceId)) {
272+
try {
273+
env()
274+
.getInstanceAdminClient()
275+
.updateMaterializedView(
276+
UpdateMaterializedViewRequest.of(instanceId, materializedView.getId())
277+
.setDeletionProtection(false));
278+
} catch (NotFoundException ignored) {
279+
}
280+
}
281+
// Unprotected LogicalViews.
282+
for (LogicalView logicalView : env().getInstanceAdminClient().listLogicalViews(instanceId)) {
283+
try {
284+
env()
285+
.getInstanceAdminClient()
286+
.updateLogicalView(
287+
UpdateLogicalViewRequest.of(instanceId, logicalView.getId())
288+
.setDeletionProtection(false));
289+
} catch (NotFoundException ignored) {
290+
}
291+
}
292+
}
293+
294+
/** Clean up dynamically created (non-default) instances that have been orphaned. */
272295
private void cleanUpStaleInstances(String stalePrefix)
273296
throws IOException, ExecutionException, InterruptedException {
274297
for (Instance instance : env().getInstanceAdminClient().listInstances()) {
@@ -279,6 +302,7 @@ private void cleanUpStaleInstances(String stalePrefix)
279302
if (isNewerThanStale) {
280303
continue;
281304
}
305+
prepInstanceForDelete(instance.getId());
282306
try {
283307
deleteInstance(instance.getId());
284308
} catch (NotFoundException ignored) {

0 commit comments

Comments
 (0)