14.2 Динамическая конфигурация
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