Skip to content

[Proposal] Add gateway_settings table to enable real-time gateway toggles #784

@felicity3786

Description

@felicity3786

Problem statement

Developers sometimes need to quickly change routing behavior in production without a deploy (e.g., temporarily ignore health checks to re-route traffic during an incident). Today, the gateway computes health and routability automatically; there is no supported way to override it in real time across all gateway instances.

Example and practical use case at Linkedin:

  • Temporarily disable health-based routing decisions (global “kill switch”).
  • Adjust health thresholds (e.g., required healthy worker percentage) at runtime.
  • A path to support future feature toggles (e.g., choose routing manager implementation, rule-engine mode) without adding bespoke config flags or redeploying.

Goals

  • Provide a minimal, generic runtime settings table shared by all gateway instances.
  • Expose a small admin API + simple UI toggle for oncall.
  • Safe by default: reads are cached, writes are audited, and feature flags have clear defaults.
  • Backward compatible: if the Settings table is absent, gateway behaves exactly as today.

We can add a new gateway_settings table which might look like

CREATE TABLE IF NOT EXISTS gateway_settings (
  setting_key   VARCHAR(128)  NOT NULL PRIMARY KEY,
  setting_value VARCHAR(1024) NOT NULL,
  scope_type    ENUM('GLOBAL','ROUTING_GROUP','CLUSTER') DEFAULT 'GLOBAL',
  scope_id      VARCHAR(128)  NULL,
  updated_at    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  updated_by    VARCHAR(128)  NOT NULL
);

And provide some API for admin to update like:

GET  /v1/admin/settings
    → 200 { "health.monitor.enabled":"true", "health.required.minHealthyWorkerPercent":"80" }

Also add some associated facilitated UX feature.

cc @xkrogen

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions