ContainerRuntime Class
Represents the runtime of the container. Contains helper functions/state of the container. It will define the store level mappings.
Signature
export declare class ContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents> implements IContainerRuntime, IGarbageCollectionRuntime, IRuntime, ISummarizerRuntime, ISummarizerInternalsProvider
Extends: TypedEventEmitter<IContainerRuntimeEvents
Implements: IContainerRuntime, IGarbageCollectionRuntime, IRuntime, ISummarizerRuntime, ISummarizerInternalsProvider
Static Methods
Method | Return Type | Description |
---|---|---|
load(context, registryEntries, requestHandler, runtimeOptions, containerScope, existing) | Promise<ContainerRuntime> | Load the stores from a snapshot and returns the runtime. |
Properties
Property | Type | Description |
---|---|---|
attachState | AttachState | |
clientDetails | IClientDetails | |
clientId | string | undefined | |
closeFn | (error?: ICriticalContainerError) => void | |
connected | boolean | |
deltaManager | IDeltaManager<ISequencedDocumentMessage, IDocumentMessage> | |
disableIsolatedChannels | boolean | True if generating summaries with isolated channels is explicitly disabled. This only affects how summaries are written, and is the single source of truth for this container. |
disposed | boolean | |
enqueueSummarize | ISummarizer["enqueueSummarize"] | |
flushMode | FlushMode | |
IContainerRuntime | this | |
IFluidDataStoreRegistry | IFluidDataStoreRegistry | |
IFluidHandleContext | IFluidHandleContext | |
IFluidRouter | this | |
IFluidTokenProvider | IFluidTokenProvider | undefined | |
isDirty | boolean | Returns true of container is dirty, i.e. there are some pending local changes that either were not sent out to delta stream or were not yet acknowledged. |
logger | ITelemetryLogger | |
options | ILoaderOptions | |
reSubmitFn | (type: ContainerMessageType, content: any, localOpMetadata: unknown, opMetadata: Record<string, unknown> | undefined) => void | |
scope | FluidObject | |
storage | IDocumentStorageService | |
summarizeOnDemand | ISummarizer["summarizeOnDemand"] | |
summarizerClientId | string | undefined | clientId of parent (non-summarizing) container that owns summarizer container |
Methods
Method | Alerts | Return Type | Description |
---|---|---|---|
_createDataStoreWithProps(pkg, props, id, isRoot) | Promise<IDataStore> | ||
addedGCOutboundReference(srcHandle, outboundHandle) | void | Called when a new outbound reference is added to another node. This is used by garbage collection to identify all references added in the system. | |
collectGarbage(options) | Promise<IGCStats> | Runs garbage collection and updates the reference / used state of the nodes in the container. | |
createDataStore(pkg) | Promise<IDataStore> | ||
createDetachedDataStore(pkg) | IFluidDataStoreContextDetached | ||
createDetachedRootDataStore(pkg, rootDataStoreId) | IFluidDataStoreContextDetached | ||
createRootDataStore(pkg, rootDataStoreId) | Deprecated |
Promise<IFluidRouter> | |
createSummary(blobRedirectTable, telemetryContext) | ISummaryTree | Create a summary. Used when attaching or serializing a detached container. | |
deleteUnusedRoutes(unusedRoutes) | void | When running GC in test mode, this is called to delete objects whose routes are unused. This enables testing scenarios with accessing deleted content. | |
dispose(error) | void | ||
flush() | void | ||
getAbsoluteUrl(relativeUrl) | Promise<string | undefined> | ||
getAudience() | IAudience | ||
getCurrentReferenceTimestampMs() | number | undefined | Returns a server generated referenced timestamp to be used to track unreferenced nodes by GC. | |
getGCData(fullGC) | Promise<IGarbageCollectionData> | Implementation of IGarbageCollectionRuntime::getGCData. Generates and returns the GC data for this container. | |
getGCNodePackagePath(nodePath) | Promise<readonly string[] | undefined> | Called by GC to retrieve the package path of the node with the given path. The node should belong to a data store or an attachment blob. | |
getNodeType(nodePath) | GCNodeType | Returns the type of the GC node. Currently, there are nodes that belong to the root ("/"), data stores or blob manager. | |
getPendingLocalState() | IPendingRuntimeState | ||
getQuorum() | IQuorumClients | ||
getRootDataStore(id, wait) | Promise<IFluidRouter> | ||
getSnapshotBlobs() | Promise<void> | ||
notifyAttaching(snapshot) | void | ||
orderSequentially(callback) | void | ||
process(messageArg, local) | void | ||
processSignal(message, local) | void | ||
refreshLatestSummaryAck(proposalHandle, ackHandle, summaryRefSeq, summaryLogger) | Promise<void> | Implementation of ISummarizerInternalsProvider.refreshLatestSummaryAck | |
request(request) | Promise<IResponse> | Notifies this object about the request made to the container. | |
resolveHandle(request) | Promise<IResponse> | Resolves URI representing handle | |
setAttachState(attachState) | void | ||
setConnectionState(connected, clientId) | void | ||
setFlushMode(mode) | void | ||
submitDataStoreAliasOp(contents, localOpMetadata) | void | ||
submitDataStoreOp(id, contents, localOpMetadata) | void | ||
submitDataStoreSignal(address, type, content) | void | ||
submitSignal(type, content) | void | Submits the signal to be sent to other clients. | |
submitSummary(options) | Promise<SubmitSummaryResult> | Generates the summary tree, uploads it to storage, and then submits the summarize op. This is intended to be called by the summarizer, since it is the implementation of ISummarizerInternalsProvider.submitSummary. It takes care of state management at the container level, including pausing inbound op processing, updating SummarizerNode state tracking, and garbage collection. | |
summarize(options) | Promise<IRootSummaryTreeWithStats> | Returns a summary of the runtime at the current sequence number. | |
updateStateBeforeGC() | Promise<void> | Implementation of IGarbageCollectionRuntime::updateStateBeforeGC. Before GC runs, called by the garbage collector to update any pending GC state. This is mainly used to notify the garbage collector of references detected since the last GC run. Most references are notified immediately but there can be some for which async operation is required (such as detecting new root data stores). | |
updateUsedRoutes(usedRoutes, gcTimestamp) | void | Implementation of IGarbageCollectionRuntime::updateUsedRoutes. After GC has run, called to notify this container's nodes of routes that are used in it. | |
uploadBlob(blob) | Promise<IFluidHandle<ArrayBufferLike>> |
Property Details
attachState
Signature
get attachState(): AttachState;
Type: AttachState
clientDetails
Signature
get clientDetails(): IClientDetails;
Type: IClientDetails
clientId
Signature
get clientId(): string | undefined;
Type: string | undefined
closeFn
Signature
get closeFn(): (error?: ICriticalContainerError) => void;
Type: (error?: ICriticalContainerError) => void
connected
Signature
get connected(): boolean;
Type: boolean
deltaManager
Signature
get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>;
Type: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>
disableIsolatedChannels
True if generating summaries with isolated channels is explicitly disabled. This only affects how summaries are written, and is the single source of truth for this container.
Signature
readonly disableIsolatedChannels: boolean;
Type: boolean
disposed
Signature
get disposed(): boolean;
Type: boolean
enqueueSummarize
Signature
readonly enqueueSummarize: ISummarizer["enqueueSummarize"];
Type: ISummarizer["enqueueSummarize"]
flushMode
Signature
get flushMode(): FlushMode;
Type: FlushMode
IContainerRuntime
Signature
get IContainerRuntime(): this;
Type: this
IFluidDataStoreRegistry
Signature
get IFluidDataStoreRegistry(): IFluidDataStoreRegistry;
Type: IFluidDataStoreRegistry
IFluidHandleContext
Signature
get IFluidHandleContext(): IFluidHandleContext;
Type: IFluidHandleContext
IFluidRouter
Signature
get IFluidRouter(): this;
Type: this
IFluidTokenProvider
Signature
get IFluidTokenProvider(): IFluidTokenProvider | undefined;
Type: IFluidTokenProvider | undefined
isDirty
Returns true of container is dirty, i.e. there are some pending local changes that either were not sent out to delta stream or were not yet acknowledged.
Signature
get isDirty(): boolean;
Type: boolean
logger
Signature
readonly logger: ITelemetryLogger;
Type: ITelemetryLogger
options
Signature
get options(): ILoaderOptions;
Type: ILoaderOptions
reSubmitFn
Signature
get reSubmitFn(): (type: ContainerMessageType, content: any, localOpMetadata: unknown, opMetadata: Record<string, unknown> | undefined) => void;
Type: (type: ContainerMessageType, content: any, localOpMetadata: unknown, opMetadata: Record<string, unknown> | undefined) => void
scope
Signature
get scope(): FluidObject;
Type: FluidObject
storage
Signature
get storage(): IDocumentStorageService;
Type: IDocumentStorageService
summarizeOnDemand
Signature
readonly summarizeOnDemand: ISummarizer["summarizeOnDemand"];
Type: ISummarizer["summarizeOnDemand"]
summarizerClientId
clientId of parent (non-summarizing) container that owns summarizer container
Signature
get summarizerClientId(): string | undefined;
Type: string | undefined
Method Details
_createDataStoreWithProps
Signature
_createDataStoreWithProps(pkg: string | string[], props?: any, id?: string, isRoot?: boolean): Promise<IDataStore>;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
pkg | string | string[] | ||
props | optional | any | |
id | optional | string | |
isRoot | optional | boolean |
Returns
Return type: Promise<IDataStore>
addedGCOutboundReference
Called when a new outbound reference is added to another node. This is used by garbage collection to identify all references added in the system.
Signature
addedGCOutboundReference(srcHandle: IFluidHandle, outboundHandle: IFluidHandle): void;
Parameters
Parameter | Type | Description |
---|---|---|
srcHandle | IFluidHandle | The handle of the node that added the reference. |
outboundHandle | IFluidHandle | The handle of the outbound node that is referenced. |
collectGarbage
Runs garbage collection and updates the reference / used state of the nodes in the container.
Signature
collectGarbage(options: {
logger?: ITelemetryLogger;
runSweep?: boolean;
fullGC?: boolean;
}): Promise<IGCStats>;
Parameters
Parameter | Type | Description |
---|---|---|
options | { logger?: ITelemetryLogger; runSweep?: boolean; fullGC?: boolean; } |
Returns
the statistics of the garbage collection run.
Return type: Promise<IGCStats>
createDataStore
Signature
createDataStore(pkg: string | string[]): Promise<IDataStore>;
Parameters
Parameter | Type | Description |
---|---|---|
pkg | string | string[] |
Returns
Return type: Promise<IDataStore>
createDetachedDataStore
Signature
createDetachedDataStore(pkg: Readonly<string[]>): IFluidDataStoreContextDetached;
Parameters
Parameter | Type | Description |
---|---|---|
pkg | Readonly<string[]> |
Returns
Return type: IFluidDataStoreContextDetached
createDetachedRootDataStore
Signature
createDetachedRootDataStore(pkg: Readonly<string[]>, rootDataStoreId: string): IFluidDataStoreContextDetached;
Parameters
Parameter | Type | Description |
---|---|---|
pkg | Readonly<string[]> | |
rootDataStoreId | string |
Returns
Return type: IFluidDataStoreContextDetached
createRootDataStore
- will be removed in an upcoming release. See #9660.
Signature
createRootDataStore(pkg: string | string[], rootDataStoreId: string): Promise<IFluidRouter>;
Parameters
Parameter | Type | Description |
---|---|---|
pkg | string | string[] | |
rootDataStoreId | string |
Returns
Return type: Promise<IFluidRouter>
createSummary
Create a summary. Used when attaching or serializing a detached container.
Signature
createSummary(blobRedirectTable?: Map<string, string>, telemetryContext?: ITelemetryContext): ISummaryTree;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
blobRedirectTable | optional | Map<string, string> | A table passed during the attach process. While detached, blob upload is supported using IDs generated locally. After attach, these IDs cannot be used, so this table maps the old local IDs to the new storage IDs so requests can be redirected. |
telemetryContext | optional | ITelemetryContext | summary data passed through the layers for telemetry purposes |
Returns
Return type: ISummaryTree
deleteUnusedRoutes
When running GC in test mode, this is called to delete objects whose routes are unused. This enables testing scenarios with accessing deleted content.
Signature
deleteUnusedRoutes(unusedRoutes: string[]): void;
Parameters
Parameter | Type | Description |
---|---|---|
unusedRoutes | string[] | The routes that are unused in all data stores in this Container. |
dispose
Signature
dispose(error?: Error): void;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
error | optional | Error |
flush
Signature
flush(): void;
getAbsoluteUrl
Signature
getAbsoluteUrl(relativeUrl: string): Promise<string | undefined>;
Parameters
Parameter | Type | Description |
---|---|---|
relativeUrl | string |
Returns
Return type: Promise<string | undefined>
getAudience
Signature
getAudience(): IAudience;
Returns
Return type: IAudience
getCurrentReferenceTimestampMs
Returns a server generated referenced timestamp to be used to track unreferenced nodes by GC.
Signature
getCurrentReferenceTimestampMs(): number | undefined;
Returns
Return type: number | undefined
getGCData
Implementation of IGarbageCollectionRuntime::getGCData. Generates and returns the GC data for this container.
Signature
getGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
fullGC | optional | boolean | true to bypass optimizations and force full generation of GC data. |
Returns
Return type: Promise<IGarbageCollectionData>
getGCNodePackagePath
Called by GC to retrieve the package path of the node with the given path. The node should belong to a data store or an attachment blob.
Signature
getGCNodePackagePath(nodePath: string): Promise<readonly string[] | undefined>;
Parameters
Parameter | Type | Description |
---|---|---|
nodePath | string |
Returns
Return type: Promise<readonly string[] | undefined>
getNodeType
Returns the type of the GC node. Currently, there are nodes that belong to the root ("/"), data stores or blob manager.
Signature
getNodeType(nodePath: string): GCNodeType;
Parameters
Parameter | Type | Description |
---|---|---|
nodePath | string |
Returns
Return type: GCNodeType
getPendingLocalState
Signature
getPendingLocalState(): IPendingRuntimeState;
Returns
Return type: IPendingRuntimeState
getQuorum
Signature
getQuorum(): IQuorumClients;
Returns
Return type: IQuorumClients
getRootDataStore
Signature
getRootDataStore(id: string, wait?: boolean): Promise<IFluidRouter>;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
id | string | ||
wait | optional | boolean |
Returns
Return type: Promise<IFluidRouter>
getSnapshotBlobs
Signature
getSnapshotBlobs(): Promise<void>;
Returns
Return type: Promise<void>
load
Load the stores from a snapshot and returns the runtime.
Signature
static load(context: IContainerContext, registryEntries: NamedFluidDataStoreRegistryEntries, requestHandler?: (request: IRequest, runtime: IContainerRuntime) => Promise<IResponse>, runtimeOptions?: IContainerRuntimeOptions, containerScope?: FluidObject, existing?: boolean): Promise<ContainerRuntime>;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
context | IContainerContext | Context of the container. | |
registryEntries | NamedFluidDataStoreRegistryEntries | Mapping to the stores. | |
requestHandler | optional | (request: IRequest, runtime: IContainerRuntime) => Promise<IResponse> | Request handlers for the container runtime |
runtimeOptions | optional | IContainerRuntimeOptions | Additional options to be passed to the runtime |
containerScope | optional | FluidObject | |
existing | optional | boolean | (optional) When loading from an existing snapshot. Precedes context.existing if provided |
Returns
Return type: Promise<ContainerRuntime>
notifyAttaching
Signature
notifyAttaching(snapshot: ISnapshotTreeWithBlobContents): void;
Parameters
Parameter | Type | Description |
---|---|---|
snapshot | ISnapshotTreeWithBlobContents |
orderSequentially
Signature
orderSequentially(callback: () => void): void;
Parameters
Parameter | Type | Description |
---|---|---|
callback | () => void |
process
Signature
process(messageArg: ISequencedDocumentMessage, local: boolean): void;
Parameters
Parameter | Type | Description |
---|---|---|
messageArg | ISequencedDocumentMessage | |
local | boolean |
processSignal
Signature
processSignal(message: ISignalMessage, local: boolean): void;
Parameters
Parameter | Type | Description |
---|---|---|
message | ISignalMessage | |
local | boolean |
refreshLatestSummaryAck
Implementation of ISummarizerInternalsProvider.refreshLatestSummaryAck
Signature
refreshLatestSummaryAck(proposalHandle: string | undefined, ackHandle: string, summaryRefSeq: number, summaryLogger: ITelemetryLogger): Promise<void>;
Parameters
Parameter | Type | Description |
---|---|---|
proposalHandle | string | undefined | |
ackHandle | string | |
summaryRefSeq | number | |
summaryLogger | ITelemetryLogger |
Returns
Return type: Promise<void>
request
Notifies this object about the request made to the container.
Signature
request(request: IRequest): Promise<IResponse>;
Parameters
Parameter | Type | Description |
---|---|---|
request | IRequest | Request made to the handler. |
Returns
Return type: Promise<IResponse>
resolveHandle
Resolves URI representing handle
Signature
resolveHandle(request: IRequest): Promise<IResponse>;
Parameters
Parameter | Type | Description |
---|---|---|
request | IRequest | Request made to the handler. |
Returns
Return type: Promise<IResponse>
setAttachState
Signature
setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void;
Parameters
Parameter | Type | Description |
---|---|---|
attachState | AttachState.Attaching | AttachState.Attached |
setConnectionState
Signature
setConnectionState(connected: boolean, clientId?: string): void;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
connected | boolean | ||
clientId | optional | string |
setFlushMode
Signature
setFlushMode(mode: FlushMode): void;
Parameters
Parameter | Type | Description |
---|---|---|
mode | FlushMode |
submitDataStoreAliasOp
Signature
submitDataStoreAliasOp(contents: any, localOpMetadata: unknown): void;
Parameters
Parameter | Type | Description |
---|---|---|
contents | any | |
localOpMetadata | unknown |
submitDataStoreOp
Signature
submitDataStoreOp(id: string, contents: any, localOpMetadata?: unknown): void;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
id | string | ||
contents | any | ||
localOpMetadata | optional | unknown |
submitDataStoreSignal
Signature
submitDataStoreSignal(address: string, type: string, content: any): void;
Parameters
Parameter | Type | Description |
---|---|---|
address | string | |
type | string | |
content | any |
submitSignal
Submits the signal to be sent to other clients.
Signature
submitSignal(type: string, content: any): void;
Parameters
Parameter | Type | Description |
---|---|---|
type | string | Type of the signal. |
content | any | Content of the signal. |
submitSummary
Generates the summary tree, uploads it to storage, and then submits the summarize op. This is intended to be called by the summarizer, since it is the implementation of ISummarizerInternalsProvider.submitSummary. It takes care of state management at the container level, including pausing inbound op processing, updating SummarizerNode state tracking, and garbage collection.
Signature
submitSummary(options: ISubmitSummaryOptions): Promise<SubmitSummaryResult>;
Parameters
Parameter | Type | Description |
---|---|---|
options | ISubmitSummaryOptions | options controlling how the summary is generated or submitted |
Returns
Return type: Promise<SubmitSummaryResult>
summarize
Returns a summary of the runtime at the current sequence number.
Signature
summarize(options: {
fullTree?: boolean;
trackState?: boolean;
summaryLogger?: ITelemetryLogger;
runGC?: boolean;
fullGC?: boolean;
runSweep?: boolean;
}): Promise<IRootSummaryTreeWithStats>;
Parameters
Parameter | Type | Description |
---|---|---|
options | { fullTree?: boolean; trackState?: boolean; summaryLogger?: ITelemetryLogger; runGC?: boolean; fullGC?: boolean; runSweep?: boolean; } |
Returns
Return type: Promise<IRootSummaryTreeWithStats>
updateStateBeforeGC
Implementation of IGarbageCollectionRuntime::updateStateBeforeGC. Before GC runs, called by the garbage collector to update any pending GC state. This is mainly used to notify the garbage collector of references detected since the last GC run. Most references are notified immediately but there can be some for which async operation is required (such as detecting new root data stores).
Signature
updateStateBeforeGC(): Promise<void>;
Returns
Return type: Promise<void>
updateUsedRoutes
Implementation of IGarbageCollectionRuntime::updateUsedRoutes. After GC has run, called to notify this container's nodes of routes that are used in it.
Signature
updateUsedRoutes(usedRoutes: string[], gcTimestamp?: number): void;
Parameters
Parameter | Modifiers | Type | Description |
---|---|---|---|
usedRoutes | string[] | The routes that are used in all nodes in this Container. | |
gcTimestamp | optional | number | The time when GC was run that generated these used routes. If any node node becomes unreferenced as part of this GC run, this should be used to update the time when it happens. |
uploadBlob
Signature
uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>>;
Parameters
Parameter | Type | Description |
---|---|---|
blob | ArrayBufferLike |
Returns
Return type: Promise<IFluidHandle<ArrayBufferLike>>