From 8f9a39da86bec5d600c89f816008952a93b90f44 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Tue, 29 Aug 2023 13:17:59 +0200 Subject: [PATCH] Add Repro fro #405 --- Package.swift | 11 +++++++++ Sources/Repro/Repro.swift | 51 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 Sources/Repro/Repro.swift diff --git a/Package.swift b/Package.swift index a45925ed..90c247a3 100644 --- a/Package.swift +++ b/Package.swift @@ -20,6 +20,7 @@ let package = Package( .package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0"), .package(url: "https://github.com/apple/swift-metrics.git", from: "2.0.0"), .package(url: "https://github.com/apple/swift-log.git", from: "1.5.2"), + .package(url: "https://github.com/swift-server/swift-backtrace.git", from: "1.3.3"), ], targets: [ .target( @@ -53,5 +54,15 @@ let package = Package( .product(name: "NIOTestUtils", package: "swift-nio"), ] ), + .executableTarget( + name: "Repro", + dependencies: [ + .target(name: "PostgresNIO"), + .product(name: "NIOCore", package: "swift-nio"), + .product(name: "NIOPosix", package: "swift-nio"), + .product(name: "Logging", package: "swift-log"), + .product(name: "Backtrace", package: "swift-backtrace"), + ] + ) ] ) diff --git a/Sources/Repro/Repro.swift b/Sources/Repro/Repro.swift new file mode 100644 index 00000000..a0bbb4aa --- /dev/null +++ b/Sources/Repro/Repro.swift @@ -0,0 +1,51 @@ +import PostgresNIO +import NIOCore +import Logging +import Backtrace + +@main +enum Repro { + static func main() async throws { + Backtrace.install() + + var mlogger = Logger(label: "psql") + mlogger.logLevel = .debug + let logger = mlogger + + let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) + defer { try? eventLoopGroup.syncShutdownGracefully() } + + do { + let connection = try await PostgresConnection.connect( + on: eventLoopGroup.next(), + configuration: .init( + host: "host.docker.internal", + username: "test_username", + password: "test_password", + database: "test_database", + tls: .disable + ), + id: 1, + logger: logger + ) + + for i in 0..<100 { + let rows = try await connection.query("SELECT \(i)", logger: logger) + for try await row in rows.decode(Int.self) { + logger.info("Row received: \(row)") + } + } + + try await connection.closeGracefully() + } catch { + logger.error("Error caught", metadata: ["error": "\(String(reflecting: error))"]) + exit(1) + } + + logger.info("Bye") + +// try await ContinuousClock().sleep(until: .now + .seconds(120)) + +// try await client.shutdown(graceful: false) + } +}