OxL Reference

14.2 Dynamic configuration

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 Name { … } — values are stored in the coordinator, replicated to all nodes and changed without restart.
  • Limits.get() returns a live handle: .get() is the current value, .changes() a stream<T>.
  • Override hierarchy: global → role → zone → node → the principal's tenant. The narrowest wins.
  • Every change is type-checked (including refinements), versioned and can be rolled back.
  • Flag is a flag with rules: percentage, splitting by: .User | .Node | .Tenant, allow lists. on(for: p) is deterministic for one principal.
  • A change: oxl config set, the web interface or Limits.set(…) in code; all paths are checked by the policy policy Limits { allow set if … }.

Implementation-defined. Dynamic configuration (D-8056; DIV-033; D-5203). This implementation keeps a history of the last 40 changes per field; there is no dynamic-configuration page in the web interface oxl inspect (the commands oxl config get|set|history|rollback exist); oxl config without --cluster is not supported.

See also

Source: docs/spec/oxl-standard.en.md