1.4 KiB
1.4 KiB
2026-04-26 — NamespaceManager rewrite, step 6
Цель шага
Закрыть race-surface в router вокруг динамического добавления namespace informer-ов.
Проблема
В router есть два связанных mutable map:
HTTPTriggerSet.triggerInformerHTTPTriggerSet.funcInformer
AddNamespace() пишет в них на лету, а updateRouter() одновременно итерируется по ним.
Кроме того, functionReferenceResolver получает funcInformer map и читает ее без синхронизации.
Это делает dynamic onboarding потенциальным источником:
concurrent map iteration and map write;- чтения неполного снимка informer-ов;
- гонок между router rebuild и resolver lookup.
Исправление
- В
HTTPTriggerSetдобавляетсяRWMutexдля informer maps. - Чтение informer-ов переводится на snapshot helpers.
functionReferenceResolverполучает собственный lock и методaddInformer().router.AddNamespace()обновляет router map и resolver map под контролируемым доступом.
Что НЕ меняем
- не переписываем router lifecycle целиком;
- не добавляем remove semantics;
- не меняем trigger/function business logic.