Michael Litvak
55f4a2b754
migration_listener: fix deadlock in nested notifications
...
When calling a migration notification from the context of a notification
callback, this could lead to a deadlock with unregistering a listener:
A: the parent notification is called. it calls thread_for_each, where it
acquires a read lock on the vector of listeners, and calls the
callback function for each listener while holding the lock.
B: a listener is unregistered. it calls `remove` and tries to acquire a
write lock on the vector of listeners. it waits because the lock is
held.
A: the callback function calls another notification and calls
thread_for_each which tries to acquire the read lock again. but it
waits since there is a waiter.
Currently we have such concrete scenario when creating a table, where
the callback of `before_create_column_family` in the tablet allocator
calls `before_allocate_tablet_map`, and this could deadlock with node
shutdown where we unregister listeners.
Fix this by not acquiring the read lock again in the nested
notification. There is no need because the read lock is already held by
the parent notification while the child notification is running. We add
a function `thread_for_each_nested` that is similar to `thread_for_each`
except it assumes the read lock is already held and doesn't acquire it,
and it should be used for nested notifications instead of
`thread_for_each`.
Fixes scylladb/scylladb#27364
Closes scylladb/scylladb#27637
2025-12-17 14:00:28 +01:00
..
2024-12-18 17:45:13 +02:00
2025-10-06 16:25:35 +03:00
2025-12-02 15:08:49 +02:00
2025-08-31 11:37:39 +03:00
2025-04-28 12:30:13 +02:00
2025-10-13 08:53:25 +00:00
2025-12-09 19:27:21 +01:00
2025-12-07 14:14:25 +02:00
2025-07-15 23:29:21 +02:00
2025-07-15 23:29:21 +02:00
2025-05-29 13:05:08 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-12-17 14:00:28 +01:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-09-01 08:57:50 +03:00
2025-07-16 17:14:08 +03:00
2025-06-26 15:29:28 +03:00
2025-01-14 07:56:39 -05:00
2025-09-07 00:30:15 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-09-29 13:01:21 +02:00
2025-09-29 13:01:21 +02:00
2024-12-18 17:45:13 +02:00
2025-02-26 23:17:27 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-08-05 08:23:35 +03:00
2024-12-18 17:45:13 +02:00
2025-12-07 14:14:25 +02:00
2025-03-06 10:22:05 +02:00
2025-07-29 13:43:17 +08:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-12-10 15:36:18 +01:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-09-01 14:58:32 +03:00
2025-02-25 10:32:32 +03:00
2025-02-25 10:32:32 +03:00
2025-10-06 15:33:11 +03:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-07-08 10:38:23 +03:00
2024-12-18 17:45:13 +02:00
2025-12-10 15:36:18 +01:00
2025-12-10 15:36:18 +01:00
2025-01-14 07:56:39 -05:00
2024-10-21 11:21:52 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-12-12 18:10:20 +01:00
2025-01-14 07:56:39 -05:00
2025-08-28 18:06:37 +02:00
2025-08-28 18:06:37 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-02-26 23:17:27 +02:00
2025-01-07 13:22:00 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-12-15 15:05:19 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-06-26 12:25:38 +02:00
2025-03-26 11:15:13 +01:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-04-12 11:47:02 +03:00
2025-07-03 13:34:04 +03:00
2025-08-28 23:31:36 +02:00
2025-01-09 11:14:49 +02:00
2024-12-18 17:45:13 +02:00
2025-04-01 00:07:28 +02:00
2025-04-01 00:07:28 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-12-04 11:38:41 +00:00
2025-09-01 18:03:44 +00:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-09-29 13:01:21 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-09-24 13:57:21 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-10-22 01:51:43 +03:00
2025-10-13 08:53:25 +00:00
2025-03-03 16:58:38 +02:00
2025-09-01 14:58:21 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-11-20 07:29:47 +03:00
2025-10-28 15:20:20 +02:00
2025-04-30 16:43:22 +03:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-12-07 14:14:25 +02:00
2025-12-07 14:14:25 +02:00
2025-09-28 04:27:33 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-07-29 23:51:43 +03:00
2024-12-18 17:45:13 +02:00
2025-06-30 19:12:08 +02:00
2025-04-28 12:30:13 +02:00
2025-07-21 11:56:40 +03:00
2024-12-18 17:45:13 +02:00
2025-10-17 10:26:50 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-09-29 04:10:40 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-08-01 02:15:04 +03:00
2025-08-01 02:15:04 +03:00
2025-03-06 12:17:32 +01:00
2024-12-18 17:45:13 +02:00
2025-04-12 11:47:00 +03:00
2025-04-12 11:47:00 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-23 23:37:02 +01:00
2025-11-19 15:21:02 +01:00
2024-12-23 23:37:02 +01:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-07-03 13:34:04 +03:00
2025-08-28 23:31:04 +02:00
2025-07-17 16:40:02 +02:00
2025-12-11 11:17:01 +02:00
2025-12-09 19:27:21 +01:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-08-01 02:15:04 +03:00
2025-10-13 08:53:24 +00:00
2024-12-18 17:45:13 +02:00
2025-07-08 16:29:55 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-07-03 13:34:04 +03:00
2025-02-26 23:23:53 +02:00
2025-11-20 07:16:16 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-08-05 08:23:35 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-21 16:24:45 +08:00
2024-12-18 17:45:13 +02:00
2025-06-23 17:54:01 +02:00
2025-10-13 08:53:25 +00:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-11-21 12:27:41 +02:00
2025-11-20 10:27:29 +02:00
2025-07-23 15:36:45 +02:00
2025-07-23 15:36:45 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00