Skip to content

Commit 96f7097

Browse files
author
Andrea Scuderi
committed
Remove BreezeLambdaService
1 parent d0fb3f9 commit 96f7097

File tree

5 files changed

+51
-167
lines changed

5 files changed

+51
-167
lines changed

Sources/BreezeDynamoDBService/BreezeDynamoDBService.swift

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@ import Logging
2020
/// Defines the interface for a Breeze DynamoDB service.
2121
///
2222
/// Provides methods to access the database manager and to gracefully shutdown the service.
23-
public protocol BreezeDynamoDBServing: Actor {
24-
func dbManager() async -> BreezeDynamoDBManaging
25-
func gracefulShutdown() throws
23+
public protocol BreezeDynamoDBServing: Service {
24+
var dbManager: BreezeDynamoDBManaging { get }
25+
func onGracefulShutdown() async throws
26+
func syncShutdown() throws
2627
}
2728

2829
/// Provides methods to access the DynamoDB database manager and to gracefully shutdown the service.
29-
public actor BreezeDynamoDBService: BreezeDynamoDBServing {
30+
public struct BreezeDynamoDBService: BreezeDynamoDBServing {
3031

31-
private let dbManager: BreezeDynamoDBManaging
32+
public let dbManager: BreezeDynamoDBManaging
3233
private let logger: Logger
3334
private let awsClient: AWSClient
3435
private let httpClient: HTTPClient
@@ -46,7 +47,7 @@ public actor BreezeDynamoDBService: BreezeDynamoDBServing {
4647
httpConfig: BreezeHTTPClientConfig,
4748
logger: Logger,
4849
DBManagingType: BreezeDynamoDBManaging.Type = BreezeDynamoDBManager.self
49-
) async {
50+
) {
5051
logger.info("Init DynamoDBService with config...")
5152
logger.info("region: \(config.region)")
5253
logger.info("tableName: \(config.tableName)")
@@ -76,10 +77,9 @@ public actor BreezeDynamoDBService: BreezeDynamoDBServing {
7677
logger.info("DBManager is ready.")
7778
}
7879

79-
/// Returns the BreezeDynamoDBManaging instance.
80-
public func dbManager() async -> BreezeDynamoDBManaging {
81-
logger.info("Starting DynamoDBService...")
82-
return self.dbManager
80+
public func run() async throws {
81+
try await gracefulShutdown()
82+
try await onGracefulShutdown()
8383
}
8484

8585
/// Gracefully shutdown the service and its components.
@@ -89,21 +89,19 @@ public actor BreezeDynamoDBService: BreezeDynamoDBServing {
8989
/// It also logs the shutdown process.
9090
/// This method is idempotent;
9191
/// - Important: This method must be called at leat once to ensure that resources are released properly. If the method is not called, it will lead to a crash.
92-
public func gracefulShutdown() throws {
93-
guard !isShutdown else { return }
94-
isShutdown = true
92+
public func onGracefulShutdown() async throws {
9593
logger.info("Stopping DynamoDBService...")
96-
try awsClient.syncShutdown()
94+
try await awsClient.shutdown()
9795
logger.info("DynamoDBService is stopped.")
9896
logger.info("Stopping HTTPClient...")
99-
try httpClient.syncShutdown()
97+
try await httpClient.shutdown()
10098
logger.info("HTTPClient is stopped.")
10199
}
102100

103-
deinit {
104-
guard !isShutdown else { return }
105-
try? awsClient.syncShutdown()
106-
try? httpClient.syncShutdown()
101+
/// Sync shutdown
102+
public func syncShutdown() throws {
103+
try awsClient.syncShutdown()
104+
try httpClient.syncShutdown()
107105
}
108106
}
109107

Sources/BreezeLambdaAPI/BreezeLambdaAPI.swift

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public actor BreezeLambdaAPI<T: BreezeCodable>: Service {
4343
let timeout: TimeAmount
4444
private let serviceGroup: ServiceGroup
4545
private let apiConfig: any APIConfiguring
46+
private let dynamoDBService: BreezeDynamoDBService
4647

4748
/// Initializes the BreezeLambdaAPI with the provided API configuration.
4849
/// - Parameter apiConfig: An object conforming to `APIConfiguring` that provides the necessary configuration for the Breeze API.
@@ -63,19 +64,18 @@ public actor BreezeLambdaAPI<T: BreezeCodable>: Service {
6364
logger: logger
6465
)
6566
let operation = try apiConfig.operation()
66-
let dynamoDBService = await BreezeDynamoDBService(
67+
self.dynamoDBService = BreezeDynamoDBService(
6768
config: config,
6869
httpConfig: httpConfig,
6970
logger: logger
7071
)
71-
let breezeLambdaService = BreezeLambdaService<T>(
72-
dynamoDBService: dynamoDBService,
73-
operation: operation,
74-
logger: logger
75-
)
72+
let dbManager = dynamoDBService.dbManager
73+
let breezeApi = BreezeLambdaHandler<T>(dbManager: dbManager, operation: operation)
74+
let runtime = LambdaRuntime(body: breezeApi.handle)
7675
self.serviceGroup = ServiceGroup(
77-
services: [breezeLambdaService],
78-
gracefulShutdownSignals: [.sigterm, .sigint],
76+
services: [runtime, dynamoDBService],
77+
gracefulShutdownSignals: [.sigint],
78+
cancellationSignals: [.sigterm],
7979
logger: logger
8080
)
8181
} catch {
@@ -90,7 +90,12 @@ public actor BreezeLambdaAPI<T: BreezeCodable>: Service {
9090
/// The internal ServiceGroup will handle the lifecycle of the BreezeLambdaAPI, including starting and stopping the service gracefully.
9191
public func run() async throws {
9292
logger.info("Starting BreezeLambdaAPI...")
93-
try await serviceGroup.run()
93+
do {
94+
try await serviceGroup.run()
95+
} catch {
96+
try dynamoDBService.syncShutdown()
97+
throw error
98+
}
9499
logger.info("BreezeLambdaAPI is stopped successfully")
95100
}
96101
}

Sources/BreezeLambdaAPI/BreezeLambdaService.swift

Lines changed: 0 additions & 126 deletions
This file was deleted.

Tests/BreezeDynamoDBServiceTests/BreezeDynamoDBServiceTests.swift

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,19 @@ struct BreezeDynamoDBServiceTests {
2323
@Test
2424
func testInitPrepareBreezeDynamoDBManager() async throws {
2525
let sut = await makeBreezeDynamoDBConfig()
26-
let manager = await sut.dbManager()
26+
let manager =
27+
sut.dbManager
2728
#expect(manager is BreezeDynamoDBManager, "Expected BreezeDynamoDBManager instance")
28-
try await sut.gracefulShutdown()
29+
try await sut.onGracefulShutdown()
2930
}
3031

3132
@Test
3233
func testGracefulShutdownCanBeCalledMultipleTimes() async throws {
3334
let sut = await makeBreezeDynamoDBConfig()
34-
try await sut.gracefulShutdown()
35-
try await sut.gracefulShutdown()
35+
try await sut.onGracefulShutdown()
36+
await #expect(throws: Error.self) {
37+
try await sut.onGracefulShutdown()
38+
}
3639
}
3740

3841
@Test
@@ -44,15 +47,15 @@ struct BreezeDynamoDBServiceTests {
4447
)
4548
let logger = Logger(label: "BreezeDynamoDBServiceTests")
4649
let httpConfig = BreezeHTTPClientConfig(timeout: .seconds(10), logger: logger)
47-
let sut = await BreezeDynamoDBService(
50+
let sut = BreezeDynamoDBService(
4851
config: config,
4952
httpConfig: httpConfig,
5053
logger: logger,
5154
DBManagingType: BreezeDynamoDBManagerMock.self
5255
)
53-
let manager = await sut.dbManager()
56+
let manager = sut.dbManager
5457
#expect(manager is BreezeDynamoDBManagerMock, "Expected BreezeDynamoDBManager instance")
55-
try await sut.gracefulShutdown()
58+
try await sut.onGracefulShutdown()
5659
}
5760

5861
private func makeBreezeDynamoDBConfig() async -> BreezeDynamoDBService {
@@ -63,7 +66,7 @@ struct BreezeDynamoDBServiceTests {
6366
)
6467
let logger = Logger(label: "BreezeDynamoDBServiceTests")
6568
let httpConfig = BreezeHTTPClientConfig(timeout: .seconds(10), logger: logger)
66-
return await BreezeDynamoDBService(
69+
return BreezeDynamoDBService(
6770
config: config,
6871
httpConfig: httpConfig,
6972
logger: logger,

Tests/BreezeLambdaAPITests/BreezeLambdaAPIServiceTests.swift renamed to Tests/BreezeLambdaAPITests/BreezeLambdaAPITests.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ struct APIConfiguration: APIConfiguring {
3131
}
3232

3333
@Suite
34-
struct BreezeLambdaAPIServiceTests {
34+
struct BreezeLambdaAPITests {
3535

3636
let logger = Logger(label: "BreezeHTTPClientServiceTests")
3737

3838
@Test
39-
func test_breezeLambdaAPIService_whenValidEnvironment() async throws {
39+
func test_breezeLambdaAPI_whenValidEnvironment() async throws {
4040
try await testGracefulShutdown { gracefulShutdownTestTrigger in
4141

4242
let (gracefulStream, continuation) = AsyncStream<Void>.makeStream()
@@ -49,8 +49,12 @@ struct BreezeLambdaAPIServiceTests {
4949
}
5050
group.addTask {
5151
try await withGracefulShutdownHandler {
52-
try await sut.run()
53-
print("BreezeLambdaAPIService started successfully")
52+
do {
53+
try await sut.run()
54+
print("BreezeLambdaAPIService started successfully")
55+
} catch {
56+
57+
}
5458
} onGracefulShutdown: {
5559
logger.info("On Graceful Shutdown")
5660
continuation.yield()
@@ -66,7 +70,7 @@ struct BreezeLambdaAPIServiceTests {
6670
}
6771

6872
@Test
69-
func test_breezeLambdaAPIService_whenInvalidEnvironment() async throws {
73+
func test_breezeLambdaAPI_whenInvalidEnvironment() async throws {
7074
await #expect(throws: BreezeLambdaAPIError.self) {
7175
try await testGracefulShutdown { gracefulShutdownTestTrigger in
7276
try await withThrowingTaskGroup(of: Void.self) { group in

0 commit comments

Comments
 (0)