Martin Vogel
6bd11ffb58
fix(cypher): add a wall-clock execution deadline to abort runaway queries
...
An unbounded whole-graph OPTIONAL MATCH or a GROUP BY that produces roughly one
group per node does O(bindings x groups) work in execute_return_agg and can run
for minutes on a large graph before emitting a single row. The 100k row ceiling
never fires (no rows are produced), so query_graph just hangs with no partial
result and no error (#601 ).
Arm a monotonic wall-clock budget (default 30s) at query entry and check it
(throttled, every 1024 iterations) in the scan, relationship-expansion and
aggregation hot loops. On expiry the query aborts with a clear, actionable error
instead of hanging. A thread-local test hook forces the budget so the guard is
covered by a deterministic reproduce-first test; a companion test confirms the
default budget does not false-positive on a normal query.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com >
2026-07-16 03:09:27 +02:00
..
2026-07-10 09:12:40 +00:00
2026-07-12 17:39:03 +02:00
2026-07-12 19:57:47 +02:00
2026-06-05 21:53:25 +02:00
2026-06-05 21:53:25 +02:00
2026-07-13 01:50:03 +02:00
2026-03-15 22:37:34 +01:00
2026-07-13 05:21:55 +02:00
2026-07-13 01:50:03 +02:00
2026-05-30 18:26:44 +02:00
2026-07-11 03:28:32 +02:00
2026-06-29 09:45:28 -06:00
2026-07-06 16:39:25 +02:00
2026-07-14 19:08:54 +02:00
2026-07-13 01:50:02 +02:00
2026-07-14 21:13:52 +02:00
2026-07-13 02:00:32 +02:00
2026-07-14 21:13:52 +02:00
2026-04-01 23:22:44 +02:00
2026-06-07 18:29:05 +02:00
2026-06-06 22:16:04 +02:00
2026-06-05 21:53:25 +02:00
2026-05-19 22:47:53 +02:00
2026-07-16 03:09:27 +02:00
2026-07-03 19:25:00 +02:00
2026-06-23 06:38:45 +09:00
2026-06-23 06:38:45 +09:00
2026-03-25 09:28:11 +01:00
2026-07-10 09:12:40 +00:00
2026-06-07 13:00:55 +02:00
2026-07-15 23:43:52 +02:00
2026-06-07 12:35:53 +02:00
2026-06-08 22:55:23 +02:00
2026-07-16 02:16:11 +02:00
2026-07-01 21:23:12 +02:00
2026-06-05 21:53:25 +02:00
2026-07-02 00:37:52 +02:00
2026-06-22 23:51:49 +02:00
2026-03-15 22:37:34 +01:00
2026-06-05 21:53:25 +02:00
2026-07-08 00:05:19 +05:30
2026-06-07 19:13:01 +02:00
2026-06-07 19:13:01 +02:00
2026-06-07 19:13:01 +02:00
2026-06-27 16:23:26 +02:00
2026-06-07 20:05:24 +02:00
2026-06-07 20:05:24 +02:00
2026-06-27 16:23:26 +02:00
2026-07-08 00:05:19 +05:30
2026-07-03 20:16:39 +02:00
2026-05-21 22:52:16 +02:00
2026-07-13 04:17:58 +02:00
2026-07-07 21:57:25 +02:00
2026-07-12 15:06:53 +02:00
2026-07-09 23:22:34 +02:00
2026-06-22 22:04:31 +02:00
2026-06-22 22:05:18 +02:00
2026-06-02 18:52:37 +02:00
2026-06-02 18:52:37 +02:00
2026-06-03 01:33:25 +02:00
2026-07-12 20:28:34 -03:00
2026-07-08 00:05:19 +05:30
2026-06-28 13:05:05 +02:00
2026-07-04 14:34:26 +09:00
2026-03-15 22:37:34 +01:00
2026-07-16 01:41:52 +02:00
2026-06-08 22:55:23 +02:00
2026-06-07 18:29:05 +02:00
2026-07-16 02:01:41 +02:00
2026-07-08 06:03:54 -04:00
2026-06-12 02:17:39 +02:00
2026-07-09 14:09:39 -05:00
2026-07-02 21:43:07 +03:00
2026-07-08 19:13:25 +02:00
2026-07-03 19:57:01 +02:00
2026-07-09 14:09:39 -05:00
2026-07-09 22:32:26 +02:00
2026-07-13 02:00:32 +02:00
2026-05-30 20:15:30 +02:00
2026-06-05 21:53:25 +02:00
2026-05-09 15:44:09 +02:00
2026-05-09 14:16:15 +02:00
2026-07-06 15:58:18 +02:00
2026-07-10 21:07:11 +02:00
2026-06-23 13:52:08 -03:00
2026-07-06 18:32:50 +02:00
2026-05-08 22:26:56 +02:00
2026-06-24 03:15:36 +02:00
2026-07-13 04:17:58 +02:00
2026-07-06 21:52:37 +02:00
2026-07-06 19:32:03 +02:00
2026-06-28 21:57:35 -06:00
2026-07-13 11:43:00 +03:00
2026-07-10 07:58:04 -05:00
2026-06-24 12:54:45 +00:00
2026-03-20 20:32:38 +01:00
2026-07-11 02:40:54 +02:00
2026-07-03 20:16:39 +02:00
2026-07-13 02:00:32 +02:00
2026-07-11 03:13:45 +02:00
2026-07-13 01:48:29 +02:00
2026-03-24 23:48:23 +01:00
2026-06-24 20:33:52 +05:30
2026-07-05 17:42:17 +02:00
2026-03-24 23:48:23 +01:00
2026-06-12 10:51:11 +02:00
2026-06-10 12:11:02 +02:00
2026-07-07 23:09:05 +02:00
2026-04-06 14:34:07 +02:00
2026-06-05 21:53:25 +02:00
2026-07-12 13:34:42 +02:00
2026-06-06 19:48:48 +02:00
2026-07-04 14:38:25 +02:00
2026-03-24 23:48:23 +01:00
2026-04-15 23:56:03 +02:00