Skip to content

Reference: gRPC and CLI

Automation and operators map conduitctl subcommands onto gRPC services on the control listener. Connection, authentication, TLS, and command help: gRPC and conduitctl. Proto sources live under proto/conduit/v1/ in the repository (control.proto, config.proto, health.proto, pools.proto, and the other capability protos).

Service: ConduitControl

Document-centric RPCs (apply / export / reload / validate / …).

RPCRequestResponseNotes
GetConfigGetConfigRequest (empty)effective ConfigCurrent effective config
ValidateConfigconfig Configok, errors[]Structural validation only; does not read external paths
ApplyConfigoverlay, modeok, errors[], generation, notes[]See OverlayApplyMode and status fields
ExportConfigformatbodyformat must be yaml (or empty → yaml). JSON is not implemented.
ReloadFromFile(empty)ok, errors[], generation, notes[]Reload from disk
Health(empty)status (serving)Liveness
GetTracetxn_id (decimal string)found, events[]Pipeline trace when enabled
CheckAclip, optional listenerip, results[]Read-only ACL dry-run against the live snapshot; no metrics or denial logs

Mutating RPCs leave the prior runtime snapshot unchanged when ok is false.

Health is process liveness only

Health reports that the control plane is serving; it does not report upstream backend health. Per-backend health uses the separate BackendHealth service — see BackendHealth service below and Backend health.

Apply status fields

Successful ApplyConfig, ReloadFromFile, and mutating config-primitive responses include:

Field Meaning
generation Resulting configuration generation (correlates with conduit_config_generation); 0 when rejected
notes[] Extensible kind + message effect / pending-reconcile notes (proto3 additive). Empty notes are normal for fully hot applies; clients must tolerate unknown kinds

Service: BackendHealth

Proto source: proto/conduit/v1/health.proto. Operator commands: gRPC and conduitctl — health. Runtime control — does not rewrite effective config or appear in export.

RPCRequestResponseNotes
GetBackendHealthoptional filter (pool, backend)entries[]Per-backend observed/applied health, scope, eligibility, latency EWMA
SetHealthControlscope, actionresults[]Freeze, manual up/down, or resume automatic

BackendHealthEntry fields

Field Meaning
pool, backend Pool name and backend label (name or address)
observed, applied unknown, up, or down
scope_state Resolved scope: inherit, frozen, or automatic
eligible Whether Route would select this backend now
latency_ewma_ms Optional probe latency EWMA
last_transition_unix_ms Optional Unix ms of last health transition

SetHealthControl actions

Action Effect
freeze Freeze — stop probe-driven changes to applied at the scope
set_up / set_down Set applied and imply freeze (drain = set_down)
resume_automatic Unfreeze and snap applied := observed

scope.level: backend, pool, or global; optional pool and backend identify the target. backend may be the configured name or host:port address.

Config primitive services

Capability-oriented services for overlay-hot config. Mutating RPCs return the same ApplyConfigResponse shape (ok / errors / generation / notes). Document RPCs remain on ConduitControl.

ServiceProtoconduitctlRPCs (summary)
ConduitPoolspools.protopool, backendListPools, GetPool, SetBackendWeight, AddBackend, RemoveBackend
ConduitOrchestratororchestrator.protoorchestratorGetOrchestrator, SetOrchestratorLimits (max_attempts / max_txn_duration_ms only)
ConduitDataSourcesdata_sources.protodata-source, data-source-limitsList/Get/Upsert/Remove; Get/Set limits
ConduitEventsevents.protoeventsGetEvents; GetEventSink; SetEventSinkFilters; SetEventSinkEmit (existing sinks)
ConduitRhairhai.protorhaiGetRhai, SetRhaiLimits
ConduitMetricsmetrics_control.protometricsGetMetrics, PatchMetrics
ConduitCachescaches.protocacheList/Get; SetCacheMaxEntries; SetCacheLmdbHot; SetCachePolicyHot

Restart-pending fields are omitted from these RPCs (for example txn_table_capacity, event sink lifecycle / queue_depth, memory.shard_count). See gRPC and conduitctl — document apply vs typed primitives.

OverlayApplyMode

Used by ApplyConfig. OVERLAY_APPLY_MODE_UNSPECIFIED (0) is treated as merge.

EnumValueconduitctl equivalentoverlay field
OVERLAY_APPLY_MODE_UNSPECIFIED0default mergePatch required
OVERLAY_APPLY_MODE_MERGE1default or --mergePatch required
OVERLAY_APPLY_MODE_REPLACE2--replacePatch required; empty patch clears overlay
OVERLAY_APPLY_MODE_CLEAR3--clearOmit / ignore

ApplyConfig (conceptual)

message ApplyConfigRequest {
  Config overlay = 1;
  OverlayApplyMode mode = 2;
}
message ApplyConfigResponse {
  bool ok = 1;
  repeated string errors = 2;
  uint64 generation = 3;
  repeated ConfigApplyStatusNote notes = 4;
}

Overlay patches must not include rules or tracing — the server rejects them. metrics is allowed (deep merge). Allowed sections match Configuration model — overlay merge. Pool/backend remove: true: Remove marker.

CLI mapping

conduitctl RPC Local only?
apply ApplyConfig No
export ExportConfig (format: yaml) No
reload ReloadFromFile No
validate --file — Yes (does not call ValidateConfig)
acl check CheckAcl No (default)
acl check --file — Yes (offline compile; does not call CheckAcl)
trace GetTrace No
health show GetBackendHealth No
health freeze SetHealthControl (freeze) No
health set SetHealthControl (set_up / set_down) No
health resume SetHealthControl (resume_automatic) No
pool list / pool get ListPools / GetPool No
backend set-weight / remove SetBackendWeight / RemoveBackend No
orchestrator get / set-limits GetOrchestrator / SetOrchestratorLimits No
data-source … / data-source-limits … ConduitDataSources No
events … ConduitEvents No
rhai get / set-limits GetRhai / SetRhaiLimits No
metrics get / patch GetMetrics / PatchMetrics No
cache … ConduitCaches No

Global client flags and YAML client config: gRPC and conduitctl — connecting.

GetTrace event fields

Each TraceEvent in the response includes:

Field Meaning
phase Pipeline phase name
elapsed_us Microseconds since transaction start
message Optional detail
pool Optional pool name
backend Optional backend address
cache Optional named cache instance (nested cache provider events)