From fc893e1c7efdd4ff06b59c909f261c77410513fe Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Fri, 13 Feb 2026 03:17:48 +1300 Subject: [PATCH] fix: Add connect_timeout to PostgreSQL DSN and add server logs to CI PDO ATTR_TIMEOUT does not control connection timeout for the pgsql driver. Without connect_timeout in the DSN, the PDO constructor blocks indefinitely if PostgreSQL isn't ready, which blocks the Swoole master process event loop (since coroutine hooks are not enabled in http.php) and prevents all HTTP request dispatching. Also add appwrite server logs to CI failure output for debugging. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/tests.yml | 2 ++ app/init/registers.php | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0c510b3658..4103cb3c5e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -303,6 +303,8 @@ jobs: - name: Failure Logs if: failure() run: | + echo "=== Appwrite Server Logs ===" + docker compose logs appwrite echo "=== Appwrite Worker Builds Logs ===" docker compose logs appwrite-worker-builds echo "=== OpenRuntimes Executor Logs ===" diff --git a/app/init/registers.php b/app/init/registers.php index 2031d25571..411fd4c69d 100644 --- a/app/init/registers.php +++ b/app/init/registers.php @@ -292,7 +292,7 @@ $register->set('pools', function () { }, 'postgresql' => function () use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnDatabase) { return new PDOProxy(function () use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnDatabase) { - return new PDO("pgsql:host={$dsnHost};port={$dsnPort};dbname={$dsnDatabase}", $dsnUser, $dsnPass, array( + return new PDO("pgsql:host={$dsnHost};port={$dsnPort};dbname={$dsnDatabase};connect_timeout=3", $dsnUser, $dsnPass, array( \PDO::ATTR_TIMEOUT => 3, // Seconds \PDO::ATTR_PERSISTENT => false, \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, @@ -397,7 +397,7 @@ $register->set('db', function () { $dsn = "mysql:host={$dbHost};port={$dbPort};dbname={$dbSchema};charset=utf8mb4"; return new PDO($dsn, $dbUser, $dbPass, SQL::getPDOAttributes()); case 'postgresql': - $dsn = "pgsql:host={$dbHost};port={$dbPort};dbname={$dbSchema}"; + $dsn = "pgsql:host={$dbHost};port={$dbPort};dbname={$dbSchema};connect_timeout=3"; return new PDO($dsn, $dbUser, $dbPass, SQL::getPDOAttributes()); default: throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Invalid database adapter');