Mathias Fredriksson
98d5e7948d
fix(coderd/autobuild): handle concurrent build number race in lifecycle executor ( #25824 )
...
The lifecycle executor did not handle unique-violation errors from
InsertWorkspaceBuild. When a concurrent actor (API handler, another
lifecycle executor, or prebuilds reconciler) inserts a workspace build
with the same build number, PostgreSQL returns a unique constraint
violation on workspace_builds_workspace_id_build_number_key. The
lifecycle executor treated this as a hard error, logging it and storing
it in stats.Errors.
The per-workspace advisory lock (pg_try_advisory_xact_lock) prevents
two lifecycle executors from racing, but does not protect against
races with the CreateWorkspaceBuild API handler or the prebuilds
reconciler, which use different (or no) locking.
Catch the specific unique-violation error after InTx returns (where
the transaction is already rolled back) and clear it. The concurrent
actor's build takes effect; the lifecycle executor treats the
workspace as a no-op for this tick.
Closes coder/internal#455
Closes PLAT-290
2026-05-29 17:12:31 +03:00
..
2026-05-11 08:41:17 -06:00
2026-05-25 18:04:12 +02:00
2026-05-29 12:01:37 +01:00
2026-05-29 12:01:37 +01:00
2026-03-16 12:36:26 -05:00
2026-05-29 10:08:25 -04:00
2026-03-02 16:02:01 +01:00
2026-05-20 17:33:26 +02:00
2026-05-29 17:12:31 +03:00
2026-05-14 11:45:21 -04:00
2026-02-06 09:52:17 -07:00
2026-03-13 00:22:55 +11:00
2026-05-22 13:55:21 +01:00
2026-04-03 15:47:26 -05:00
2026-01-08 15:24:11 +04:00
2026-05-29 10:08:25 -04:00
2026-02-19 09:02:19 +00:00
2026-05-21 09:19:29 -06:00
2026-01-29 13:50:15 +01:00
2026-05-26 15:35:22 -04:00
2026-01-08 15:24:11 +04:00
2026-01-08 15:24:11 +04:00
2026-04-28 13:06:45 -07:00
2026-05-22 20:10:25 +10:00
2026-05-20 13:09:11 -04:00
2026-03-05 20:29:49 +00:00
2026-03-19 21:51:26 +00:00
2026-04-22 12:34:17 +02:00
2026-01-08 15:24:11 +04:00
2026-05-19 14:53:13 +00:00
2026-05-22 20:24:38 +10:00
2025-10-15 17:37:37 +00:00
2026-03-18 09:30:22 -05:00
2026-04-02 23:51:02 +02:00
2026-05-11 14:27:40 -05:00
2026-01-30 13:30:06 +01:00
2026-05-27 14:30:11 -04:00
2025-10-23 15:38:49 -05:00
2026-05-27 11:58:43 +02:00
2026-05-29 12:50:39 +02:00
2025-07-08 14:31:05 +00:00
2026-02-19 09:02:19 +00:00
2026-05-25 16:31:48 +02:00
2026-05-07 17:10:50 +01:00
2026-05-11 09:07:30 -06:00
2026-05-21 09:19:29 -06:00
2026-05-11 08:41:17 -06:00
2026-01-08 15:24:11 +04:00
2026-03-18 09:30:22 -05:00
2026-05-22 13:36:53 +03:00
2026-04-26 14:49:10 -07:00
2026-05-22 13:55:21 +01:00
2026-05-21 11:30:36 -04:00
2026-04-15 19:53:10 +01:00
2026-05-21 09:19:29 -06:00
2026-03-13 20:37:41 -07:00
2026-05-29 13:14:04 +01:00
2026-03-12 18:07:52 +02:00
2026-05-29 13:14:55 +00:00
2026-05-29 13:14:55 +00:00
2026-05-27 11:58:43 +02:00
2026-05-25 16:31:48 +02:00
2026-05-27 16:16:05 +02:00
2026-05-25 18:04:12 +02:00
2026-05-26 08:04:26 +00:00
2025-11-17 13:24:12 +00:00
2026-03-23 09:52:34 +00:00
2026-05-05 02:54:03 +05:00
2025-09-26 11:56:34 +02:00
2026-04-01 09:54:59 -04:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-28 18:37:57 +01:00
2026-01-08 15:24:11 +04:00
2026-05-28 18:37:57 +01:00
2025-10-27 17:14:16 -06:00
2026-05-05 02:54:03 +05:00
2026-05-12 22:13:55 +10:00
2026-05-11 08:41:17 -06:00
2026-05-26 19:31:52 +00:00
2026-05-05 02:54:03 +05:00
2026-03-13 14:09:39 +00:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-20 10:46:35 +01:00
2026-05-20 10:46:35 +01:00
2026-04-21 11:36:20 +10:00
2026-05-27 13:20:36 +01:00
2026-05-27 13:20:36 +01:00
2026-05-05 02:54:03 +05:00
2026-05-11 16:23:07 +10:00
2026-01-12 18:19:19 -08:00
2026-05-05 02:54:03 +05:00
2026-03-23 19:54:43 +00:00
2026-05-05 02:54:03 +05:00
2025-12-15 11:26:41 -06:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-03-23 19:54:43 +00:00
2026-05-05 02:54:03 +05:00
2026-03-04 18:01:56 -08:00
2026-05-05 02:54:03 +05:00
2026-04-22 12:34:17 +02:00
2026-05-03 11:31:48 -04:00
2026-05-29 16:49:25 +10:00
2026-05-12 08:54:53 -04:00
2026-04-07 12:25:32 -06:00
2026-05-05 02:54:03 +05:00
2026-02-13 08:19:07 -06:00
2026-05-05 02:54:03 +05:00
2026-03-25 09:53:06 +00:00
2026-01-15 12:41:28 +03:00
2026-03-23 21:03:34 +00:00
2026-03-25 09:53:06 +00:00
2026-03-06 09:14:11 +00:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2025-07-15 14:55:34 +10:00
2025-07-15 14:55:34 +10:00
2026-05-21 09:19:29 -06:00
2026-05-21 09:19:29 -06:00
2026-02-19 09:02:19 +00:00
2026-05-05 02:54:03 +05:00
2025-08-21 16:03:34 -04:00
2026-05-05 02:54:03 +05:00
2026-04-10 09:50:11 -05:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2025-09-26 11:43:32 +02:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-11 08:41:17 -06:00
2026-05-19 09:47:03 -05:00
2026-05-22 20:24:38 +10:00
2026-05-11 12:43:52 -05:00
2026-05-11 12:43:52 -05:00
2026-05-11 12:43:52 -05:00
2026-04-23 06:20:35 +10:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-03-25 09:53:06 +00:00
2026-05-05 02:54:03 +05:00
2026-05-28 16:54:52 +01:00
2026-05-28 16:54:52 +01:00
2026-04-29 12:57:47 -06:00
2026-05-26 14:42:31 -06:00
2026-05-26 14:42:31 -06:00
2026-05-20 19:50:50 +02:00
2026-05-20 00:09:09 +02:00
2026-04-15 11:31:43 +02:00
2026-04-26 14:49:10 -07:00
2026-05-05 02:54:03 +05:00
2026-01-12 18:19:19 -08:00
2026-05-05 02:54:03 +05:00
2026-05-18 22:32:05 +01:00
2026-05-22 09:50:01 +02:00
2026-05-01 13:29:33 +01:00
2026-05-22 20:10:25 +10:00
2026-05-28 15:34:36 -05:00
2026-05-28 15:34:36 -05:00
2026-05-11 14:27:40 -05:00
2026-03-12 18:07:52 +02:00
2026-05-11 14:27:40 -05:00
2026-05-05 02:54:03 +05:00
2026-02-03 09:45:23 +00:00
2026-05-21 09:19:29 -06:00
2026-05-05 02:54:03 +05:00
2026-05-18 08:33:29 -04:00
2026-05-13 14:14:07 +00:00
2026-05-11 11:03:38 +02:00
2026-05-11 12:43:52 -05:00
2026-05-21 09:19:29 -06:00
2026-01-08 15:24:11 +04:00