import type { JobId, NodeId, NorskManager } from "@norskvideo/norsk-manager-sdk"; import type { NodeSummary } from "./automanager"; import type { JobBindings } from "./jobBinding"; import type { NodeInventory as TypedNodeInventory, NodeService, ServiceId } from "./types"; /** * Fixed role assigned to runtime jobs that exist to back a * NodeService. Worker reads `WorkerJob.role === NODE_SERVICE_ROLE` * to recognise the instance as a service rather than a regular * workload, and adds the service's `provides[]` capabilities to its * inventory once the job reaches `ready`. * * @public */ export declare const NODE_SERVICE_ROLE = "nodeService"; /** What the reconciler needs from the AutoManager, handed in explicitly. */ export interface NodeServiceDeps { /** The configured services (`settings.nodeServices`), read per reconcile. */ services: () => NodeService[]; /** False before hydration and after close: nothing is placed then. */ active: () => boolean; nodes: () => Iterable; inventoryOf: (nodeId: NodeId) => TypedNodeInventory | undefined; poolNameForNode: (nodeId: NodeId) => string; /** Cordoned by the operator (`cordonNode`), as opposed to by the worker. */ isCordoned: (nodeId: NodeId) => boolean; norsk: Pick; bindings: JobBindings; onError: (err: unknown) => void; } export declare class NodeServiceReconciler { private readonly deps; private readonly placements; constructor(deps: NodeServiceDeps); services(): NodeService[]; /** Nodes on which the named service is placed, keyed by runtime jobId. */ placementsFor(serviceId: ServiceId): Map; /** * Drive every configured service toward its lifecycle target: place on * every eligible node that does not host it, tear down every placement * whose node is no longer eligible. Idempotent; safe on every event. */ reconcile(): void; /** The node is gone (stopping / stopped): its placements with it. */ dropNode(nodeId: NodeId): void; /** Hydration: the fleet view is being rebuilt from the initial state. */ clear(): void; private reconcileEager; /** * Nodes in the service's named pools whose current inventory satisfies * its `consumes` requirements. Used both for placement and for * tear-down decisions. */ private eligibleNodesFor; private place; private teardown; } //# sourceMappingURL=nodeServices.d.ts.map