@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -7,8 +7,7 @@ type HostStateAccessor = () => ZLinkFrameworkRuntimeState;
|
|
|
7
7
|
export declare class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRuntime {
|
|
8
8
|
private readonly runtime;
|
|
9
9
|
private readonly hostState;
|
|
10
|
-
private
|
|
11
|
-
private readonly hostObservers;
|
|
10
|
+
private readonly sources;
|
|
12
11
|
constructor(runtime: RuntimeAccessor, hostState?: HostStateAccessor);
|
|
13
12
|
snapshot(channelName: string): ZLinkClientServerStatus;
|
|
14
13
|
private snapshotCore;
|
|
@@ -21,8 +20,7 @@ export declare class ZLinkClientServerRuntimeProjection implements ZLinkClientSe
|
|
|
21
20
|
export declare class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
|
|
22
21
|
private readonly runtime;
|
|
23
22
|
private readonly hostState;
|
|
24
|
-
private
|
|
25
|
-
private readonly hostObservers;
|
|
23
|
+
private readonly sources;
|
|
26
24
|
constructor(runtime: RuntimeAccessor, hostState?: HostStateAccessor);
|
|
27
25
|
snapshot(channelName: string): ZLinkFanoutStatus;
|
|
28
26
|
private snapshotCore;
|
|
@@ -7,39 +7,121 @@ const runtime_observation_queue_1 = require("./runtime-observation-queue");
|
|
|
7
7
|
const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
|
|
8
8
|
var runtime_observation_queue_2 = require("./runtime-observation-queue");
|
|
9
9
|
Object.defineProperty(exports, "RuntimeEventQueue", { enumerable: true, get: function () { return runtime_observation_queue_2.RuntimeEventQueue; } });
|
|
10
|
+
class TopologyStatusSources {
|
|
11
|
+
read;
|
|
12
|
+
subscribe;
|
|
13
|
+
equivalent;
|
|
14
|
+
sources = new Map();
|
|
15
|
+
constructor(read, subscribe, equivalent) {
|
|
16
|
+
this.read = read;
|
|
17
|
+
this.subscribe = subscribe;
|
|
18
|
+
this.equivalent = equivalent;
|
|
19
|
+
}
|
|
20
|
+
snapshot(channelName) {
|
|
21
|
+
let source = this.sources.get(channelName);
|
|
22
|
+
const current = source?.lastSnapshot;
|
|
23
|
+
if (current !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(current.state))
|
|
24
|
+
return current;
|
|
25
|
+
const snapshot = this.read(channelName, current?.sequence ?? 0n);
|
|
26
|
+
if (source === undefined) {
|
|
27
|
+
source = { observers: new Set() };
|
|
28
|
+
this.sources.set(channelName, source);
|
|
29
|
+
}
|
|
30
|
+
const published = this.publish(channelName, source, snapshot);
|
|
31
|
+
if (source.stop === undefined && !(0, runtime_state_projections_1.topologyObservationIsTerminal)(published.state)) {
|
|
32
|
+
source.stop = this.subscribe(channelName, () => this.snapshot(channelName));
|
|
33
|
+
}
|
|
34
|
+
return published;
|
|
35
|
+
}
|
|
36
|
+
observe(channelName, capacity, signal) {
|
|
37
|
+
const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
|
|
38
|
+
const snapshot = this.snapshot(channelName);
|
|
39
|
+
const current = this.sources.get(channelName);
|
|
40
|
+
current.observers.add(queue);
|
|
41
|
+
queue.onClose(() => {
|
|
42
|
+
current.observers.delete(queue);
|
|
43
|
+
});
|
|
44
|
+
this.deliver(queue, snapshot, channelName);
|
|
45
|
+
return queue;
|
|
46
|
+
}
|
|
47
|
+
hostStateChanged() {
|
|
48
|
+
for (const channelName of this.sources.keys())
|
|
49
|
+
this.snapshot(channelName);
|
|
50
|
+
}
|
|
51
|
+
stopObservers() {
|
|
52
|
+
for (const [channelName, source] of this.sources) {
|
|
53
|
+
if (source.lastSnapshot === undefined ||
|
|
54
|
+
(0, runtime_state_projections_1.topologyObservationIsTerminal)(source.lastSnapshot.state))
|
|
55
|
+
continue;
|
|
56
|
+
this.publish(channelName, source, {
|
|
57
|
+
...source.lastSnapshot,
|
|
58
|
+
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
59
|
+
isReady: false
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
publish(channelName, source, snapshot) {
|
|
64
|
+
const previous = source.lastSnapshot;
|
|
65
|
+
if (previous !== undefined && this.equivalent(previous, snapshot))
|
|
66
|
+
return previous;
|
|
67
|
+
source.lastSnapshot = {
|
|
68
|
+
...snapshot,
|
|
69
|
+
sequence: (previous?.sequence ?? 0n) + 1n,
|
|
70
|
+
observedAt: new Date()
|
|
71
|
+
};
|
|
72
|
+
for (const queue of source.observers)
|
|
73
|
+
this.deliver(queue, source.lastSnapshot, channelName);
|
|
74
|
+
if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(source.lastSnapshot.state)) {
|
|
75
|
+
source.stop?.();
|
|
76
|
+
source.stop = undefined;
|
|
77
|
+
}
|
|
78
|
+
return source.lastSnapshot;
|
|
79
|
+
}
|
|
80
|
+
deliver(queue, snapshot, channelName) {
|
|
81
|
+
if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(snapshot.state))
|
|
82
|
+
queue.seal(snapshot, channelName);
|
|
83
|
+
else
|
|
84
|
+
queue.push(snapshot, channelName);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function sameTopologyState(left, right) {
|
|
88
|
+
return left.state === right.state && left.isReady === right.isReady;
|
|
89
|
+
}
|
|
90
|
+
function samePeer(left, right) {
|
|
91
|
+
return (left.nodeRid === right.nodeRid &&
|
|
92
|
+
left.state === right.state &&
|
|
93
|
+
left.unavailableReason === right.unavailableReason);
|
|
94
|
+
}
|
|
95
|
+
function sameClientServerStatus(left, right) {
|
|
96
|
+
return (sameTopologyState(left, right) &&
|
|
97
|
+
left.localRole === right.localRole &&
|
|
98
|
+
left.readyTargetCount === right.readyTargetCount &&
|
|
99
|
+
left.targets.length === right.targets.length &&
|
|
100
|
+
left.targets.every((target, index) => samePeer(target, right.targets[index]) && target.weight === right.targets[index].weight));
|
|
101
|
+
}
|
|
102
|
+
function sameFanoutStatus(left, right) {
|
|
103
|
+
return (sameTopologyState(left, right) &&
|
|
104
|
+
left.readyPublisherCount === right.readyPublisherCount &&
|
|
105
|
+
left.publishers.length === right.publishers.length &&
|
|
106
|
+
left.publishers.every((publisher, index) => samePeer(publisher, right.publishers[index])));
|
|
107
|
+
}
|
|
10
108
|
class ZLinkClientServerRuntimeProjection {
|
|
11
109
|
runtime;
|
|
12
110
|
hostState;
|
|
13
|
-
|
|
14
|
-
hostObservers = new Set();
|
|
111
|
+
sources = new TopologyStatusSources((channelName, sequence) => this.snapshotCore(channelName, sequence), (channelName, changed) => this.requireRuntime().observeClientServerTopology(channelName, changed), sameClientServerStatus);
|
|
15
112
|
constructor(runtime, hostState = () => contracts_1.ZLinkFrameworkRuntimeState.Serving) {
|
|
16
113
|
this.runtime = runtime;
|
|
17
114
|
this.hostState = hostState;
|
|
18
115
|
}
|
|
19
116
|
snapshot(channelName) {
|
|
20
|
-
return this.
|
|
117
|
+
return this.sources.snapshot(channelName);
|
|
21
118
|
}
|
|
22
|
-
snapshotCore(channelName) {
|
|
119
|
+
snapshotCore(channelName, sequence) {
|
|
23
120
|
const topology = this.requireRuntime().clientServerTopology(channelName);
|
|
24
121
|
if (topology.localRole === undefined) {
|
|
25
122
|
throw new configuration_1.ZLinkConfigurationException(`ClientServer channel '${channelName}' is not registered.`);
|
|
26
123
|
}
|
|
27
|
-
const targets = topology.descriptors.map((descriptor) => (
|
|
28
|
-
nodeRid: descriptor.serverRoutingId,
|
|
29
|
-
weight: descriptor.weight,
|
|
30
|
-
state: descriptor.state === 'serving'
|
|
31
|
-
? contracts_1.ZLinkPeerState.Ready
|
|
32
|
-
: descriptor.state === 'retiring'
|
|
33
|
-
? contracts_1.ZLinkPeerState.Draining
|
|
34
|
-
: descriptor.state === 'preparing'
|
|
35
|
-
? contracts_1.ZLinkPeerState.Connecting
|
|
36
|
-
: contracts_1.ZLinkPeerState.NotConnected,
|
|
37
|
-
unavailableReason: descriptor.state === 'serving' && descriptor.weight > 0
|
|
38
|
-
? undefined
|
|
39
|
-
: descriptor.state === 'retiring'
|
|
40
|
-
? contracts_1.ZLinkTopologyReason.Draining
|
|
41
|
-
: contracts_1.ZLinkTopologyReason.NoReadyTarget
|
|
42
|
-
}));
|
|
124
|
+
const targets = topology.descriptors.map((descriptor) => peerStatusForAvailability(descriptor, contracts_1.ZLinkTopologyReason.NoReadyTarget));
|
|
43
125
|
const readyTargetCount = targets.filter((target) => target.state === contracts_1.ZLinkPeerState.Ready && target.weight > 0).length;
|
|
44
126
|
const hostState = this.hostState();
|
|
45
127
|
const isReady = (0, runtime_state_projections_1.topologyRuntimeIsReady)(hostState, readyTargetCount);
|
|
@@ -50,74 +132,21 @@ class ZLinkClientServerRuntimeProjection {
|
|
|
50
132
|
isReady,
|
|
51
133
|
readyTargetCount,
|
|
52
134
|
targets,
|
|
53
|
-
sequence
|
|
135
|
+
sequence,
|
|
54
136
|
observedAt: new Date()
|
|
55
137
|
};
|
|
56
138
|
}
|
|
57
139
|
observe(channelName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
|
|
58
|
-
|
|
59
|
-
const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
|
|
60
|
-
let lastSnapshot = this.snapshotCore(channelName);
|
|
61
|
-
const stop = runtime.observeClientServerTopology(channelName, () => {
|
|
62
|
-
this.sequence += 1n;
|
|
63
|
-
lastSnapshot = this.snapshotCore(channelName);
|
|
64
|
-
queue.push(lastSnapshot, channelName);
|
|
65
|
-
});
|
|
66
|
-
const hostObserver = {
|
|
67
|
-
changed: () => {
|
|
68
|
-
this.sequence += 1n;
|
|
69
|
-
lastSnapshot = this.snapshotCore(channelName);
|
|
70
|
-
queue.push(lastSnapshot, channelName);
|
|
71
|
-
},
|
|
72
|
-
stop: () => {
|
|
73
|
-
this.sequence += 1n;
|
|
74
|
-
let current = lastSnapshot;
|
|
75
|
-
try {
|
|
76
|
-
current = this.snapshotCore(channelName);
|
|
77
|
-
lastSnapshot = current;
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// The last complete projection remains valid after native teardown.
|
|
81
|
-
}
|
|
82
|
-
queue.seal({
|
|
83
|
-
...current,
|
|
84
|
-
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
85
|
-
isReady: false,
|
|
86
|
-
sequence: this.sequence,
|
|
87
|
-
observedAt: new Date()
|
|
88
|
-
}, channelName);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
this.hostObservers.add(hostObserver);
|
|
92
|
-
queue.onClose(() => {
|
|
93
|
-
stop();
|
|
94
|
-
this.hostObservers.delete(hostObserver);
|
|
95
|
-
});
|
|
96
|
-
return queue;
|
|
140
|
+
return this.sources.observe(channelName, capacity, signal);
|
|
97
141
|
}
|
|
98
142
|
hostStateChanged() {
|
|
99
|
-
|
|
100
|
-
try {
|
|
101
|
-
observer.changed();
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Monitoring projection failures do not change host lifecycle results.
|
|
105
|
-
}
|
|
106
|
-
}
|
|
143
|
+
this.sources.hostStateChanged();
|
|
107
144
|
}
|
|
108
145
|
stopObservers() {
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
observer.stop();
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
// The observer is still removed when its terminal snapshot fails.
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
this.hostObservers.clear();
|
|
146
|
+
this.sources.stopObservers();
|
|
118
147
|
}
|
|
119
148
|
isReady(channelName) {
|
|
120
|
-
return this.
|
|
149
|
+
return this.snapshot(channelName).isReady;
|
|
121
150
|
}
|
|
122
151
|
requireRuntime() {
|
|
123
152
|
const runtime = this.runtime();
|
|
@@ -130,33 +159,18 @@ exports.ZLinkClientServerRuntimeProjection = ZLinkClientServerRuntimeProjection;
|
|
|
130
159
|
class ZLinkFanoutRuntimeProjection {
|
|
131
160
|
runtime;
|
|
132
161
|
hostState;
|
|
133
|
-
|
|
134
|
-
hostObservers = new Set();
|
|
162
|
+
sources = new TopologyStatusSources((channelName, sequence) => this.snapshotCore(channelName, sequence), (channelName, changed) => this.requireRuntime().observeFanoutTopology(channelName, changed), sameFanoutStatus);
|
|
135
163
|
constructor(runtime, hostState = () => contracts_1.ZLinkFrameworkRuntimeState.Serving) {
|
|
136
164
|
this.runtime = runtime;
|
|
137
165
|
this.hostState = hostState;
|
|
138
166
|
}
|
|
139
167
|
snapshot(channelName) {
|
|
140
|
-
return this.
|
|
168
|
+
return this.sources.snapshot(channelName);
|
|
141
169
|
}
|
|
142
|
-
snapshotCore(channelName) {
|
|
170
|
+
snapshotCore(channelName, sequence) {
|
|
143
171
|
const publishers = this.requireRuntime()
|
|
144
172
|
.fanoutTopology(channelName)
|
|
145
|
-
.descriptors.map((descriptor) => (
|
|
146
|
-
nodeRid: descriptor.publisherRoutingId,
|
|
147
|
-
state: descriptor.state === 'serving'
|
|
148
|
-
? contracts_1.ZLinkPeerState.Ready
|
|
149
|
-
: descriptor.state === 'retiring'
|
|
150
|
-
? contracts_1.ZLinkPeerState.Draining
|
|
151
|
-
: descriptor.state === 'preparing'
|
|
152
|
-
? contracts_1.ZLinkPeerState.Connecting
|
|
153
|
-
: contracts_1.ZLinkPeerState.NotConnected,
|
|
154
|
-
unavailableReason: descriptor.state === 'serving'
|
|
155
|
-
? undefined
|
|
156
|
-
: descriptor.state === 'retiring'
|
|
157
|
-
? contracts_1.ZLinkTopologyReason.Draining
|
|
158
|
-
: contracts_1.ZLinkTopologyReason.NoReadyTarget
|
|
159
|
-
}));
|
|
173
|
+
.descriptors.map((descriptor) => peerStatusForAvailability(descriptor, contracts_1.ZLinkTopologyReason.NoReadyPeer));
|
|
160
174
|
const readyPublisherCount = publishers.filter((publisher) => publisher.state === contracts_1.ZLinkPeerState.Ready).length;
|
|
161
175
|
const hostState = this.hostState();
|
|
162
176
|
const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
|
|
@@ -170,71 +184,18 @@ class ZLinkFanoutRuntimeProjection {
|
|
|
170
184
|
isReady: (0, runtime_state_projections_1.topologyRuntimeIsReady)(hostState, readyPublisherCount),
|
|
171
185
|
readyPublisherCount,
|
|
172
186
|
publishers,
|
|
173
|
-
sequence
|
|
187
|
+
sequence,
|
|
174
188
|
observedAt: new Date()
|
|
175
189
|
};
|
|
176
190
|
}
|
|
177
191
|
observe(channelName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
|
|
178
|
-
|
|
179
|
-
const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
|
|
180
|
-
let lastSnapshot = this.snapshotCore(channelName);
|
|
181
|
-
const stop = runtime.observeFanoutTopology(channelName, () => {
|
|
182
|
-
this.sequence += 1n;
|
|
183
|
-
lastSnapshot = this.snapshotCore(channelName);
|
|
184
|
-
queue.push(lastSnapshot, channelName);
|
|
185
|
-
});
|
|
186
|
-
const hostObserver = {
|
|
187
|
-
changed: () => {
|
|
188
|
-
this.sequence += 1n;
|
|
189
|
-
lastSnapshot = this.snapshotCore(channelName);
|
|
190
|
-
queue.push(lastSnapshot, channelName);
|
|
191
|
-
},
|
|
192
|
-
stop: () => {
|
|
193
|
-
this.sequence += 1n;
|
|
194
|
-
let current = lastSnapshot;
|
|
195
|
-
try {
|
|
196
|
-
current = this.snapshotCore(channelName);
|
|
197
|
-
lastSnapshot = current;
|
|
198
|
-
}
|
|
199
|
-
catch {
|
|
200
|
-
// The last complete projection remains valid after native teardown.
|
|
201
|
-
}
|
|
202
|
-
queue.seal({
|
|
203
|
-
...current,
|
|
204
|
-
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
205
|
-
isReady: false,
|
|
206
|
-
sequence: this.sequence,
|
|
207
|
-
observedAt: new Date()
|
|
208
|
-
}, channelName);
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
this.hostObservers.add(hostObserver);
|
|
212
|
-
queue.onClose(() => {
|
|
213
|
-
stop();
|
|
214
|
-
this.hostObservers.delete(hostObserver);
|
|
215
|
-
});
|
|
216
|
-
return queue;
|
|
192
|
+
return this.sources.observe(channelName, capacity, signal);
|
|
217
193
|
}
|
|
218
194
|
hostStateChanged() {
|
|
219
|
-
|
|
220
|
-
try {
|
|
221
|
-
observer.changed();
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
// Monitoring projection failures do not change host lifecycle results.
|
|
225
|
-
}
|
|
226
|
-
}
|
|
195
|
+
this.sources.hostStateChanged();
|
|
227
196
|
}
|
|
228
197
|
stopObservers() {
|
|
229
|
-
|
|
230
|
-
try {
|
|
231
|
-
observer.stop();
|
|
232
|
-
}
|
|
233
|
-
catch {
|
|
234
|
-
// The observer is still removed when its terminal snapshot fails.
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
this.hostObservers.clear();
|
|
198
|
+
this.sources.stopObservers();
|
|
238
199
|
}
|
|
239
200
|
requireRuntime() {
|
|
240
201
|
const runtime = this.runtime();
|
|
@@ -244,6 +205,26 @@ class ZLinkFanoutRuntimeProjection {
|
|
|
244
205
|
}
|
|
245
206
|
}
|
|
246
207
|
exports.ZLinkFanoutRuntimeProjection = ZLinkFanoutRuntimeProjection;
|
|
208
|
+
function peerStatusForAvailability(descriptor, noReadyReason) {
|
|
209
|
+
let state = contracts_1.ZLinkPeerState.NotConnected;
|
|
210
|
+
let unavailableReason = noReadyReason;
|
|
211
|
+
switch (descriptor.state) {
|
|
212
|
+
case 'retiring':
|
|
213
|
+
state = contracts_1.ZLinkPeerState.Draining;
|
|
214
|
+
unavailableReason = contracts_1.ZLinkTopologyReason.Draining;
|
|
215
|
+
break;
|
|
216
|
+
case 'serving':
|
|
217
|
+
state = contracts_1.ZLinkPeerState.Ready;
|
|
218
|
+
unavailableReason = undefined;
|
|
219
|
+
break;
|
|
220
|
+
case 'preparing':
|
|
221
|
+
state = contracts_1.ZLinkPeerState.Connecting;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
return 'serverRoutingId' in descriptor
|
|
225
|
+
? { nodeRid: descriptor.serverRoutingId, weight: descriptor.weight, state, unavailableReason }
|
|
226
|
+
: { nodeRid: descriptor.publisherRoutingId, state, unavailableReason };
|
|
227
|
+
}
|
|
247
228
|
function topologyStateForHost(state) {
|
|
248
229
|
switch (state) {
|
|
249
230
|
case contracts_1.ZLinkFrameworkRuntimeState.Preparing:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RuntimeDisposal = void 0;
|
|
4
|
+
class RuntimeDisposal {
|
|
5
|
+
task;
|
|
6
|
+
get started() {
|
|
7
|
+
return this.task !== undefined;
|
|
8
|
+
}
|
|
9
|
+
run(close) {
|
|
10
|
+
if (this.task != null)
|
|
11
|
+
return this.task;
|
|
12
|
+
const task = Promise.resolve()
|
|
13
|
+
.then(close)
|
|
14
|
+
.catch((error) => {
|
|
15
|
+
this.task = null;
|
|
16
|
+
throw error;
|
|
17
|
+
});
|
|
18
|
+
this.task = task;
|
|
19
|
+
return task;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.RuntimeDisposal = RuntimeDisposal;
|
|
@@ -54,12 +54,7 @@ export declare function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn
|
|
|
54
54
|
export declare function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean;
|
|
55
55
|
export interface ZLinkExecutionBarrierSeal {
|
|
56
56
|
readonly generation: bigint;
|
|
57
|
-
|
|
58
|
-
* A Spot Close seal waits for yielded turns accepted before it and lets them
|
|
59
|
-
* resume (Spot address messaging §7 step 2); a relocation seal does not, and
|
|
60
|
-
* their continuation fails (execution gate §4).
|
|
61
|
-
*/
|
|
62
|
-
readonly drainsYieldedTurns: boolean;
|
|
57
|
+
readonly kind: 'close' | 'relocation';
|
|
63
58
|
}
|
|
64
59
|
export interface ZLinkExecutionBarrierClaim {
|
|
65
60
|
release(): void;
|
|
@@ -76,14 +71,22 @@ export declare class ZLinkExecutionBarrier {
|
|
|
76
71
|
private generation;
|
|
77
72
|
private activeClaims;
|
|
78
73
|
private suspendedClaims;
|
|
74
|
+
/** Claims whose turn has started and yielded at least once, until released. */
|
|
75
|
+
private yieldedTurnClaims;
|
|
79
76
|
private currentSeal;
|
|
80
77
|
private readonly admissionWaiters;
|
|
81
78
|
private readonly quiescenceWaiters;
|
|
82
|
-
private
|
|
79
|
+
private committedSeal?;
|
|
83
80
|
get isSealed(): boolean;
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
get isCloseSealed(): boolean;
|
|
82
|
+
enter(): ZLinkExecutionBarrierClaim | Promise<ZLinkExecutionBarrierClaim>;
|
|
83
|
+
seal(kind?: ZLinkExecutionBarrierSeal['kind']): ZLinkExecutionBarrierSeal;
|
|
86
84
|
waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Spot messaging §7 step 1: a Close that keeps admission open still lets every
|
|
87
|
+
* already-started (yielded) turn finish in its generation before cleanup.
|
|
88
|
+
*/
|
|
89
|
+
waitForStartedTurns(signal?: AbortSignal): Promise<void>;
|
|
87
90
|
abort(seal: ZLinkExecutionBarrierSeal): boolean;
|
|
88
91
|
commit(seal: ZLinkExecutionBarrierSeal): boolean;
|
|
89
92
|
isCurrent(seal: ZLinkExecutionBarrierSeal): boolean;
|
|
@@ -178,32 +178,42 @@ class ZLinkExecutionBarrier {
|
|
|
178
178
|
generation = 0n;
|
|
179
179
|
activeClaims = 0;
|
|
180
180
|
suspendedClaims = 0;
|
|
181
|
+
/** Claims whose turn has started and yielded at least once, until released. */
|
|
182
|
+
yieldedTurnClaims = 0;
|
|
181
183
|
currentSeal;
|
|
182
184
|
admissionWaiters = [];
|
|
183
185
|
quiescenceWaiters = new Set();
|
|
184
|
-
|
|
186
|
+
committedSeal;
|
|
185
187
|
get isSealed() {
|
|
186
|
-
return this.currentSeal !== undefined || this.
|
|
188
|
+
return this.currentSeal !== undefined || this.committedSeal !== undefined;
|
|
187
189
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
190
|
+
get isCloseSealed() {
|
|
191
|
+
return (this.currentSeal ?? this.committedSeal)?.kind === 'close';
|
|
192
|
+
}
|
|
193
|
+
enter() {
|
|
194
|
+
if (this.committedSeal !== undefined) {
|
|
195
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(this.committedSeal.kind === 'close'
|
|
196
|
+
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected
|
|
197
|
+
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
|
|
191
198
|
}
|
|
192
199
|
if (this.currentSeal !== undefined) {
|
|
193
|
-
|
|
200
|
+
if (this.currentSeal.kind === 'close') {
|
|
201
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, 'ZLink execution barrier is sealed for Close.');
|
|
202
|
+
}
|
|
203
|
+
return new Promise((resolve, reject) => {
|
|
194
204
|
this.admissionWaiters.push({ resolve, reject });
|
|
195
205
|
});
|
|
196
206
|
}
|
|
197
207
|
return this.createClaim();
|
|
198
208
|
}
|
|
199
|
-
seal(
|
|
200
|
-
if (this.
|
|
209
|
+
seal(kind = 'relocation') {
|
|
210
|
+
if (this.committedSeal !== undefined) {
|
|
201
211
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
|
|
202
212
|
}
|
|
203
213
|
if (this.currentSeal !== undefined) {
|
|
204
214
|
throw new Error('ZLink execution barrier is already sealed.');
|
|
205
215
|
}
|
|
206
|
-
const seal = Object.freeze({ generation: ++this.generation,
|
|
216
|
+
const seal = Object.freeze({ generation: ++this.generation, kind });
|
|
207
217
|
this.currentSeal = seal;
|
|
208
218
|
return seal;
|
|
209
219
|
}
|
|
@@ -230,6 +240,31 @@ class ZLinkExecutionBarrier {
|
|
|
230
240
|
});
|
|
231
241
|
this.requireCurrent(seal);
|
|
232
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Spot messaging §7 step 1: a Close that keeps admission open still lets every
|
|
245
|
+
* already-started (yielded) turn finish in its generation before cleanup.
|
|
246
|
+
*/
|
|
247
|
+
async waitForStartedTurns(signal) {
|
|
248
|
+
if (this.yieldedTurnClaims === 0)
|
|
249
|
+
return;
|
|
250
|
+
if (signal?.aborted === true)
|
|
251
|
+
throw signal.reason;
|
|
252
|
+
await new Promise((resolve, reject) => {
|
|
253
|
+
const complete = () => {
|
|
254
|
+
if (this.yieldedTurnClaims !== 0)
|
|
255
|
+
return;
|
|
256
|
+
this.quiescenceWaiters.delete(complete);
|
|
257
|
+
signal?.removeEventListener('abort', abort);
|
|
258
|
+
resolve();
|
|
259
|
+
};
|
|
260
|
+
const abort = () => {
|
|
261
|
+
this.quiescenceWaiters.delete(complete);
|
|
262
|
+
reject(signal?.reason);
|
|
263
|
+
};
|
|
264
|
+
this.quiescenceWaiters.add(complete);
|
|
265
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
266
|
+
});
|
|
267
|
+
}
|
|
233
268
|
abort(seal) {
|
|
234
269
|
if (!this.isCurrent(seal))
|
|
235
270
|
return false;
|
|
@@ -243,8 +278,10 @@ class ZLinkExecutionBarrier {
|
|
|
243
278
|
if (!this.isCurrent(seal))
|
|
244
279
|
return false;
|
|
245
280
|
this.currentSeal = undefined;
|
|
246
|
-
this.
|
|
247
|
-
const error = (0, framework_errors_internal_1.createInternalFrameworkException)(
|
|
281
|
+
this.committedSeal = seal;
|
|
282
|
+
const error = (0, framework_errors_internal_1.createInternalFrameworkException)(seal.kind === 'close'
|
|
283
|
+
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected
|
|
284
|
+
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
|
|
248
285
|
for (const waiter of this.admissionWaiters)
|
|
249
286
|
waiter.reject(error);
|
|
250
287
|
this.admissionWaiters.length = 0;
|
|
@@ -254,7 +291,7 @@ class ZLinkExecutionBarrier {
|
|
|
254
291
|
return this.currentSeal?.generation === seal.generation;
|
|
255
292
|
}
|
|
256
293
|
isQuiescent(seal) {
|
|
257
|
-
return this.activeClaims === 0 && (
|
|
294
|
+
return this.activeClaims === 0 && (seal.kind !== 'close' || this.suspendedClaims === 0);
|
|
258
295
|
}
|
|
259
296
|
notifyQuiescence() {
|
|
260
297
|
for (const waiter of [...this.quiescenceWaiters])
|
|
@@ -263,6 +300,7 @@ class ZLinkExecutionBarrier {
|
|
|
263
300
|
createClaim() {
|
|
264
301
|
this.activeClaims++;
|
|
265
302
|
let state = 'active';
|
|
303
|
+
let yielded = false;
|
|
266
304
|
const release = () => {
|
|
267
305
|
if (state === 'released')
|
|
268
306
|
return;
|
|
@@ -270,6 +308,8 @@ class ZLinkExecutionBarrier {
|
|
|
270
308
|
this.activeClaims--;
|
|
271
309
|
else
|
|
272
310
|
this.suspendedClaims--;
|
|
311
|
+
if (yielded)
|
|
312
|
+
this.yieldedTurnClaims--;
|
|
273
313
|
state = 'released';
|
|
274
314
|
this.notifyQuiescence();
|
|
275
315
|
};
|
|
@@ -279,6 +319,10 @@ class ZLinkExecutionBarrier {
|
|
|
279
319
|
if (state !== 'active')
|
|
280
320
|
return;
|
|
281
321
|
state = 'suspended';
|
|
322
|
+
if (!yielded) {
|
|
323
|
+
yielded = true;
|
|
324
|
+
this.yieldedTurnClaims++;
|
|
325
|
+
}
|
|
282
326
|
this.activeClaims--;
|
|
283
327
|
this.suspendedClaims++;
|
|
284
328
|
this.notifyQuiescence();
|
|
@@ -286,8 +330,8 @@ class ZLinkExecutionBarrier {
|
|
|
286
330
|
resume: () => {
|
|
287
331
|
if (state !== 'suspended')
|
|
288
332
|
return state === 'active';
|
|
289
|
-
if (this.
|
|
290
|
-
(this.currentSeal !== undefined &&
|
|
333
|
+
if (this.committedSeal !== undefined ||
|
|
334
|
+
(this.currentSeal !== undefined && this.currentSeal.kind !== 'close')) {
|
|
291
335
|
release();
|
|
292
336
|
return false;
|
|
293
337
|
}
|
|
@@ -13,7 +13,7 @@ export declare const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSeria
|
|
|
13
13
|
export interface ZLinkSerialWorkRecord<T> {
|
|
14
14
|
readonly acceptedSequence: bigint;
|
|
15
15
|
readonly lane: ZLinkSerialWorkLane;
|
|
16
|
-
|
|
16
|
+
operation: () => Promise<T> | T;
|
|
17
17
|
readonly context?: unknown;
|
|
18
18
|
resolve(value: T): void;
|
|
19
19
|
reject(reason: unknown): void;
|
|
@@ -21,6 +21,10 @@ export interface ZLinkSerialWorkRecord<T> {
|
|
|
21
21
|
release(): void;
|
|
22
22
|
fail(reason: unknown): void;
|
|
23
23
|
}
|
|
24
|
+
/** The active lifecycle owner decides which existing application records can run. */
|
|
25
|
+
export interface ZLinkSerialLifecycleContext {
|
|
26
|
+
canExecuteApplication(record: ZLinkSerialWorkRecord<unknown>): boolean;
|
|
27
|
+
}
|
|
24
28
|
/** Readiness work that must complete without claiming the serial owner. */
|
|
25
29
|
export interface ZLinkSerialWorkPreparation {
|
|
26
30
|
prepare(signal: AbortSignal): Promise<void>;
|
|
@@ -58,13 +62,15 @@ export declare class ZLinkSerialExecutionQueue {
|
|
|
58
62
|
*/
|
|
59
63
|
submitPreAdmitted<T>(operation: () => Promise<T> | T, options?: ZLinkSerialWorkOptions, context?: unknown): Promise<T>;
|
|
60
64
|
/** Holds lifecycle FIFO through an operation result while its application turns can run. */
|
|
61
|
-
submitLifecycleOperation<T>(operation: () => Promise<T> | T): Promise<T>;
|
|
65
|
+
submitLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
|
|
66
|
+
visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
|
|
62
67
|
get hasPendingWork(): boolean;
|
|
63
68
|
whenIdle(): Promise<void>;
|
|
64
69
|
/** Stops new submissions while allowing the accepted FIFO to finish. */
|
|
65
70
|
close(): Promise<void>;
|
|
66
71
|
/** Stops admission within the lifecycle operation that owns this queue's close. */
|
|
67
72
|
closeAdmission(): void;
|
|
73
|
+
get admissionClosed(): boolean;
|
|
68
74
|
private admit;
|
|
69
75
|
private scheduleDrain;
|
|
70
76
|
private drain;
|