Skip to content

Commit 6cc4705

Browse files
delete datasets in parallel and retry a couple times (#3277)
Signed-off-by: Stephen Compall <stephen.compall@digitalasset.com>
1 parent c8a2ab4 commit 6cc4705

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ScanTotalSupplyBigQueryIntegrationTest.scala

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.digitalasset.daml.lf.data.Time.Timestamp as LfTimestamp
1212
import com.google.cloud.bigquery as bq
1313
import bq.{Field, FieldValueList, JobInfo, Schema, TableId, TableResult}
1414
import bq.storage.v1.{JsonStreamWriter, TableSchema}
15+
import org.scalatest.concurrent.TimeLimits.failAfter
1516
import slick.jdbc.canton.ActionBasedSQLInterpolation.Implicits.*
1617
import slick.jdbc.GetResult
1718

@@ -62,6 +63,11 @@ class ScanTotalSupplyBigQueryIntegrationTest
6263
}
6364
private val functionsDatasetName = s"functions_$uuid"
6465
private val dashboardsDatasetName = s"dashboards_$uuid"
66+
private val allDatasetNames = Seq(
67+
datasetName,
68+
functionsDatasetName,
69+
dashboardsDatasetName,
70+
)
6571

6672
// Test data parameters
6773
private val mintedAppRewardsAmount = BigDecimal(0)
@@ -127,12 +133,31 @@ class ScanTotalSupplyBigQueryIntegrationTest
127133
}
128134

129135
override def afterAll() = {
130-
logger.info(s"Cleaning up BigQuery dataset: $datasetName")
136+
val singleDeleteTryTime = 13.seconds
137+
138+
Future
139+
.traverse(allDatasetNames) { dsName =>
140+
val logMsg = s"Cleaning up BigQuery dataset: $dsName"
141+
Future {
142+
logger.info(logMsg)
143+
// afterAll only has 60s to complete before its thread gets
144+
// interrupted
145+
eventuallySucceeds(timeUntilSuccess = 45.seconds, suppressErrors = false) {
146+
failAfter(singleDeleteTryTime) {
147+
// can hang, so we force retry after singleDeleteTryTime;
148+
// even when it hangs it's still likely to succeed, and delete
149+
// just succeeds with `false` if already deleted
150+
bigquery.delete(dsName, bq.BigQuery.DatasetDeleteOption.deleteContents())
151+
}
152+
}
153+
logger.info(s"Finished $logMsg")
154+
}.recoverWith { case util.control.NonFatal(e) =>
155+
logger.warn(s"Failed $logMsg")
156+
Future failed e
157+
}
158+
}
159+
.futureValue
131160

132-
// Delete the temporary BigQuery datasets after tests
133-
bigquery.delete(datasetName, bq.BigQuery.DatasetDeleteOption.deleteContents())
134-
bigquery.delete(functionsDatasetName, bq.BigQuery.DatasetDeleteOption.deleteContents())
135-
bigquery.delete(dashboardsDatasetName, bq.BigQuery.DatasetDeleteOption.deleteContents())
136161
super.afterAll()
137162
}
138163

0 commit comments

Comments
 (0)