xthezealot
d422f7103e
fix(backup): don't hang forever on locked SQLite sources
...
hermes backup freezes mid-archive when a .db file under HERMES_HOME is
locked by another process — e.g. a live Chromium profile database held
with an exclusive lock by a running browser. sqlite3.Connection.backup()
retries SQLITE_BUSY indefinitely and never honors the connection's busy
timeout, while a plain statement on the same source fails cleanly after
~5s with "database is locked".
Fixes:
- Probe the source with a cheap read before snapshotting, so a locked
database fails fast instead of hanging the whole backup.
- Add a watchdog that interrupts the source connection after 15 minutes
as a last resort for pathological cases.
- Exclude browser-profiles/ from full backups: the CDP browser profile is
live, regenerable (cache + re-login), and unsafe to snapshot while
running. On a real install this cut the backup from 28,396 files /
1.1 GB to ~4,000 files / 548 MB, completing in ~33s instead of hanging.
The pre-update automatic backup shares this code path and was equally
at risk.
Adds a regression test that holds an EXCLUSIVE transaction in a separate
process and asserts _safe_copy_db returns False in bounded time.
2026-08-21 14:39:02 -07:00
..
2026-08-18 14:26:16 -07:00
2026-08-08 04:19:49 -07:00
2026-08-21 13:19:07 -07:00
2026-08-20 11:46:30 -05:00
2026-08-20 04:54:54 -07:00
2026-08-09 22:09:49 -04:00
2026-07-29 13:39:40 -07:00
2026-08-21 12:48:53 -07:00
2026-07-29 13:39:40 -07:00
2026-08-01 10:52:34 -07:00
2026-07-28 08:25:25 -07:00
2026-08-15 13:35:32 -07:00
2026-08-21 22:54:04 +05:30
2026-08-21 14:39:02 -07:00
2026-08-16 06:38:38 -07:00
2026-08-13 23:43:15 +05:30
2026-08-04 17:36:26 -04:00
2026-08-08 18:11:02 -07:00
2026-08-03 20:35:47 +05:30
2026-08-21 03:04:06 -07:00
2026-08-19 22:14:56 -05:00
2026-08-20 19:56:01 -07:00
2026-08-21 17:24:22 +05:30
2026-08-13 02:38:28 -07:00
2026-08-12 19:13:32 -07:00
2026-08-19 12:41:45 -05:00
2026-08-17 17:20:06 -07:00
2026-08-08 12:33:19 -07:00
2026-08-21 22:33:45 +05:30
2026-08-21 06:02:19 +00:00
2026-08-07 10:11:05 -07:00
2026-08-19 12:41:45 -05:00
2026-08-19 01:19:28 -07:00
2026-08-12 17:25:30 -05:00
2026-08-06 05:00:17 +05:30
2026-08-13 22:44:23 +05:30
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-08-01 15:05:05 +05:30
2026-08-16 01:50:20 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-08-02 00:11:50 -07:00
2026-08-15 23:37:22 -07:00
2026-07-29 13:10:23 -07:00
2026-08-17 16:34:02 -07:00
2026-07-29 15:12:28 -07:00
2026-08-20 04:54:14 -07:00
2026-08-20 12:41:17 -05:00
2026-08-20 19:56:28 -07:00
2026-08-20 12:41:17 -05:00
2026-08-14 15:41:38 -05:00
2026-08-03 17:19:49 -07:00
2026-07-29 13:10:23 -07:00
2026-08-14 21:48:14 -07:00
2026-07-29 13:10:23 -07:00
2026-08-02 00:11:50 -07:00
2026-08-08 05:21:09 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-08-03 20:30:32 +05:30
2026-07-29 13:10:23 -07:00
2026-08-12 19:13:32 -07:00
2026-08-16 06:29:53 -07:00
2026-08-09 22:09:49 -04:00
2026-08-15 00:36:03 -07:00
2026-07-29 13:10:23 -07:00
2026-08-09 22:09:49 -04:00
2026-08-15 23:37:22 -07:00
2026-08-09 22:09:49 -04:00
2026-07-29 13:10:23 -07:00
2026-07-29 18:13:09 -07:00
2026-08-16 19:53:07 -07:00
2026-07-29 18:55:10 -07:00
2026-08-13 23:43:15 +05:30
2026-08-13 23:43:15 +05:30
2026-07-29 17:35:16 -05:00
2026-08-13 02:38:28 -07:00
2026-08-14 21:35:30 -07:00
2026-08-14 22:33:58 -07:00
2026-08-08 19:46:35 -07:00
2026-08-14 21:58:09 -07:00
2026-08-14 21:58:09 -07:00
2026-08-14 21:58:09 -07:00
2026-08-16 11:34:40 -07:00
2026-07-31 22:39:11 -07:00
2026-08-13 02:38:28 -07:00
2026-08-13 18:39:54 +00:00
2026-08-13 18:39:54 +00:00
2026-08-14 21:58:09 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 18:13:09 -07:00
2026-08-17 02:40:59 -07:00
2026-08-15 01:55:22 -07:00
2026-07-29 13:10:23 -07:00
2026-08-07 19:44:35 +05:30
2026-07-29 13:10:23 -07:00
2026-07-29 21:30:53 -07:00
2026-07-29 19:53:17 -07:00
2026-08-11 17:06:15 -05:00
2026-08-16 23:26:10 -07:00
2026-07-30 00:08:28 -05:00
2026-07-29 13:10:23 -07:00
2026-08-03 17:38:13 +05:30
2026-08-14 21:36:41 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 15:12:28 -07:00
2026-07-31 07:18:02 -07:00
2026-07-31 22:35:16 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-08-09 22:09:49 -04:00
2026-08-20 11:37:01 +05:30
2026-08-14 21:45:08 -07:00
2026-08-14 21:50:48 -07:00
2026-08-13 11:49:14 -07:00
2026-08-17 15:12:53 -05:00
2026-07-29 13:10:23 -07:00
2026-08-17 16:39:47 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 19:48:37 -07:00
2026-08-14 13:51:26 -07:00
2026-08-14 13:51:26 -07:00
2026-08-12 18:55:14 -07:00
2026-08-10 17:02:56 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 21:30:53 -07:00
2026-08-08 12:33:19 -07:00
2026-07-29 13:10:23 -07:00
2026-08-07 00:41:58 -04:00
2026-08-02 10:04:48 -07:00
2026-08-16 20:43:13 -07:00
2026-08-10 17:02:56 -07:00
2026-08-10 17:02:56 -07:00
2026-08-21 21:53:11 +05:30
2026-08-03 20:37:17 +05:30
2026-08-02 21:32:13 +05:30
2026-07-31 23:18:12 -07:00
2026-08-06 07:49:42 -07:00
2026-08-04 11:26:15 +05:30
2026-08-12 19:43:29 -07:00
2026-08-12 19:43:41 -07:00
2026-08-15 02:22:58 -07:00
2026-08-08 14:18:26 +05:30
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-08-15 00:36:03 -07:00
2026-07-29 13:10:23 -07:00
2026-08-13 09:36:02 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-08-07 09:44:21 -07:00
2026-07-29 13:10:23 -07:00
2026-08-16 06:26:37 -07:00
2026-08-06 23:08:23 -05:00
2026-08-21 21:53:11 +05:30
2026-07-29 13:10:23 -07:00
2026-08-06 19:35:47 -06:00
2026-08-09 13:43:14 -07:00
2026-07-28 11:57:37 -07:00
2026-08-12 20:02:07 -07:00
2026-08-02 21:30:54 +05:30
2026-08-02 23:10:28 +05:30
2026-08-14 12:02:05 -04:00
2026-08-13 02:38:28 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00
2026-07-29 13:10:23 -07:00