Files
fission-src/doc/thinking/2026-04-26-namespace-manager-step6.md
T

1.4 KiB
Raw Blame History

2026-04-26 — NamespaceManager rewrite, step 6

Цель шага

Закрыть race-surface в router вокруг динамического добавления namespace informer-ов.

Проблема

В router есть два связанных mutable map:

  • HTTPTriggerSet.triggerInformer
  • HTTPTriggerSet.funcInformer

AddNamespace() пишет в них на лету, а updateRouter() одновременно итерируется по ним. Кроме того, functionReferenceResolver получает funcInformer map и читает ее без синхронизации.

Это делает dynamic onboarding потенциальным источником:

  • concurrent map iteration and map write;
  • чтения неполного снимка informer-ов;
  • гонок между router rebuild и resolver lookup.

Исправление

  1. В HTTPTriggerSet добавляется RWMutex для informer maps.
  2. Чтение informer-ов переводится на snapshot helpers.
  3. functionReferenceResolver получает собственный lock и метод addInformer().
  4. router.AddNamespace() обновляет router map и resolver map под контролируемым доступом.

Что НЕ меняем

  • не переписываем router lifecycle целиком;
  • не добавляем remove semantics;
  • не меняем trigger/function business logic.