@@ -47,24 +47,12 @@ actor DatabasePool {
4747 // We don't have docker available in CI to probe for running dbs.
4848 // Instead, we have a hard-coded list of dbs we launch in the GH workflow
4949 // file and correspondingly, we hard-code their ports here.
50- let runningDbs = Set ( ( 6000 ..< 6008 ) . map ( Database . init) )
51- try await withThrowingTaskGroup ( of: Database . self) { group in
52- for db in runningDbs {
53- group. addTask {
54- try await db. setup ( for: . testing)
55- return db
56- }
57- }
58- for try await db in group {
59- availableDatabases. insert ( db)
60- }
61- }
50+ let runningDbs = ( 6000 ..< 6008 ) . map ( Database . init)
51+ availableDatabases = try await Set ( setupDatabases ( runningDbs) )
6252 } else {
6353 // Re-use up to maxCount running dbs
6454 let runningDbs = try await runningDatabases ( )
65- for db in runningDbs. prefix ( maxCount) {
66- availableDatabases. insert ( db)
67- }
55+ availableDatabases = try await Set ( setupDatabases ( runningDbs. prefix ( maxCount) ) )
6856
6957 do { // Delete overprovisioned dbs
7058 let overprovisioned = runningDbs. dropFirst ( maxCount)
@@ -132,6 +120,22 @@ actor DatabasePool {
132120 . map ( Database . init ( port: ) )
133121 }
134122
123+ private func setupDatabases( _ databases: any Collection < Database > ) async throws -> [ Database ] {
124+ try await withThrowingTaskGroup ( of: Database . self) { group in
125+ for db in databases {
126+ group. addTask {
127+ try await db. setup ( for: . testing)
128+ return db
129+ }
130+ }
131+ var availableDatabases = [ Database] ( )
132+ for try await db in group {
133+ availableDatabases. append ( db)
134+ }
135+ return availableDatabases
136+ }
137+ }
138+
135139 private func retainDatabase( ) async throws -> Database {
136140 var database = availableDatabases. randomElement ( )
137141 while database == nil {
0 commit comments