OxL Справочник OxL
РусскийEnglish

14.2 Динамическая конфигурация

oxl
dynamic Limits {
  rps: u32 = DEFAULT_RPS
  newSearch: Flag = Flag.off
}

let l = Limits.get()
if current > l.rps.get() { throttle() }
for await v in l.rps.changes() { limiter.set(v) }
if l.newSearch.on(for: ctx.caller) { newSearch(q) } else { oldSearch(q) }
  • dynamic Имя { … } — значения хранятся в координаторе, реплицируются на все узлы и меняются без перезапуска.
  • Limits.get() возвращает живой дескриптор: .get() — текущее значение, .changes() — stream<T>.
  • Иерархия переопределений: глобально → роль → зона → узел → tenant принципала. Побеждает самое узкое.
  • Каждое изменение проверяется типом (включая уточнения), версионируется и может быть откачено.
  • Flag — флаг с правилами: процент, разбиение by: .User | .Node | .Tenant, списки разрешённых. on(for: p) детерминирован для одного принципала.
  • Изменение: oxl config set, веб-интерфейс или Limits.set(…) в коде; все пути проверяются политикой policy Limits { allow set if … }.

Определяется реализацией. Динамическая конфигурация (D-8056; DIV-033; D-5203). Эта реализация хранит историю в 40 последних изменений на поле; страницы динамической конфигурации в веб-интерфейсе oxl inspect нет (есть команды oxl config get|set|history|rollback); oxl config без --cluster не поддерживается.

См. также

Исходник: docs/spec/oxl-standard.md