Nebula
Orchestrator

CapacityInfo

How close one container - or one whole scope - is to what a single worker can carry, derived from the cost telemetry the worker already reports (ContainerCost, docs/cost-telemetry.md).

generated from the sources
public struct CapacityInfo

How close one container - or one whole scope - is to what a single worker can carry, derived from the cost telemetry the worker already reports (ContainerCost, docs/cost-telemetry.md). One number and the name of the component it came from, because "full" is not a head count: a station can be full of simulation, of replication or of per-client relay, and the three have different fixes.

The orchestrator derives it and publishes it on the lease row, so a gateway answers "is this target at capacity" from the control-plane document it already mirrors, without asking anybody. Design record: docs/capacity-admission.md.

Fields

ContainerId

public string ContainerId;

The container this is about; empty when the reading is about a whole scope.

ScopeKey

public string ScopeKey;

The scope the reading belongs to (EntityLocation.ScopeKey); empty in the public world.

Known

public bool Known;

A worker has reported cost for this target lately. False means "nobody has said": an unknown target is never at capacity, so a mesh without cost telemetry admits exactly what it always did.

Saturation

public float Saturation;

The dominant component's share of its own budget (ContainerCost.DominantSaturation). 1 = the whole budget. For a scope, the worst of its parts.

Dominant

public CostComponent Dominant;

Which component Saturation is about (ContainerCost.Dominant).

AtCapacity

public bool AtCapacity;

Saturation is at or above NebulaConfig.CapacitySaturation. The orchestrator decides this, not the reader: the threshold is one mesh-wide setting and the gateways must not disagree about it.

Cause

public SaturationCause Cause;

Why the planner cannot relieve this target by moving anything (SaturationReport.Cause), or SaturationCause.None when the reading is cost telemetry alone. A cohesion group, an affinity group, a hold or a missing boundary is the difference between "busy, and the mesh is about to spread it" and "busy, and nothing the mesh can do will help" - which is the one a queue is for.

Properties

DominantName

public string DominantName { get; }

The name Dominant goes by in the JSON, a log line and the dashboard.

Methods

ToString

public override string ToString();

On this page