@@ -21,8 +21,7 @@ import ShellOut
2121actor DatabasePool {
2222 typealias DatabaseID = UUID
2323
24- #warning("rename to Database")
25- struct DatabaseInfo : Hashable {
24+ struct Database : Hashable {
2625 var id : DatabaseID
2726 var port : Int
2827 }
@@ -35,10 +34,10 @@ actor DatabasePool {
3534 self . maxCount = maxCount
3635 }
3736
38- var availableDatabases : Set < DatabaseInfo > = . init( )
37+ var availableDatabases : Set < Database > = . init( )
3938
4039 func setUp( ) async throws {
41- try await withThrowingTaskGroup ( of: DatabaseInfo . self) { group in
40+ try await withThrowingTaskGroup ( of: Database . self) { group in
4241 for _ in ( 0 ..< maxCount) {
4342 group. addTask {
4443 try await self . launchDB ( )
@@ -52,43 +51,43 @@ actor DatabasePool {
5251
5352 func tearDown( ) async throws {
5453 try await withThrowingTaskGroup { group in
55- for dbInfo in availableDatabases {
54+ for db in availableDatabases {
5655 group. addTask {
57- try await self . removeDB ( dbInfo : dbInfo )
56+ try await self . removeDB ( database : db )
5857 }
5958 }
6059 try await group. waitForAll ( )
6160 }
6261 }
6362
64- func withDatabase( _ operation: @Sendable ( DatabaseInfo ) async throws -> Void ) async throws {
65- let dbID = try await retainDatabase ( )
63+ func withDatabase( _ operation: @Sendable ( Database ) async throws -> Void ) async throws {
64+ let db = try await retainDatabase ( )
6665 do {
6766 // print("⚠️ available", availableDatabases.map(\.port).sorted())
68- try await operation ( dbID )
69- try await releaseDatabase ( dbInfo : dbID )
67+ try await operation ( db )
68+ try await releaseDatabase ( database : db )
7069 } catch {
71- try await releaseDatabase ( dbInfo : dbID )
70+ try await releaseDatabase ( database : db )
7271 throw error
7372 }
7473 }
7574
76- private func retainDatabase( ) async throws -> DatabaseInfo {
77- var dbInfo = availableDatabases. randomElement ( )
78- while dbInfo == nil {
75+ private func retainDatabase( ) async throws -> Database {
76+ var database = availableDatabases. randomElement ( )
77+ while database == nil {
7978 try await Task . sleep ( for: . milliseconds( 100 ) )
80- dbInfo = availableDatabases. randomElement ( )
79+ database = availableDatabases. randomElement ( )
8180 }
82- guard let dbInfo else { fatalError ( " dbInfo cannot be nil here" ) }
83- availableDatabases. remove ( dbInfo )
84- return dbInfo
81+ guard let database else { fatalError ( " database cannot be nil here" ) }
82+ availableDatabases. remove ( database )
83+ return database
8584 }
8685
87- private func releaseDatabase( dbInfo : DatabaseInfo ) async throws {
88- availableDatabases. insert ( dbInfo )
86+ private func releaseDatabase( database : Database ) async throws {
87+ availableDatabases. insert ( database )
8988 }
9089
91- private func launchDB( maxAttempts: Int = 3 ) async throws -> DatabaseInfo {
90+ private func launchDB( maxAttempts: Int = 3 ) async throws -> Database {
9291 let id = UUID ( )
9392 let port = Int . random ( in: 10_000 ... 65_000 )
9493 _ = try ? await ShellOut . shellOut ( to: . removeDB( id: id) )
@@ -99,10 +98,10 @@ actor DatabasePool {
9998 return . init( id: id, port: port)
10099 }
101100
102- private func removeDB( dbInfo : DatabaseInfo , maxAttempts: Int = 3 ) async throws {
101+ private func removeDB( database : Database , maxAttempts: Int = 3 ) async throws {
103102 try await run ( maxAttempts: 3 ) { attempt in
104- // print("⚠️ Removing DB \(dbInfo .id) on port \(dbInfo .port) (attempt: \(attempt))")
105- try await ShellOut . shellOut ( to: . removeDB( id: dbInfo . id) )
103+ // print("⚠️ Removing DB \(database .id) on port \(database .port) (attempt: \(attempt))")
104+ try await ShellOut . shellOut ( to: . removeDB( id: database . id) )
106105 }
107106 }
108107}
@@ -111,7 +110,7 @@ actor DatabasePool {
111110import PostgresNIO
112111import Vapor
113112
114- extension DatabasePool . DatabaseInfo {
113+ extension DatabasePool . Database {
115114
116115 func setupDb( _ environment: Environment ) async throws {
117116 await DotEnvFile . load ( for: environment, fileio: . init( threadPool: . singleton) )
0 commit comments