From 6fe88aabb314f94a046014c68450515da06135f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 27 May 2026 22:35:31 +0200 Subject: [PATCH 1/3] fix(backend-test-utils): increase MySQL connect and pool timeouts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mysql2 driver defaults to a 10-second connect timeout, which is too short when many test suites share a single MySQL container under CI load. Increase the connect timeout to 30 seconds and add pool acquire/create timeouts of 30 seconds to reduce flaky ETIMEDOUT failures. Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: Fredrik Adelöw --- packages/backend-test-utils/src/database/mysql.ts | 1 + packages/backend-test-utils/src/database/types.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/backend-test-utils/src/database/mysql.ts b/packages/backend-test-utils/src/database/mysql.ts index b4d677bd1f..b3098a58b0 100644 --- a/packages/backend-test-utils/src/database/mysql.ts +++ b/packages/backend-test-utils/src/database/mysql.ts @@ -176,6 +176,7 @@ export class MysqlEngine implements Engine { connection: { ...this.#connection, database: databaseName, + connectTimeout: 30_000, }, ...LARGER_POOL_CONFIG, }); diff --git a/packages/backend-test-utils/src/database/types.ts b/packages/backend-test-utils/src/database/types.ts index 30e7e2f905..4bfaadcee0 100644 --- a/packages/backend-test-utils/src/database/types.ts +++ b/packages/backend-test-utils/src/database/types.ts @@ -129,5 +129,7 @@ export const LARGER_POOL_CONFIG = { pool: { min: 0, max: 50, + acquireTimeoutMillis: 30_000, + createTimeoutMillis: 30_000, }, }; From 2a85164e4928a86592d72283114a36b3407add8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 27 May 2026 22:36:57 +0200 Subject: [PATCH 2/3] Use cheaper auth plugin and skip binlog for test MySQL containers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch the dockerized MySQL container to mysql_native_password (single challenge-response) instead of the default caching_sha2_password (extra RSA key exchange round-trip on non-TLS connections). Also disable binary logging since tests don't need replication. Both reduce per-connection overhead. Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: Fredrik Adelöw --- packages/backend-test-utils/src/database/mysql.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/backend-test-utils/src/database/mysql.ts b/packages/backend-test-utils/src/database/mysql.ts index b3098a58b0..4e4396adb9 100644 --- a/packages/backend-test-utils/src/database/mysql.ts +++ b/packages/backend-test-utils/src/database/mysql.ts @@ -56,6 +56,10 @@ export async function startMysqlContainer(image: string): Promise<{ .withExposedPorts(3306) .withEnvironment({ MYSQL_ROOT_PASSWORD: password }) .withTmpFs({ '/var/lib/mysql': 'rw' }) + .withCommand([ + '--default-authentication-plugin=mysql_native_password', + '--skip-log-bin', + ]) .start(); const host = container.getHost(); From 2d181c035d35888e86e77fa526e24f031323b658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 27 May 2026 22:37:22 +0200 Subject: [PATCH 3/3] Add changeset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: Fredrik Adelöw --- .changeset/mysql-test-timeout.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/mysql-test-timeout.md diff --git a/.changeset/mysql-test-timeout.md b/.changeset/mysql-test-timeout.md new file mode 100644 index 0000000000..f54e1b349e --- /dev/null +++ b/.changeset/mysql-test-timeout.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +Increased MySQL connection and pool timeouts to reduce flaky `connect ETIMEDOUT` failures in CI. The test MySQL container now also uses `mysql_native_password` for cheaper connection handshakes and disables binary logging.