@zlink-systems/framework 0.30.0 → 0.30.2
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/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -8,11 +8,10 @@ const internal_event_contracts_1 = require("../diagnostics/internal-event-contra
|
|
|
8
8
|
const contracts_1 = require("../../contracts");
|
|
9
9
|
const TimerRegistrationValidator_1 = require("../../contracts/Configuration/TimerRegistrationValidator");
|
|
10
10
|
const abort_1 = require("../abort");
|
|
11
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
11
12
|
const handler_instance_scope_1 = require("../handlers/handler-instance-scope");
|
|
12
13
|
const flow_context_1 = require("../diagnostics/flow-context");
|
|
13
14
|
const state_lane_1 = require("../execution/state-lane");
|
|
14
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
15
|
-
const detachedTimerStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:spot-timer');
|
|
16
15
|
const systemTimerClock = {
|
|
17
16
|
now: () => performance.now(),
|
|
18
17
|
utcNow: () => Date.now(),
|
|
@@ -30,6 +29,22 @@ class ZLinkSpotTimerRegistry {
|
|
|
30
29
|
timers = new Map();
|
|
31
30
|
generations = new Map();
|
|
32
31
|
executionBarrier;
|
|
32
|
+
/** Frozen from the source capture or the target restore until abort or Ready. */
|
|
33
|
+
frozen = false;
|
|
34
|
+
/**
|
|
35
|
+
* The lifecycle owner opens this window around the target's Configure and
|
|
36
|
+
* pre-Ready OnInitialize only (Spot timer §1). A registration captures it at
|
|
37
|
+
* the call, so a registration started inside the window reattaches a
|
|
38
|
+
* restored key even when its asynchronous part finishes after the window.
|
|
39
|
+
*/
|
|
40
|
+
initializing = false;
|
|
41
|
+
/**
|
|
42
|
+
* Handler constructors the target Spot announced with `addTimer(...)` during
|
|
43
|
+
* Configure. Together with `handlers.addTimerHandler(...)` they form the
|
|
44
|
+
* table that resolves a restored timer's handler by name.
|
|
45
|
+
*/
|
|
46
|
+
configureTimerHandlers = new Set();
|
|
47
|
+
relocationHandlersResolved = false;
|
|
33
48
|
constructor(_metrics, flowCreationEnabled = () => true, executionSerialForTimer, executionAllowed = () => true, executeTimer, isTimerExecuting, clock) {
|
|
34
49
|
this.flowCreationEnabled = flowCreationEnabled;
|
|
35
50
|
this.executionSerialForTimer = executionSerialForTimer;
|
|
@@ -49,43 +64,135 @@ class ZLinkSpotTimerRegistry {
|
|
|
49
64
|
}
|
|
50
65
|
async add(name, periodMs, options, handlerType, serial, spot, providerResolver, signal, reportFailure) {
|
|
51
66
|
(0, TimerRegistrationValidator_1.validateTimerRegistration)(name, periodMs, options);
|
|
67
|
+
const initializing = this.initializing;
|
|
68
|
+
if (initializing && !this.relocationHandlersResolved) {
|
|
69
|
+
this.configureTimerHandlers.add(handlerType);
|
|
70
|
+
}
|
|
52
71
|
(0, abort_1.throwIfAborted)(signal);
|
|
72
|
+
(0, handler_instance_scope_1.prepareHandlerInstance)(providerResolver, handlerType);
|
|
53
73
|
const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(spot, handlerType, providerResolver);
|
|
54
|
-
const prepared = await this.lane.run(() => this.prepareAddCore(name));
|
|
55
|
-
if (prepared.previous !== undefined)
|
|
56
|
-
await prepared.previous.timer.cancel(signal);
|
|
57
74
|
const executionSerial = this.executeTimer === undefined
|
|
58
75
|
? (this.executionSerialForTimer?.(name, serial) ?? serial)
|
|
59
76
|
: undefined;
|
|
60
77
|
if (this.executionBarrier !== undefined)
|
|
61
78
|
executionSerial?.setExecutionBarrier(this.executionBarrier);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
const binding = {
|
|
80
|
+
handler: handler,
|
|
81
|
+
spot,
|
|
82
|
+
executionSerial,
|
|
83
|
+
reportFailure
|
|
84
|
+
};
|
|
85
|
+
const prepared = await this.lane.run(() => this.prepareAddCore(name, handlerType.name, initializing, binding));
|
|
86
|
+
if (prepared.kind === 'reattached')
|
|
87
|
+
return prepared.handle;
|
|
88
|
+
if (prepared.previous !== undefined)
|
|
89
|
+
await prepared.previous.timer.cancel(signal);
|
|
90
|
+
const slot = { binding };
|
|
91
|
+
const timer = this.createTimer(name, prepared.generation, periodMs, options, slot);
|
|
92
|
+
const handle = new ZLinkRegisteredTimer(this, name, prepared.generation, timer);
|
|
93
|
+
const registered = await this.lane.run(() => this.completeAddCore(name, {
|
|
94
|
+
generation: prepared.generation,
|
|
95
|
+
handlerType: handlerType.name,
|
|
96
|
+
timer,
|
|
97
|
+
handle,
|
|
98
|
+
restored: false,
|
|
99
|
+
slot
|
|
100
|
+
}));
|
|
101
|
+
if (!registered)
|
|
102
|
+
await timer.cancel(signal);
|
|
103
|
+
return handle;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Stages the source payload on a fresh relocation target before Configure.
|
|
107
|
+
* The restored registrations keep their schedule and stay frozen until Ready.
|
|
108
|
+
*/
|
|
109
|
+
stageRelocation(states) {
|
|
110
|
+
if (this.frozen || this.timers.size !== 0) {
|
|
111
|
+
throw new Error('Timer relocation can only be restored into a fresh registry.');
|
|
112
|
+
}
|
|
113
|
+
const restored = states.map((state) => {
|
|
114
|
+
if (states.some((other) => other !== state && other.name === state.name)) {
|
|
115
|
+
throw new Error(`Timer '${state.name}' appears twice in relocation state.`);
|
|
116
|
+
}
|
|
117
|
+
const options = {
|
|
118
|
+
overrunPolicy: state.overrunPolicy,
|
|
119
|
+
maxCatchUpTicks: state.maxCatchUpTicks,
|
|
120
|
+
stopOnUnhandledException: state.stopOnUnhandledException
|
|
77
121
|
};
|
|
78
|
-
|
|
79
|
-
|
|
122
|
+
(0, TimerRegistrationValidator_1.validateTimerRegistration)(state.name, state.periodMs, options);
|
|
123
|
+
const slot = { binding: undefined };
|
|
124
|
+
const timer = this.createTimer(state.name, 1n, state.periodMs, options, slot, state);
|
|
125
|
+
return [
|
|
126
|
+
state.name,
|
|
127
|
+
{
|
|
128
|
+
generation: 1n,
|
|
129
|
+
handlerType: state.handlerType,
|
|
130
|
+
timer,
|
|
131
|
+
handle: new ZLinkRegisteredTimer(this, state.name, 1n, timer),
|
|
132
|
+
restored: true,
|
|
133
|
+
slot
|
|
134
|
+
}
|
|
135
|
+
];
|
|
136
|
+
});
|
|
137
|
+
this.frozen = true;
|
|
138
|
+
for (const [name, entry] of restored) {
|
|
139
|
+
this.generations.set(name, entry.generation);
|
|
140
|
+
this.timers.set(name, entry);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** Runs one relocation-target initialization callback inside the reattach window. */
|
|
144
|
+
async runRelocationInitialization(operation) {
|
|
145
|
+
if (!this.frozen || this.initializing) {
|
|
146
|
+
throw new Error('Timer relocation initialization is not active.');
|
|
147
|
+
}
|
|
148
|
+
this.initializing = true;
|
|
149
|
+
try {
|
|
150
|
+
return await operation();
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
this.initializing = false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* After Configure, resolves every restored timer's handler constructor by
|
|
158
|
+
* name among the constructors the Spot announced in Configure: `addTimer(...)`
|
|
159
|
+
* there or `handlers.addTimerHandler(...)`. A restored key that Configure did
|
|
160
|
+
* not reattach is registered with the resolved constructor so it survives
|
|
161
|
+
* Ready without re-registration. No match or more than one match fails the
|
|
162
|
+
* target restore.
|
|
163
|
+
*/
|
|
164
|
+
async resolveRelocationHandlers(declared, register) {
|
|
165
|
+
if (!this.frozen || !this.initializing || this.relocationHandlersResolved) {
|
|
166
|
+
throw new Error('Timer relocation handler resolution is not active.');
|
|
167
|
+
}
|
|
168
|
+
this.relocationHandlersResolved = true;
|
|
169
|
+
const constructors = [...new Set([...declared, ...this.configureTimerHandlers])];
|
|
170
|
+
const restored = await this.lane.run(() => [...this.timers.entries()].filter(([, entry]) => entry.restored));
|
|
171
|
+
for (const [name, entry] of restored) {
|
|
172
|
+
const matches = constructors.filter((type) => type.name === entry.handlerType);
|
|
173
|
+
if (matches.length !== 1) {
|
|
174
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RelocationFailed, matches.length === 0
|
|
175
|
+
? `Timer '${name}' handler '${entry.handlerType}' is not declared. Register its timer with context.addTimer(...) in configure(), or declare it with context.handlers.addTimerHandler(Handler) in configure().`
|
|
176
|
+
: `Timer '${name}' handler '${entry.handlerType}' is ambiguous: ${matches.length} declared constructors share the name.`);
|
|
80
177
|
}
|
|
81
|
-
|
|
82
|
-
await
|
|
178
|
+
if (entry.slot.binding === undefined) {
|
|
179
|
+
await register(name, entry.timer.periodMs, matches[0]);
|
|
83
180
|
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/** Ready: starts the restored and newly registered timers. */
|
|
184
|
+
async publishRelocation() {
|
|
185
|
+
await this.lane.run(() => {
|
|
186
|
+
for (const [name, entry] of this.timers) {
|
|
187
|
+
if (entry.slot.binding === undefined) {
|
|
188
|
+
throw new Error(`Restored timer '${name}' has no resolved handler at Ready.`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
this.frozen = false;
|
|
192
|
+
for (const entry of this.timers.values()) {
|
|
193
|
+
(0, state_lane_1.startOutsideStateLane)(() => entry.timer.resume());
|
|
194
|
+
}
|
|
195
|
+
});
|
|
89
196
|
}
|
|
90
197
|
async dispose() {
|
|
91
198
|
const timers = await this.lane.run(() => {
|
|
@@ -101,7 +208,10 @@ class ZLinkSpotTimerRegistry {
|
|
|
101
208
|
await Promise.all(finalizations.filter((_, index) => timers[index].wait));
|
|
102
209
|
}
|
|
103
210
|
async captureRelocation() {
|
|
104
|
-
const timers = await this.lane.run(() =>
|
|
211
|
+
const timers = await this.lane.run(() => {
|
|
212
|
+
this.frozen = true;
|
|
213
|
+
return [...this.timers.entries()].sort(([left], [right]) => left.localeCompare(right));
|
|
214
|
+
});
|
|
105
215
|
const states = [];
|
|
106
216
|
for (const [name, entry] of timers) {
|
|
107
217
|
const state = await entry.timer.captureRelocation(entry.handlerType);
|
|
@@ -111,21 +221,12 @@ class ZLinkSpotTimerRegistry {
|
|
|
111
221
|
}
|
|
112
222
|
return states;
|
|
113
223
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
224
|
+
/** Source abort: the captured timers continue from their own unchanged cursor. */
|
|
225
|
+
abortRelocation() {
|
|
226
|
+
this.frozen = false;
|
|
227
|
+
for (const entry of this.timers.values()) {
|
|
228
|
+
(0, state_lane_1.startOutsideStateLane)(() => entry.timer.resume());
|
|
118
229
|
}
|
|
119
|
-
for (const [name, entry] of this.timers) {
|
|
120
|
-
const state = byName.get(name);
|
|
121
|
-
if (state === undefined) {
|
|
122
|
-
throw new Error(`Timer '${name}' is missing from relocation state.`);
|
|
123
|
-
}
|
|
124
|
-
entry.timer.restoreRelocation(state, entry.handlerType);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
abortRelocation(states) {
|
|
128
|
-
this.restoreRelocation(states);
|
|
129
230
|
}
|
|
130
231
|
async commitRelocation() {
|
|
131
232
|
await this.dispose();
|
|
@@ -135,17 +236,58 @@ class ZLinkSpotTimerRegistry {
|
|
|
135
236
|
await this.lane.run(() => this.cancelCore(name, generation, timer));
|
|
136
237
|
await timer.cancel(signal);
|
|
137
238
|
}
|
|
138
|
-
|
|
239
|
+
createTimer(name, generation, periodMs, options, slot, cursor) {
|
|
240
|
+
let callbackStarted = false;
|
|
241
|
+
const timer = (0, state_lane_1.startOutsideStateLane)(() => new ZLinkManagedTimer(name, periodMs, normalizeTimerOptions(options), async (tick) => {
|
|
242
|
+
callbackStarted = false;
|
|
243
|
+
const binding = slot.binding;
|
|
244
|
+
if (binding === undefined)
|
|
245
|
+
return;
|
|
246
|
+
const timerFlow = (0, flow_context_1.createInboundFlow)(undefined, 'Timer', this.flowCreationEnabled(), undefined);
|
|
247
|
+
const operation = () => {
|
|
248
|
+
const current = this.timers.get(name);
|
|
249
|
+
if (current === undefined ||
|
|
250
|
+
current.generation !== generation ||
|
|
251
|
+
current.timer !== timer) {
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
if (!this.executionAllowed())
|
|
255
|
+
return undefined;
|
|
256
|
+
callbackStarted = true;
|
|
257
|
+
return (0, flow_context_1.runWithFlow)(timerFlow, () => binding.handler.handle(binding.spot, tick));
|
|
258
|
+
};
|
|
259
|
+
if (this.executeTimer !== undefined) {
|
|
260
|
+
await this.executeTimer(name, operation);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
await binding.executionSerial.execute(operation);
|
|
264
|
+
}
|
|
265
|
+
}, (tick, cause, event) => slot.binding?.reportFailure?.(tick, cause, event), () => callbackStarted, this.clock, { paused: true, cursor }));
|
|
266
|
+
return timer;
|
|
267
|
+
}
|
|
268
|
+
prepareAddCore(name, handlerType, initializing, binding) {
|
|
269
|
+
if (this.frozen && !initializing) {
|
|
270
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Timer '${name}' registration is sealed for relocation.`);
|
|
271
|
+
}
|
|
139
272
|
const previous = this.timers.get(name);
|
|
273
|
+
if (initializing && previous?.restored === true) {
|
|
274
|
+
if (previous.handlerType !== handlerType) {
|
|
275
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Timer '${name}' was restored with handler '${previous.handlerType}', not '${handlerType}'.`);
|
|
276
|
+
}
|
|
277
|
+
previous.slot.binding = binding;
|
|
278
|
+
return { kind: 'reattached', handle: previous.handle };
|
|
279
|
+
}
|
|
140
280
|
this.timers.delete(name);
|
|
141
281
|
const generation = (this.generations.get(name) ?? 0n) + 1n;
|
|
142
282
|
this.generations.set(name, generation);
|
|
143
|
-
return { previous, generation };
|
|
283
|
+
return { kind: 'registered', previous, generation };
|
|
144
284
|
}
|
|
145
|
-
completeAddCore(name,
|
|
146
|
-
if (this.generations.get(name) !== generation)
|
|
285
|
+
completeAddCore(name, entry) {
|
|
286
|
+
if (this.generations.get(name) !== entry.generation)
|
|
147
287
|
return false;
|
|
148
|
-
this.timers.set(name,
|
|
288
|
+
this.timers.set(name, entry);
|
|
289
|
+
if (!this.frozen)
|
|
290
|
+
(0, state_lane_1.startOutsideStateLane)(() => entry.timer.resume());
|
|
149
291
|
return true;
|
|
150
292
|
}
|
|
151
293
|
cancelCore(name, generation, timer) {
|
|
@@ -200,13 +342,21 @@ class ZLinkManagedTimer {
|
|
|
200
342
|
pausedForRelocation = false;
|
|
201
343
|
startedAtMs;
|
|
202
344
|
startedAtUnixMs;
|
|
345
|
+
/** DeliveryIndex and ScheduledIndex of the last completed tick. */
|
|
203
346
|
deliveryIndex = 0n;
|
|
204
347
|
lastScheduledIndex = 0n;
|
|
348
|
+
/**
|
|
349
|
+
* The selected tick whose callback has not completed (Spot timer §1). It is
|
|
350
|
+
* the only pending tick a relocation captures, and a restored timer delivers
|
|
351
|
+
* it before it selects another tick.
|
|
352
|
+
*/
|
|
353
|
+
pendingScheduledIndex;
|
|
205
354
|
timeout;
|
|
206
|
-
|
|
355
|
+
/** The dispatch in flight, from its timer callback until `completeFireCore`. */
|
|
356
|
+
running;
|
|
207
357
|
dispatchFailure;
|
|
208
358
|
finalization;
|
|
209
|
-
constructor(name, periodMs, options, onTick, onFailure, shouldWaitForRunningOnCancel = () => true, clock = systemTimerClock) {
|
|
359
|
+
constructor(name, periodMs, options, onTick, onFailure, shouldWaitForRunningOnCancel = () => true, clock = systemTimerClock, start = {}) {
|
|
210
360
|
this.name = name;
|
|
211
361
|
this.periodMs = periodMs;
|
|
212
362
|
this.options = options;
|
|
@@ -214,8 +364,20 @@ class ZLinkManagedTimer {
|
|
|
214
364
|
this.onFailure = onFailure;
|
|
215
365
|
this.shouldWaitForRunningOnCancel = shouldWaitForRunningOnCancel;
|
|
216
366
|
this.clock = clock;
|
|
217
|
-
|
|
218
|
-
|
|
367
|
+
const cursor = start.cursor;
|
|
368
|
+
if (cursor === undefined) {
|
|
369
|
+
this.startedAtMs = clock.now();
|
|
370
|
+
this.startedAtUnixMs = clock.utcNow();
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
validateRelocationCursor(name, periodMs, cursor);
|
|
374
|
+
this.startedAtUnixMs = cursor.startedAtUnixMs;
|
|
375
|
+
this.startedAtMs = clock.now() - Math.max(0, clock.utcNow() - cursor.startedAtUnixMs);
|
|
376
|
+
this.deliveryIndex = cursor.deliveryIndex;
|
|
377
|
+
this.lastScheduledIndex = cursor.lastScheduledIndex;
|
|
378
|
+
this.pendingScheduledIndex = cursor.pendingTicks[0]?.scheduledIndex;
|
|
379
|
+
}
|
|
380
|
+
this.pausedForRelocation = start.paused === true;
|
|
219
381
|
this.scheduleNext();
|
|
220
382
|
}
|
|
221
383
|
get isDisposed() {
|
|
@@ -260,51 +422,34 @@ class ZLinkManagedTimer {
|
|
|
260
422
|
deliveryIndex: this.deliveryIndex,
|
|
261
423
|
lastScheduledIndex: this.lastScheduledIndex,
|
|
262
424
|
nextDueAtUnixMs: this.startedAtUnixMs + Number(this.lastScheduledIndex + 1n) * this.periodMs,
|
|
263
|
-
pendingTicks:
|
|
425
|
+
pendingTicks: this.pendingScheduledIndex === undefined
|
|
426
|
+
? []
|
|
427
|
+
: [this.pendingTick(this.pendingScheduledIndex)]
|
|
264
428
|
}));
|
|
265
429
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
state.handlerType !== handlerType ||
|
|
271
|
-
state.periodMs !== this.periodMs ||
|
|
272
|
-
state.overrunPolicy !== this.options.overrunPolicy ||
|
|
273
|
-
state.maxCatchUpTicks !== this.options.maxCatchUpTicks ||
|
|
274
|
-
state.stopOnUnhandledException !== this.options.stopOnUnhandledException ||
|
|
275
|
-
!Number.isSafeInteger(state.startedAtUnixMs) ||
|
|
276
|
-
state.deliveryIndex < 0n ||
|
|
277
|
-
state.lastScheduledIndex < 0n ||
|
|
278
|
-
!Number.isSafeInteger(state.nextDueAtUnixMs) ||
|
|
279
|
-
state.nextDueAtUnixMs !==
|
|
280
|
-
state.startedAtUnixMs + Number(state.lastScheduledIndex + 1n) * state.periodMs ||
|
|
281
|
-
state.pendingTicks.length !== 0) {
|
|
282
|
-
throw new Error(`Timer '${this.name}' relocation contract does not match its registration.`);
|
|
283
|
-
}
|
|
284
|
-
if (this.timeout !== undefined)
|
|
285
|
-
this.clock.clearTimeout(this.timeout);
|
|
286
|
-
this.timeout = undefined;
|
|
287
|
-
this.startedAtUnixMs = state.startedAtUnixMs;
|
|
288
|
-
this.startedAtMs = this.clock.now() - Math.max(0, this.clock.utcNow() - state.startedAtUnixMs);
|
|
289
|
-
this.deliveryIndex = state.deliveryIndex;
|
|
290
|
-
this.lastScheduledIndex = state.lastScheduledIndex;
|
|
430
|
+
/** Starts a timer created paused, or continues one paused by a relocation capture. */
|
|
431
|
+
resume() {
|
|
432
|
+
if (this.disposed || !this.pausedForRelocation)
|
|
433
|
+
return;
|
|
291
434
|
this.pausedForRelocation = false;
|
|
292
435
|
this.scheduleNext();
|
|
293
436
|
}
|
|
294
437
|
scheduleNext() {
|
|
295
|
-
|
|
438
|
+
// The dispatch in flight schedules the next tick when it completes.
|
|
439
|
+
if (this.disposed || this.pausedForRelocation || this.running !== undefined) {
|
|
296
440
|
return;
|
|
297
441
|
}
|
|
298
|
-
const delayMs = this.
|
|
299
|
-
?
|
|
300
|
-
:
|
|
301
|
-
|
|
442
|
+
const delayMs = this.pendingScheduledIndex !== undefined
|
|
443
|
+
? 0
|
|
444
|
+
: this.options.overrunPolicy === contracts_1.ZLinkTimerOverrunPolicy.DelayNextTick
|
|
445
|
+
? this.periodMs
|
|
446
|
+
: Math.max(0, Number(this.lastScheduledIndex + 1n) * this.periodMs - this.elapsedMs());
|
|
447
|
+
this.timeout = (0, state_lane_1.startOutsideStateLane)(() => this.clock.setTimeout(() => {
|
|
302
448
|
this.timeout = undefined;
|
|
303
|
-
|
|
304
|
-
this.running = execution.then(() => undefined, (cause) => this.lane.run(() => {
|
|
449
|
+
this.running = this.fire().then(() => undefined, (cause) => this.lane.run(() => {
|
|
305
450
|
this.dispatchFailure ??= { cause };
|
|
306
451
|
}));
|
|
307
|
-
}, delayMs);
|
|
452
|
+
}, delayMs));
|
|
308
453
|
}
|
|
309
454
|
async fire() {
|
|
310
455
|
const prepared = await this.lane.run(() => this.prepareFireCore());
|
|
@@ -315,12 +460,18 @@ class ZLinkManagedTimer {
|
|
|
315
460
|
await this.onTick(prepared.tick);
|
|
316
461
|
}
|
|
317
462
|
catch (cause) {
|
|
463
|
+
// A tick whose callback had not started when a relocation captured it
|
|
464
|
+
// belongs to the capture: the target delivers it, so the source neither
|
|
465
|
+
// reports nor completes it.
|
|
466
|
+
const started = this.shouldWaitForRunningOnCancel();
|
|
467
|
+
if (!started && (await this.lane.run(() => this.pausedForRelocation)))
|
|
468
|
+
return;
|
|
318
469
|
shouldContinue = !this.options.stopOnUnhandledException;
|
|
319
470
|
await this.onFailure?.(prepared.tick, cause, shouldContinue
|
|
320
471
|
? internal_event_contracts_1.ZLinkSpotEventKind.TimerHandlerFailed
|
|
321
472
|
: internal_event_contracts_1.ZLinkSpotEventKind.TimerStoppedAfterUnhandledException);
|
|
322
473
|
}
|
|
323
|
-
await this.lane.run(() => this.completeFireCore(
|
|
474
|
+
await this.lane.run(() => this.completeFireCore(shouldContinue));
|
|
324
475
|
}
|
|
325
476
|
cancelCore() {
|
|
326
477
|
this.disposed = true;
|
|
@@ -328,7 +479,7 @@ class ZLinkManagedTimer {
|
|
|
328
479
|
this.timeout = undefined;
|
|
329
480
|
return {
|
|
330
481
|
timeout,
|
|
331
|
-
running: this.shouldWaitForRunningOnCancel() ? this.running :
|
|
482
|
+
running: this.shouldWaitForRunningOnCancel() ? this.running : undefined
|
|
332
483
|
};
|
|
333
484
|
}
|
|
334
485
|
async completeFinalization(start, finalization) {
|
|
@@ -368,34 +519,39 @@ class ZLinkManagedTimer {
|
|
|
368
519
|
this.clock.clearTimeout(this.timeout);
|
|
369
520
|
this.timeout = undefined;
|
|
370
521
|
}
|
|
371
|
-
return { running: this.shouldWaitForRunningOnCancel() ? this.running :
|
|
522
|
+
return { running: this.shouldWaitForRunningOnCancel() ? this.running : undefined };
|
|
372
523
|
}
|
|
373
524
|
prepareFireCore() {
|
|
374
525
|
if (this.disposed)
|
|
375
526
|
return undefined;
|
|
376
|
-
|
|
377
|
-
const
|
|
527
|
+
this.pendingScheduledIndex ??= this.selectScheduledIndex();
|
|
528
|
+
const pending = this.pendingTick(this.pendingScheduledIndex);
|
|
378
529
|
const startedElapsedMs = this.elapsedMs();
|
|
379
|
-
const scheduledElapsedMs = Number(scheduledIndex) * this.periodMs;
|
|
380
|
-
this.deliveryIndex += 1n;
|
|
530
|
+
const scheduledElapsedMs = Number(pending.scheduledIndex) * this.periodMs;
|
|
381
531
|
return {
|
|
382
|
-
scheduledIndex,
|
|
383
532
|
tick: {
|
|
384
533
|
name: this.name,
|
|
385
|
-
deliveryIndex:
|
|
386
|
-
scheduledIndex,
|
|
534
|
+
deliveryIndex: pending.deliveryIndex,
|
|
535
|
+
scheduledIndex: pending.scheduledIndex,
|
|
387
536
|
periodMs: this.periodMs,
|
|
388
|
-
scheduledAt: new Date(
|
|
537
|
+
scheduledAt: new Date(pending.scheduledAtUnixMs),
|
|
389
538
|
startedAt: new Date(this.clock.utcNow()),
|
|
390
539
|
scheduledElapsedMs,
|
|
391
540
|
startedElapsedMs,
|
|
392
541
|
delayMs: startedElapsedMs - scheduledElapsedMs,
|
|
393
|
-
skippedTicks
|
|
542
|
+
skippedTicks: pending.skippedTicks
|
|
394
543
|
}
|
|
395
544
|
};
|
|
396
545
|
}
|
|
397
|
-
|
|
398
|
-
|
|
546
|
+
/** The tick info of the pending tick at `scheduledIndex` after the completed cursor. */
|
|
547
|
+
pendingTick(scheduledIndex) {
|
|
548
|
+
return relocationPendingTick(this.startedAtUnixMs, this.periodMs, this.deliveryIndex, this.lastScheduledIndex, scheduledIndex);
|
|
549
|
+
}
|
|
550
|
+
completeFireCore(shouldContinue) {
|
|
551
|
+
this.deliveryIndex += 1n;
|
|
552
|
+
this.lastScheduledIndex = this.pendingScheduledIndex;
|
|
553
|
+
this.pendingScheduledIndex = undefined;
|
|
554
|
+
this.running = undefined;
|
|
399
555
|
if (!shouldContinue) {
|
|
400
556
|
this.disposed = true;
|
|
401
557
|
return;
|
|
@@ -427,8 +583,37 @@ class ZLinkManagedTimer {
|
|
|
427
583
|
}
|
|
428
584
|
}
|
|
429
585
|
exports.ZLinkManagedTimer = ZLinkManagedTimer;
|
|
430
|
-
function
|
|
431
|
-
|
|
586
|
+
function validateRelocationCursor(name, periodMs, state) {
|
|
587
|
+
if (state.name !== name ||
|
|
588
|
+
state.periodMs !== periodMs ||
|
|
589
|
+
!Number.isSafeInteger(state.startedAtUnixMs) ||
|
|
590
|
+
state.deliveryIndex < 0n ||
|
|
591
|
+
state.lastScheduledIndex < 0n ||
|
|
592
|
+
!Number.isSafeInteger(state.nextDueAtUnixMs) ||
|
|
593
|
+
state.nextDueAtUnixMs !==
|
|
594
|
+
state.startedAtUnixMs + Number(state.lastScheduledIndex + 1n) * state.periodMs ||
|
|
595
|
+
state.pendingTicks.length > 1 ||
|
|
596
|
+
state.pendingTicks.some((pending) => {
|
|
597
|
+
const expected = relocationPendingTick(state.startedAtUnixMs, state.periodMs, state.deliveryIndex, state.lastScheduledIndex, pending.scheduledIndex);
|
|
598
|
+
return (pending.scheduledIndex <= state.lastScheduledIndex ||
|
|
599
|
+
pending.deliveryIndex !== expected.deliveryIndex ||
|
|
600
|
+
pending.scheduledAtUnixMs !== expected.scheduledAtUnixMs ||
|
|
601
|
+
pending.skippedTicks !== expected.skippedTicks);
|
|
602
|
+
})) {
|
|
603
|
+
throw new Error(`Timer '${name}' relocation state is invalid.`);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Spot timer §1: the tick info that follows the completed cursor. A timer holds
|
|
608
|
+
* at most one pending tick, so its DeliveryIndex is the next one.
|
|
609
|
+
*/
|
|
610
|
+
function relocationPendingTick(startedAtUnixMs, periodMs, deliveryIndex, lastScheduledIndex, scheduledIndex) {
|
|
611
|
+
return {
|
|
612
|
+
deliveryIndex: deliveryIndex + 1n,
|
|
613
|
+
scheduledIndex,
|
|
614
|
+
scheduledAtUnixMs: startedAtUnixMs + Number(scheduledIndex) * periodMs,
|
|
615
|
+
skippedTicks: scheduledIndex - lastScheduledIndex - 1n
|
|
616
|
+
};
|
|
432
617
|
}
|
|
433
618
|
function createTimerDiagnostics(sourceName, spotId, isEntrySpot, timerName, handlerType, publisher) {
|
|
434
619
|
if (publisher === undefined) {
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import type { RoutingId } from '../../contracts';
|
|
2
|
+
import { type ServiceSessionRelocationRoute, type ServiceSessionRelocationSeal, type ServiceSessionRelocationSealed } from '../foundation/service-stateful-wire-codec';
|
|
3
|
+
export interface ZLinkPreparedSessionRelocationSeal {
|
|
4
|
+
readonly response: ServiceSessionRelocationSealed;
|
|
5
|
+
readonly ready: Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
interface SessionRelocationResult extends ZLinkPreparedSessionRelocationSeal {
|
|
8
|
+
readonly key: string;
|
|
9
|
+
readonly fingerprint: string;
|
|
10
|
+
readonly seal?: ZLinkActorSessionRelocationState;
|
|
11
|
+
}
|
|
1
12
|
export declare const DEFAULT_TERMINAL_RELOCATION_CAPACITY = 4096;
|
|
2
13
|
export interface ZLinkActorSessionBindingActor {
|
|
3
14
|
readonly actorId: string;
|
|
@@ -7,7 +18,7 @@ export interface ZLinkActorSessionBindingActor {
|
|
|
7
18
|
};
|
|
8
19
|
}
|
|
9
20
|
export interface ZLinkActorSessionBindingContext<TActor extends ZLinkActorSessionBindingActor> {
|
|
10
|
-
readonly routingId?:
|
|
21
|
+
readonly routingId?: RoutingId;
|
|
11
22
|
readonly actorSlotControls?: {
|
|
12
23
|
enqueueBound(actorSlot: number, actorId: string): Promise<void>;
|
|
13
24
|
enqueueUnbound(actorSlot: number): Promise<void>;
|
|
@@ -20,17 +31,18 @@ export interface ZLinkActorSessionRoute<TContext extends ZLinkActorSessionBindin
|
|
|
20
31
|
readonly actor: TActor;
|
|
21
32
|
readonly bindingToken: string;
|
|
22
33
|
readonly actorSlot?: number;
|
|
23
|
-
readonly sessionIdentity?:
|
|
34
|
+
readonly sessionIdentity?: RoutingId;
|
|
24
35
|
readonly activeFrames: ZLinkActorSessionActiveFrames;
|
|
25
36
|
sealId?: string;
|
|
37
|
+
sessionRelocationResult?: SessionRelocationResult;
|
|
26
38
|
authorityFence?: ZLinkActorSessionAuthorityFence;
|
|
27
39
|
}
|
|
28
40
|
export interface ZLinkActorSessionRelocationClaim {
|
|
29
41
|
readonly actorId: string;
|
|
30
42
|
readonly actorGeneration: bigint;
|
|
31
43
|
readonly bindingGeneration: bigint;
|
|
32
|
-
readonly sessionIdentity?:
|
|
33
|
-
readonly actorNodeRid?:
|
|
44
|
+
readonly sessionIdentity?: RoutingId;
|
|
45
|
+
readonly actorNodeRid?: RoutingId;
|
|
34
46
|
readonly actorNodeGeneration?: bigint;
|
|
35
47
|
readonly sealId: string;
|
|
36
48
|
}
|
|
@@ -57,6 +69,21 @@ interface ZLinkActorSessionActiveFrames {
|
|
|
57
69
|
captureBySeal(): void;
|
|
58
70
|
}>;
|
|
59
71
|
}
|
|
72
|
+
interface ZLinkActorSessionRelocationState {
|
|
73
|
+
readonly actorId: string;
|
|
74
|
+
readonly actorGeneration: bigint;
|
|
75
|
+
readonly bindingGeneration: bigint;
|
|
76
|
+
readonly sessionIdentity?: RoutingId;
|
|
77
|
+
readonly actorNodeRid?: RoutingId;
|
|
78
|
+
readonly actorNodeGeneration?: bigint;
|
|
79
|
+
readonly sealId: string;
|
|
80
|
+
phase: 'sealed' | 'applying' | 'applied' | 'terminal';
|
|
81
|
+
applyFingerprint?: string;
|
|
82
|
+
applyPromise?: Promise<void>;
|
|
83
|
+
readonly ready: Promise<void>;
|
|
84
|
+
readonly terminal: Promise<void>;
|
|
85
|
+
readonly resolveTerminal: () => void;
|
|
86
|
+
}
|
|
60
87
|
export interface ZLinkActorSessionAuthorityFence {
|
|
61
88
|
readonly authorityOwnerGeneration: bigint;
|
|
62
89
|
readonly ownerLeaseGeneration: bigint;
|
|
@@ -79,21 +106,22 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
79
106
|
private readonly sealWaiters;
|
|
80
107
|
private readonly activeFrameWaiters;
|
|
81
108
|
private readonly relocations;
|
|
109
|
+
private readonly absentSessionRelocationResults;
|
|
82
110
|
private readonly terminalRelocations;
|
|
83
111
|
constructor(terminalRelocationCapacity?: number, sealWaitTimeoutMs?: number, errorSink?: (() => {
|
|
84
112
|
reportRuntimeTaskException(taskName: string, error: unknown): void;
|
|
85
113
|
} | undefined) | undefined);
|
|
86
|
-
bind(context: TContext, actor: TActor, bindingToken: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?:
|
|
114
|
+
bind(context: TContext, actor: TActor, bindingToken: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?: RoutingId, commitActor?: () => void): Promise<void>;
|
|
87
115
|
private commitCore;
|
|
88
116
|
private issueActorSlot;
|
|
89
|
-
replace(previous: ZLinkActorSessionRoute<TContext, TActor>, context: TContext, actor: TActor, bindingToken: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?:
|
|
90
|
-
replaceAndReleaseSeal(previous: ZLinkActorSessionRoute<TContext, TActor>, context: TContext, actor: TActor, bindingToken: string, sealId: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?:
|
|
117
|
+
replace(previous: ZLinkActorSessionRoute<TContext, TActor>, context: TContext, actor: TActor, bindingToken: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?: RoutingId, commitActor?: () => void): Promise<void>;
|
|
118
|
+
replaceAndReleaseSeal(previous: ZLinkActorSessionRoute<TContext, TActor>, context: TContext, actor: TActor, bindingToken: string, sealId: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?: RoutingId, commitActor?: () => void): Promise<void>;
|
|
91
119
|
private replaceAndReleaseSealCore;
|
|
92
120
|
find(actorId: string): Promise<TActor | undefined>;
|
|
93
121
|
private findCore;
|
|
94
122
|
route(actorId: string): Promise<ZLinkActorSessionRoute<TContext, TActor> | undefined>;
|
|
95
123
|
/** Selects the route only when it is the exact Session binding (§8.1 validation values). */
|
|
96
|
-
routeForSessionBinding(actorId: string, sessionRid:
|
|
124
|
+
routeForSessionBinding(actorId: string, sessionRid: RoutingId, bindingGeneration?: bigint): Promise<ZLinkActorSessionRoute<TContext, TActor> | undefined>;
|
|
97
125
|
private routeCore;
|
|
98
126
|
capturePendingReplyClaim(actorId: string, actor: ZLinkActorSessionBindingActor, bindingToken: string): Promise<{
|
|
99
127
|
readonly context: TContext;
|
|
@@ -131,11 +159,16 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
131
159
|
seal(actorId: string, sealId: string, expected: ZLinkActorSessionRouteFence): Promise<void>;
|
|
132
160
|
private sealCore;
|
|
133
161
|
sealAndWait(actorId: string, sealId: string, expected: ZLinkActorSessionRouteFence, signal?: AbortSignal): Promise<void>;
|
|
162
|
+
prepareSessionRelocationSeal(value: ServiceSessionRelocationSeal, signal?: AbortSignal): Promise<ZLinkPreparedSessionRelocationSeal | undefined>;
|
|
163
|
+
private prepareSessionRelocationSealCore;
|
|
164
|
+
acceptSessionRelocationRoute(value: ServiceSessionRelocationRoute, apply: () => Promise<void>): Promise<boolean>;
|
|
165
|
+
clearSessionRelocationResults(): Promise<void>;
|
|
134
166
|
sealRelocation(claim: ZLinkActorSessionRelocationClaim, expected: ZLinkActorSessionRouteFence, signal?: AbortSignal): Promise<void>;
|
|
135
167
|
private prepareRelocationSeal;
|
|
136
168
|
relocationSnapshot(actorId: string, sealId: string): Promise<ZLinkActorSessionRelocationSnapshot | undefined>;
|
|
137
169
|
private relocationSnapshotCore;
|
|
138
170
|
applyRelocation(actorId: string, sealId: string, applyFingerprint: string, commitOwnerTransition: () => Promise<void>): Promise<void>;
|
|
171
|
+
private runRelocationApply;
|
|
139
172
|
private prepareRelocationApply;
|
|
140
173
|
private completeRelocationApply;
|
|
141
174
|
private failRelocationApply;
|
|
@@ -149,7 +182,7 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
149
182
|
* single physical route's disconnect, which must not disturb a relocation
|
|
150
183
|
* seal it does not own (see `clearRouteRelocation`).
|
|
151
184
|
*/
|
|
152
|
-
clearRelocation(actorId: string, error: unknown): Promise<void>;
|
|
185
|
+
clearRelocation(actorId: string, error: unknown, sealId?: string): Promise<void>;
|
|
153
186
|
private clearRelocationCore;
|
|
154
187
|
/**
|
|
155
188
|
* Spec 48 §137: a relocation seal's lifecycle is independent of any single
|
|
@@ -165,8 +198,6 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
165
198
|
private clearRouteRelocation;
|
|
166
199
|
abortSeal(actorId: string, sealId: string): Promise<boolean>;
|
|
167
200
|
private abortSealCore;
|
|
168
|
-
updateAuthorityFence(actorId: string, authorityFence: ZLinkActorSessionAuthorityFence): Promise<void>;
|
|
169
|
-
private updateAuthorityFenceCore;
|
|
170
201
|
validateSeal(actorId: string, sealId: string): Promise<boolean>;
|
|
171
202
|
private validateSealCore;
|
|
172
203
|
/** True while a relocation seal currently holds this actor's ingress. */
|