@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
|
@@ -17,12 +17,11 @@ interface ZLinkRoutedFrameAdmissionTarget {
|
|
|
17
17
|
interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
18
18
|
readonly nativeSpotId: string;
|
|
19
19
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
20
|
-
readonly isSpotClosing?: () => boolean;
|
|
21
20
|
readonly resolveActor: (actorId: string) => ZLinkActor | undefined;
|
|
22
21
|
readonly getTarget: () => ZLinkRoutedFrameAdmissionTarget & ZLinkSpot;
|
|
23
22
|
readonly defaultAccept: boolean;
|
|
24
23
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
25
|
-
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
24
|
+
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
26
25
|
readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
|
|
27
26
|
readonly routedBoundSessionReceiver?: (actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown, signal?: AbortSignal) => Promise<void>;
|
|
28
27
|
readonly routedBoundSessionResponseReceiver?: (actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown, signal?: AbortSignal) => Promise<void>;
|
|
@@ -40,7 +40,6 @@ class ZLinkSpotRoutedFrameDispatch {
|
|
|
40
40
|
});
|
|
41
41
|
this.routedActorAdmission = new spot_routed_actor_admission_1.ZLinkSpotRoutedActorAdmission({
|
|
42
42
|
serial: options.serial,
|
|
43
|
-
isSpotClosing: options.isSpotClosing,
|
|
44
43
|
getTarget: options.getTarget,
|
|
45
44
|
defaultAccept: options.defaultAccept,
|
|
46
45
|
routedActorTransferProvider: options.routedActorTransferProvider,
|
|
@@ -6,6 +6,7 @@ import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
|
6
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
7
7
|
import type { ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
|
|
8
8
|
interface ZLinkRoutedSpotPacketActivation {
|
|
9
|
+
readonly objectGeneration?: bigint;
|
|
9
10
|
readonly meshName?: string;
|
|
10
11
|
readonly spotId: RoutingId;
|
|
11
12
|
readonly spot: ZLinkSpot;
|
|
@@ -28,6 +29,9 @@ interface ZLinkRoutedSpotPacketContext {
|
|
|
28
29
|
readonly signal?: AbortSignal;
|
|
29
30
|
/** Wait until a recovered activation has actually entered its first handler. */
|
|
30
31
|
readonly awaitFirstHandlerTurn?: boolean;
|
|
32
|
+
readonly onOneWayError?: (error: unknown) => void;
|
|
33
|
+
/** Retains the caller's Instance address intent through an incarnation boundary. */
|
|
34
|
+
readonly activationRecord?: import('../foundation/service-runtime-contracts').ReceiveRecord;
|
|
31
35
|
}
|
|
32
36
|
export declare class ZLinkRoutedSpotPacketDispatch {
|
|
33
37
|
private readonly options;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkRoutedSpotPacketDispatch = void 0;
|
|
4
|
+
const dispatch_error_details_1 = require("../diagnostics/dispatch-error-details");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
5
6
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
6
7
|
const configuration_1 = require("../configuration");
|
|
@@ -58,17 +59,42 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
58
59
|
const applicationClaim = activation.meshName === undefined
|
|
59
60
|
? undefined
|
|
60
61
|
: this.options.claimApplicationWork?.(activation.meshName);
|
|
61
|
-
const
|
|
62
|
+
const originalRecord = context.activationRecord?.activationRecord;
|
|
63
|
+
const instanceIntent = originalRecord?.activation === 'missing' ||
|
|
64
|
+
(originalRecord?.activation === 'ready' && originalRecord.instanceIntent);
|
|
65
|
+
const runHandler = async (failure) => {
|
|
62
66
|
try {
|
|
67
|
+
if (failure !== undefined)
|
|
68
|
+
throw failure;
|
|
69
|
+
const current = this.options.resolveActivation(spotId);
|
|
70
|
+
if (current === undefined ||
|
|
71
|
+
(!instanceIntent &&
|
|
72
|
+
(current !== activation ||
|
|
73
|
+
(originalRecord?.activation === 'ready' &&
|
|
74
|
+
originalRecord.route.objectGeneration !== current.objectGeneration)))) {
|
|
75
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Spot '${String(spotId)}' is not active.`);
|
|
76
|
+
}
|
|
77
|
+
if (context.activationRecord?.deadlineUnixMs !== undefined &&
|
|
78
|
+
context.activationRecord.deadlineUnixMs < BigInt(Date.now())) {
|
|
79
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Spot '${String(spotId)}' request deadline has expired.`);
|
|
80
|
+
}
|
|
81
|
+
const currentRegistrations = current === activation
|
|
82
|
+
? registrations
|
|
83
|
+
: current.handlers
|
|
84
|
+
.snapshot()
|
|
85
|
+
.filter((registration) => registration.kind === 'packet' &&
|
|
86
|
+
(registration.packetName ?? registration.handlerType.name) ===
|
|
87
|
+
(packetName ?? ''));
|
|
63
88
|
// Decode only after the Spot has acquired both application admission
|
|
64
89
|
// and its execution authority.
|
|
65
90
|
const payload = decodePayload();
|
|
66
|
-
for (const registration of
|
|
67
|
-
const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(
|
|
91
|
+
for (const registration of currentRegistrations) {
|
|
92
|
+
const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(current.spot, registration.handlerType, this.options.providerResolver);
|
|
68
93
|
resolveFirstHandlerTurn?.();
|
|
69
94
|
resolveFirstHandlerTurn = undefined;
|
|
95
|
+
context.activationRecord?.onHandlerTurnStarted?.();
|
|
70
96
|
(0, application_job_queue_scope_1.releaseApplicationJobPermitBeforeHandler)();
|
|
71
|
-
response = await handler.handle(
|
|
97
|
+
response = await handler.handle(current.spot, payload, {
|
|
72
98
|
channelName: context.channelName,
|
|
73
99
|
contentType: context.contentType,
|
|
74
100
|
packetName: packetName,
|
|
@@ -94,8 +120,24 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
94
120
|
detachedApplicationPermit?.releaseAfterInternalProcessing();
|
|
95
121
|
applicationClaim?.close();
|
|
96
122
|
}
|
|
97
|
-
}, (error) =>
|
|
98
|
-
|
|
123
|
+
}, (error) => {
|
|
124
|
+
if (context.onOneWayError === undefined) {
|
|
125
|
+
this.reportFailure(spotId, packetName, context, false, error);
|
|
126
|
+
}
|
|
127
|
+
else if (resolveFirstHandlerTurn === undefined) {
|
|
128
|
+
context.onOneWayError(error);
|
|
129
|
+
}
|
|
130
|
+
}, context.workOptions, { signal: context.signal }, instanceIntent
|
|
131
|
+
? async (failure) => {
|
|
132
|
+
try {
|
|
133
|
+
await runHandler(failure);
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
detachedApplicationPermit?.releaseAfterInternalProcessing();
|
|
137
|
+
applicationClaim?.close();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
: undefined);
|
|
99
141
|
}
|
|
100
142
|
catch (error) {
|
|
101
143
|
detached = false;
|
|
@@ -103,16 +145,18 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
103
145
|
rejectFirstHandlerTurn?.(error);
|
|
104
146
|
throw error;
|
|
105
147
|
}
|
|
148
|
+
await firstHandlerTurn;
|
|
106
149
|
}
|
|
107
150
|
else {
|
|
108
151
|
if (activation.serial.isCurrentTurn) {
|
|
109
152
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Spot '${spotId}' cannot await a request to its current serial turn.`);
|
|
110
153
|
}
|
|
111
|
-
await activation.serial.execute(runHandler, context.workOptions);
|
|
154
|
+
await activation.serial.execute(runHandler, context.workOptions, instanceIntent ? runHandler : undefined);
|
|
112
155
|
}
|
|
113
156
|
}
|
|
114
157
|
catch (error) {
|
|
115
|
-
|
|
158
|
+
if (context.activationRecord?.activationRecord === undefined)
|
|
159
|
+
this.reportFailure(spotId, packetName, context, returnResponse, error);
|
|
116
160
|
throw error;
|
|
117
161
|
}
|
|
118
162
|
finally {
|
|
@@ -122,16 +166,17 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
122
166
|
return returnResponse ? response : undefined;
|
|
123
167
|
}
|
|
124
168
|
reportFailure(spotId, packetName, context, returnResponse, error) {
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
169
|
+
const reporter = this.options.dispatchErrors;
|
|
170
|
+
if (reporter?.captureEnabled() !== true)
|
|
171
|
+
return;
|
|
172
|
+
reporter.report({
|
|
173
|
+
surface: context.activationRecord?.activationRecord?.kind === 'instanceSpot'
|
|
174
|
+
? ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.InstanceSpot
|
|
175
|
+
: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
128
176
|
messageKind: returnResponse
|
|
129
177
|
? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request
|
|
130
178
|
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
131
|
-
reason:
|
|
132
|
-
frameworkErrorKind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
133
|
-
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.Backpressure
|
|
134
|
-
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
179
|
+
reason: (0, dispatch_error_details_1.dispatchReasonFromError)(error),
|
|
135
180
|
action: returnResponse ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.FailCaller : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
136
181
|
packetName,
|
|
137
182
|
channelName: context.channelName,
|
|
@@ -140,6 +185,11 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
140
185
|
});
|
|
141
186
|
}
|
|
142
187
|
reportMissing(spotId, packetName, context, returnResponse) {
|
|
188
|
+
if (context.activationRecord?.activationRecord !== undefined) {
|
|
189
|
+
if (!returnResponse && context.onOneWayError !== undefined)
|
|
190
|
+
context.onOneWayError((0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.HandlerNotFound, `SPOT route handler not found: ${packetName}`));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
143
193
|
this.options.dispatchErrors?.report({
|
|
144
194
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
145
195
|
messageKind: returnResponse
|
|
@@ -17,41 +17,27 @@ export interface ZLinkEntryActorRuntime {
|
|
|
17
17
|
}
|
|
18
18
|
export interface ZLinkSpotActorTransferRuntime {
|
|
19
19
|
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string): ZLinkDeferredJoinCompletion;
|
|
20
|
-
|
|
20
|
+
deliverDeferredJoinCompletion(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
|
|
21
21
|
getOrCreateRoutedActor(actorId: string, actorType: string, actorRef?: ActorRef, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, actorCreateRequest?: Message, signal?: AbortSignal): Promise<ZLinkRemoteActorJoinActor>;
|
|
22
22
|
materializeRoutedActor: ZLinkRoutedActorTransferProvider;
|
|
23
23
|
commitRoutedActorAuthority(actor: ZLinkActor, sourceActorRef: ActorRef, transferId: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, deadlineAtMs: number, signal?: AbortSignal): Promise<import('../locations/internal-location-contracts').ZLinkAuthoritySnapshot>;
|
|
24
|
-
rememberRoutedActorTransferTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
|
|
25
|
-
claimNativeActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string): Promise<ZLinkNativeActorJoinSnapshot>;
|
|
26
24
|
claimRoutedActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string, joinedLocation?: {
|
|
27
25
|
readonly spotGeneration: bigint;
|
|
28
26
|
readonly membershipEpoch: bigint;
|
|
29
27
|
}): Promise<void>;
|
|
30
|
-
publishRoutedActorOwnership(actor: ZLinkActor): Promise<void>;
|
|
28
|
+
publishRoutedActorOwnership(actor: ZLinkActor, sealedSession: ZLinkRemoteBoundSessionTarget | undefined): Promise<void>;
|
|
31
29
|
openRoutedActorSession(actor: ZLinkActor): Promise<void>;
|
|
32
30
|
bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void;
|
|
33
31
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
|
|
34
32
|
clearRoutedActor(actor: ZLinkActor): void;
|
|
35
|
-
rollbackNativeActorJoin(actor: ZLinkActor, snapshot: ZLinkNativeActorJoinSnapshot): Promise<void>;
|
|
36
33
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
37
34
|
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
38
35
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
39
36
|
}
|
|
40
|
-
export interface ZLinkNativeActorJoinSnapshot {
|
|
41
|
-
readonly spotId?: RoutingId;
|
|
42
|
-
readonly spot?: ZLinkSpot;
|
|
43
|
-
readonly locationSpotId?: RoutingId;
|
|
44
|
-
readonly spotMeshName?: string;
|
|
45
|
-
readonly actorRef?: ActorRef;
|
|
46
|
-
readonly spotGeneration?: bigint;
|
|
47
|
-
readonly membershipEpoch?: bigint;
|
|
48
|
-
readonly ownerNodeGeneration?: bigint;
|
|
49
|
-
}
|
|
50
37
|
export interface ZLinkSpotBoundSessionRuntime {
|
|
51
38
|
receiveRoutedBoundSession(actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
|
|
52
39
|
receiveRoutedBoundSessionResponse(actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
|
|
53
40
|
receiveRoutedBoundSessionError(actorId: string, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
|
|
54
|
-
rememberRemoteBoundSessionTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
|
|
55
41
|
resolveRemoteBoundSessionTarget(sourceNodeRid: RoutingId, sourceSessionRid: RoutingId): ZLinkRemoteBoundSessionTarget | undefined;
|
|
56
42
|
actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined;
|
|
57
43
|
sendActorResponse(actor: ZLinkActor, packetName: string, requestSeq: bigint, response: unknown, replyOptions: ZLinkActorResponseOptions, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, signal?: AbortSignal): Promise<void>;
|
|
@@ -71,7 +71,7 @@ class ZLinkSpotSerialExecutor {
|
|
|
71
71
|
*/
|
|
72
72
|
close() {
|
|
73
73
|
const children = this.closeChildren();
|
|
74
|
-
return Promise.all([children, this.spotSerial.
|
|
74
|
+
return Promise.all([children, this.spotSerial.whenIdle()]).then(() => undefined);
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* Closes the Actor and timer queues. The Spot queue stays open for the Spot
|
|
@@ -87,7 +87,7 @@ class ZLinkSpotSerialExecutor {
|
|
|
87
87
|
this.timerSerials.clear();
|
|
88
88
|
this.actorExecutors.clear();
|
|
89
89
|
this.closePromise = Promise.all([
|
|
90
|
-
...childSerials.map((serial) => serial.
|
|
90
|
+
...childSerials.map((serial) => serial.whenIdle()),
|
|
91
91
|
...actorExecutors.map((executor) => executor.close())
|
|
92
92
|
]).then(() => undefined);
|
|
93
93
|
return this.closePromise;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { ZLinkExecutionBarrier, ZLinkSpotSerialTurn } from '../execution';
|
|
1
|
+
import { ZLinkExecutionBarrier, type ZLinkExecutionBarrierClaim, ZLinkSpotSerialTurn } from '../execution';
|
|
2
2
|
import type { SpotId } from '../../contracts';
|
|
3
|
-
import
|
|
3
|
+
import type { ZLinkFrameworkException } from '../../contracts/Errors/ZLinkFrameworkException';
|
|
4
|
+
import { type ZLinkSerialSchedulerOptions, type ZLinkSerialWorkOptions, type ZLinkSerialWorkRecord } from '../execution/serial-execution-queue';
|
|
5
|
+
import type { ZLinkSerialLifecycleContext } from '../execution/serial-execution-queue';
|
|
6
|
+
export type ZLinkSpotApplicationTurnContext = ZLinkExecutionBarrierClaim & {
|
|
7
|
+
readonly replay?: (failure?: unknown) => Promise<unknown> | unknown;
|
|
8
|
+
};
|
|
4
9
|
export declare class ZLinkSpotSerialTurnExecutor {
|
|
5
10
|
private readonly yieldAllowed;
|
|
6
11
|
readonly sourceSpotId?: SpotId | undefined;
|
|
@@ -10,6 +15,7 @@ export declare class ZLinkSpotSerialTurnExecutor {
|
|
|
10
15
|
private executionBarrier;
|
|
11
16
|
private resumedOwnerTurn;
|
|
12
17
|
private lastActivityAtMs;
|
|
18
|
+
private lifecycleAdmissionClosed;
|
|
13
19
|
activeTurnId: number;
|
|
14
20
|
constructor(yieldAllowed?: boolean, sourceSpotId?: SpotId | undefined, schedulerOptions?: ZLinkSerialSchedulerOptions);
|
|
15
21
|
get isExecuting(): boolean;
|
|
@@ -17,14 +23,25 @@ export declare class ZLinkSpotSerialTurnExecutor {
|
|
|
17
23
|
get hasPendingWork(): boolean;
|
|
18
24
|
get lastActivityAt(): number;
|
|
19
25
|
get currentTurn(): ZLinkSpotSerialTurn | undefined;
|
|
20
|
-
/**
|
|
21
|
-
|
|
26
|
+
/** Waits for turns admitted through the execution barrier to complete. */
|
|
27
|
+
whenIdle(): Promise<void>;
|
|
22
28
|
closeAdmission(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Spot messaging §7 step 3: after Close ends this queue's admission, an Instance
|
|
31
|
+
* intent message is refused before admission as a released owner fence, and any
|
|
32
|
+
* other message finds no incarnation. Undefined while admission is open.
|
|
33
|
+
*/
|
|
34
|
+
applicationAdmissionRefusal(instanceIntent: boolean): ZLinkFrameworkException | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Spot messaging §7: once Close commits Closing, membership work can no longer
|
|
37
|
+
* enter this incarnation while Instance intent messages still queue behind Close.
|
|
38
|
+
*/
|
|
39
|
+
setLifecycleAdmissionClosed(closed: boolean): void;
|
|
23
40
|
/** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
|
|
24
41
|
isActiveTurn(turn: ZLinkSpotSerialTurn, turnId: number): boolean;
|
|
25
42
|
setExecutionBarrier(barrier: ZLinkExecutionBarrier): void;
|
|
26
43
|
/** Runs `operation` in serial order, one turn at a time. */
|
|
27
|
-
execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
44
|
+
execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions, replay?: (failure?: unknown) => Promise<T>): Promise<T>;
|
|
28
45
|
/**
|
|
29
46
|
* Always enqueues `operation` as its own serial turn, even when called
|
|
30
47
|
* from within the currently active turn. Detached completion callbacks use
|
|
@@ -37,15 +54,18 @@ export declare class ZLinkSpotSerialTurnExecutor {
|
|
|
37
54
|
*/
|
|
38
55
|
postOneWay(operation: () => Promise<unknown> | unknown, onError: (error: unknown) => void, workOptions?: ZLinkSerialWorkOptions, admission?: {
|
|
39
56
|
readonly signal?: AbortSignal;
|
|
40
|
-
}): Promise<void>;
|
|
57
|
+
}, replay?: (failure?: unknown) => Promise<unknown>): Promise<void>;
|
|
41
58
|
/**
|
|
42
59
|
* Enqueues the framework-owned turn that completes a boundary while normal
|
|
43
60
|
* application admission remains sealed. Callers must release the matching
|
|
44
61
|
* barrier seal after this turn finishes.
|
|
45
62
|
*/
|
|
46
63
|
postBarrierTurn<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
47
|
-
/**
|
|
64
|
+
/** Admits membership work and holds the lifecycle FIFO until its result settles. */
|
|
48
65
|
executeLifecycleOperation<T>(operation: () => Promise<T> | T): Promise<T>;
|
|
66
|
+
/** Runs owner control work that establishes or completes its own admission seal. */
|
|
67
|
+
executeControlLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
|
|
68
|
+
visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
|
|
49
69
|
private enqueueApplicationTurn;
|
|
50
70
|
private enqueueFrameworkTurn;
|
|
51
71
|
private enqueueContinuationTurn;
|
|
@@ -14,6 +14,7 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
14
14
|
executionBarrier;
|
|
15
15
|
resumedOwnerTurn;
|
|
16
16
|
lastActivityAtMs = performance.now();
|
|
17
|
+
lifecycleAdmissionClosed = false;
|
|
17
18
|
activeTurnId = 0;
|
|
18
19
|
constructor(yieldAllowed = true, sourceSpotId, schedulerOptions) {
|
|
19
20
|
this.yieldAllowed = yieldAllowed;
|
|
@@ -35,13 +36,32 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
35
36
|
get currentTurn() {
|
|
36
37
|
return (0, execution_1.captureZLinkSpotSerialTurn)(this);
|
|
37
38
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
return this.scheduler.
|
|
39
|
+
/** Waits for turns admitted through the execution barrier to complete. */
|
|
40
|
+
whenIdle() {
|
|
41
|
+
return this.scheduler.whenIdle();
|
|
41
42
|
}
|
|
42
43
|
closeAdmission() {
|
|
43
44
|
this.scheduler.closeAdmission();
|
|
44
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Spot messaging §7 step 3: after Close ends this queue's admission, an Instance
|
|
48
|
+
* intent message is refused before admission as a released owner fence, and any
|
|
49
|
+
* other message finds no incarnation. Undefined while admission is open.
|
|
50
|
+
*/
|
|
51
|
+
applicationAdmissionRefusal(instanceIntent) {
|
|
52
|
+
if (!this.scheduler.admissionClosed)
|
|
53
|
+
return undefined;
|
|
54
|
+
return instanceIntent
|
|
55
|
+
? (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'The Spot incarnation released its authority before admitting this Instance intent message.')
|
|
56
|
+
: (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, 'The Spot incarnation is closed.');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Spot messaging §7: once Close commits Closing, membership work can no longer
|
|
60
|
+
* enter this incarnation while Instance intent messages still queue behind Close.
|
|
61
|
+
*/
|
|
62
|
+
setLifecycleAdmissionClosed(closed) {
|
|
63
|
+
this.lifecycleAdmissionClosed = closed;
|
|
64
|
+
}
|
|
45
65
|
/** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
|
|
46
66
|
isActiveTurn(turn, turnId) {
|
|
47
67
|
return (this.depth > 0 &&
|
|
@@ -57,11 +77,11 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
57
77
|
this.executionBarrier = barrier;
|
|
58
78
|
}
|
|
59
79
|
/** Runs `operation` in serial order, one turn at a time. */
|
|
60
|
-
execute(operation, workOptions) {
|
|
80
|
+
execute(operation, workOptions, replay) {
|
|
61
81
|
if (this.isCurrentTurn) {
|
|
62
82
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'A Spot serial turn cannot implicitly execute another turn for the same owner.');
|
|
63
83
|
}
|
|
64
|
-
return this.enqueueApplicationTurn(operation, workOptions);
|
|
84
|
+
return this.enqueueApplicationTurn(operation, workOptions, replay);
|
|
65
85
|
}
|
|
66
86
|
/**
|
|
67
87
|
* Always enqueues `operation` as its own serial turn, even when called
|
|
@@ -75,11 +95,18 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
75
95
|
* Queues a one-way turn in serial order. Handler completion is reported
|
|
76
96
|
* through `onError` and never blocks the sender turn.
|
|
77
97
|
*/
|
|
78
|
-
async postOneWay(operation, onError, workOptions = {}, admission = {}) {
|
|
98
|
+
async postOneWay(operation, onError, workOptions = {}, admission = {}, replay) {
|
|
79
99
|
this.lastActivityAtMs = performance.now();
|
|
80
100
|
let barrierClaim;
|
|
81
101
|
try {
|
|
82
|
-
|
|
102
|
+
const entry = this.executionBarrier?.enter();
|
|
103
|
+
barrierClaim = entry instanceof Promise ? await entry : entry;
|
|
104
|
+
const refusal = this.applicationAdmissionRefusal(replay !== undefined);
|
|
105
|
+
if (refusal !== undefined)
|
|
106
|
+
throw refusal;
|
|
107
|
+
if (barrierClaim !== undefined && replay !== undefined) {
|
|
108
|
+
Object.assign(barrierClaim, { replay: (0, application_job_queue_scope_1.bindApplicationJobPermit)(replay) });
|
|
109
|
+
}
|
|
83
110
|
if (admission.signal?.aborted === true) {
|
|
84
111
|
throw new DOMException('The operation was aborted.', 'AbortError');
|
|
85
112
|
}
|
|
@@ -112,15 +139,55 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
112
139
|
postBarrierTurn(operation, workOptions) {
|
|
113
140
|
return this.enqueueFrameworkTurn(operation, workOptions);
|
|
114
141
|
}
|
|
115
|
-
/**
|
|
142
|
+
/** Admits membership work and holds the lifecycle FIFO until its result settles. */
|
|
116
143
|
executeLifecycleOperation(operation) {
|
|
117
|
-
|
|
144
|
+
let entry;
|
|
145
|
+
try {
|
|
146
|
+
if (this.lifecycleAdmissionClosed) {
|
|
147
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, 'Spot lifecycle admission is closed by a committed Close.');
|
|
148
|
+
}
|
|
149
|
+
entry = this.executionBarrier?.enter();
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return Promise.reject(error);
|
|
153
|
+
}
|
|
154
|
+
const submit = (claim) => {
|
|
155
|
+
try {
|
|
156
|
+
return this.scheduler.submitLifecycleOperation(operation);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return Promise.reject(error);
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
claim?.release();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
return entry instanceof Promise ? entry.then(submit) : submit(entry);
|
|
118
166
|
}
|
|
119
|
-
|
|
167
|
+
/** Runs owner control work that establishes or completes its own admission seal. */
|
|
168
|
+
executeControlLifecycleOperation(operation, context) {
|
|
169
|
+
try {
|
|
170
|
+
return this.scheduler.submitLifecycleOperation(operation, context);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
return Promise.reject(error);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
visitPendingApplication(visitor) {
|
|
177
|
+
this.scheduler.visitPendingApplication(visitor);
|
|
178
|
+
}
|
|
179
|
+
async enqueueApplicationTurn(operation, workOptions = {}, replay) {
|
|
120
180
|
this.lastActivityAtMs = performance.now();
|
|
121
181
|
let barrierClaim;
|
|
122
182
|
try {
|
|
123
|
-
|
|
183
|
+
const entry = this.executionBarrier?.enter();
|
|
184
|
+
barrierClaim = entry instanceof Promise ? await entry : entry;
|
|
185
|
+
const refusal = this.applicationAdmissionRefusal(replay !== undefined);
|
|
186
|
+
if (refusal !== undefined)
|
|
187
|
+
throw refusal;
|
|
188
|
+
if (barrierClaim !== undefined && replay !== undefined) {
|
|
189
|
+
Object.assign(barrierClaim, { replay: (0, application_job_queue_scope_1.bindApplicationJobPermit)(replay) });
|
|
190
|
+
}
|
|
124
191
|
return await this.submitQueuedTurn(operation, workOptions, barrierClaim);
|
|
125
192
|
}
|
|
126
193
|
catch (error) {
|
|
@@ -152,6 +219,11 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
152
219
|
: this.scheduler.submit(boundOperation, options, barrierClaim);
|
|
153
220
|
}
|
|
154
221
|
runQueuedRecord(record) {
|
|
222
|
+
const context = record.context;
|
|
223
|
+
if (context?.replay !== undefined && record.operation === context.replay) {
|
|
224
|
+
context.release();
|
|
225
|
+
return Promise.resolve(this.executionBarrier?.enter()).then((claim) => this.runTurn(record.operation, (value) => record.resolve(value), (error) => record.reject(error), claim, record.release));
|
|
226
|
+
}
|
|
155
227
|
return this.runTurn(record.operation, (value) => record.resolve(value), (error) => record.reject(error), record.context, record.release);
|
|
156
228
|
}
|
|
157
229
|
yieldPromise(pending) {
|
|
@@ -6,10 +6,11 @@ import type { ZLinkEntrySpotTimerHandlerRegistration, ZLinkSpotTimerHandlerRegis
|
|
|
6
6
|
import { ZLinkTimerOverrunPolicy } from '../../contracts';
|
|
7
7
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
8
8
|
import type { ZLinkExecutionBarrier } from '../execution';
|
|
9
|
-
|
|
10
|
-
export interface ZLinkTimerClock extends OperationClock {
|
|
9
|
+
export interface ZLinkTimerClock {
|
|
11
10
|
now(): number;
|
|
12
11
|
utcNow(): number;
|
|
12
|
+
setTimeout(callback: () => void, delayMs: number): unknown;
|
|
13
|
+
clearTimeout(handle: unknown): void;
|
|
13
14
|
}
|
|
14
15
|
type ZLinkTimerOwnerSpot = ZLinkSpot | ZLinkEntrySpot;
|
|
15
16
|
type ZLinkTimerFailureReporter = (tick: ZLinkTimerTick, cause: unknown, event?: ZLinkSpotEventKind.TimerHandlerFailed | ZLinkSpotEventKind.TimerStoppedAfterUnhandledException) => Promise<void> | void;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
export declare const DEFAULT_TERMINAL_RELOCATION_CAPACITY = 4096;
|
|
2
2
|
export interface ZLinkActorSessionBindingActor {
|
|
3
3
|
readonly actorId: string;
|
|
4
|
+
readonly ref: {
|
|
5
|
+
readonly actorId: string;
|
|
6
|
+
readonly bindingGeneration?: bigint;
|
|
7
|
+
};
|
|
4
8
|
}
|
|
5
9
|
export interface ZLinkActorSessionBindingContext<TActor extends ZLinkActorSessionBindingActor> {
|
|
6
10
|
readonly routingId?: unknown;
|
|
@@ -30,10 +34,6 @@ export interface ZLinkActorSessionRelocationClaim {
|
|
|
30
34
|
readonly actorNodeGeneration?: bigint;
|
|
31
35
|
readonly sealId: string;
|
|
32
36
|
}
|
|
33
|
-
export interface ZLinkActorSessionRetainedOutbound {
|
|
34
|
-
deliver(): Promise<boolean>;
|
|
35
|
-
fail(error: unknown): void;
|
|
36
|
-
}
|
|
37
37
|
export interface ZLinkActorSessionRelocationSnapshot extends ZLinkActorSessionRelocationClaim {
|
|
38
38
|
readonly phase: 'sealed' | 'applying' | 'applied' | 'terminal';
|
|
39
39
|
readonly applyFingerprint?: string;
|
|
@@ -71,7 +71,6 @@ export declare enum ZLinkActorSessionBindingTermination {
|
|
|
71
71
|
}
|
|
72
72
|
export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActorSessionBindingContext<TActor>, TActor extends ZLinkActorSessionBindingActor> {
|
|
73
73
|
private readonly terminalRelocationCapacity;
|
|
74
|
-
private readonly outboundCapacity;
|
|
75
74
|
private readonly sealWaitTimeoutMs;
|
|
76
75
|
private readonly errorSink?;
|
|
77
76
|
private readonly lane;
|
|
@@ -81,7 +80,7 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
81
80
|
private readonly activeFrameWaiters;
|
|
82
81
|
private readonly relocations;
|
|
83
82
|
private readonly terminalRelocations;
|
|
84
|
-
constructor(terminalRelocationCapacity?: number,
|
|
83
|
+
constructor(terminalRelocationCapacity?: number, sealWaitTimeoutMs?: number, errorSink?: (() => {
|
|
85
84
|
reportRuntimeTaskException(taskName: string, error: unknown): void;
|
|
86
85
|
} | undefined) | undefined);
|
|
87
86
|
bind(context: TContext, actor: TActor, bindingToken: string, authorityFence?: ZLinkActorSessionAuthorityFence, sessionIdentity?: string, commitActor?: () => void): Promise<void>;
|
|
@@ -93,12 +92,15 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
93
92
|
find(actorId: string): Promise<TActor | undefined>;
|
|
94
93
|
private findCore;
|
|
95
94
|
route(actorId: string): Promise<ZLinkActorSessionRoute<TContext, TActor> | undefined>;
|
|
95
|
+
/** Selects the route only when it is the exact Session binding (§8.1 validation values). */
|
|
96
|
+
routeForSessionBinding(actorId: string, sessionRid: string, bindingGeneration?: bigint): Promise<ZLinkActorSessionRoute<TContext, TActor> | undefined>;
|
|
96
97
|
private routeCore;
|
|
97
98
|
capturePendingReplyClaim(actorId: string, actor: ZLinkActorSessionBindingActor, bindingToken: string): Promise<{
|
|
98
99
|
readonly context: TContext;
|
|
99
100
|
} | undefined>;
|
|
100
101
|
private capturePendingReplyClaimCore;
|
|
101
102
|
unbind(actorId: string, context: TContext, bindingToken: string, termination?: ZLinkActorSessionBindingTermination): Promise<void>;
|
|
103
|
+
/** Fixes the unbind order in the lane; the caller awaits transport completion outside it. */
|
|
102
104
|
private unbindCore;
|
|
103
105
|
unbindActor(actorId: string): Promise<void>;
|
|
104
106
|
private unbindActorCore;
|
|
@@ -110,6 +112,10 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
110
112
|
private requireCurrentTokenCore;
|
|
111
113
|
accept(actorId: string, bindingToken: string): Promise<void>;
|
|
112
114
|
private acceptCore;
|
|
115
|
+
acceptOneWay(actorId: string, bindingToken: string, prepare: () => {
|
|
116
|
+
readonly deliver: () => Promise<void>;
|
|
117
|
+
readonly drop: (reason: 'stale_target' | 'target_closed' | 'shutdown', error?: unknown) => void;
|
|
118
|
+
}): Promise<boolean>;
|
|
113
119
|
/**
|
|
114
120
|
* Holds Session ingress accepted after a relocation seal until the target
|
|
115
121
|
* route is published and the seal is released. The caller keeps the
|
|
@@ -129,31 +135,15 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
129
135
|
private prepareRelocationSeal;
|
|
130
136
|
relocationSnapshot(actorId: string, sealId: string): Promise<ZLinkActorSessionRelocationSnapshot | undefined>;
|
|
131
137
|
private relocationSnapshotCore;
|
|
132
|
-
retainRelocationOutbound(actorId: string, operation: ZLinkActorSessionRetainedOutbound, sealId?: string): Promise<ServiceSessionBindingAdmissionResult>;
|
|
133
|
-
private retainRelocationOutboundCorePublic;
|
|
134
|
-
/**
|
|
135
|
-
* Session–Actor binding §8.1: the Session owner holds a push only while the
|
|
136
|
-
* binding's relocation seal is open, and keeps it behind earlier held pushes.
|
|
137
|
-
* Whether the push names the current binding was decided once by the Session
|
|
138
|
-
* owner's binding record before this call.
|
|
139
|
-
*/
|
|
140
|
-
private retainRelocationOutboundCore;
|
|
141
|
-
discardRelocationOutbound(actorId: string, sealId: string, error: unknown): Promise<void>;
|
|
142
|
-
private discardRelocationOutboundCore;
|
|
143
138
|
applyRelocation(actorId: string, sealId: string, applyFingerprint: string, commitOwnerTransition: () => Promise<void>): Promise<void>;
|
|
144
139
|
private prepareRelocationApply;
|
|
145
|
-
/**
|
|
146
|
-
* Command 44 commit or abort releases every push held under this seal in
|
|
147
|
-
* arrival order (Session–Actor binding §8.1). The held pushes were admitted
|
|
148
|
-
* by the current binding; the route change does not judge them again.
|
|
149
|
-
*/
|
|
150
140
|
private completeRelocationApply;
|
|
151
141
|
private failRelocationApply;
|
|
152
142
|
observeRelocationTerminal(actorId: string, sealId: string, applyFingerprint: string): Promise<void>;
|
|
153
143
|
private observeRelocationTerminalCore;
|
|
154
144
|
/**
|
|
155
145
|
* Actor-wide relocation teardown: every seal (active and terminal-retained)
|
|
156
|
-
*
|
|
146
|
+
* for `actorId` is discarded unconditionally.
|
|
157
147
|
* Reserved for paths where the Actor itself is gone or being torn down
|
|
158
148
|
* (destroy, ownership clear, relocation-seal expiry/failure) — never for a
|
|
159
149
|
* single physical route's disconnect, which must not disturb a relocation
|
|
@@ -165,7 +155,7 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
165
155
|
* Spec 48 §137: a relocation seal's lifecycle is independent of any single
|
|
166
156
|
* physical route's binding. Unbinding one physical route (a disconnect)
|
|
167
157
|
* must retire only the still-open (nonterminal) relocation seal that this
|
|
168
|
-
* exact route's Session owns
|
|
158
|
+
* exact route's Session owns — it
|
|
169
159
|
* must never reach into a seal that has already reached 'terminal' (its
|
|
170
160
|
* bounded retention exists precisely so a late same-seal relay can still
|
|
171
161
|
* pass on a successor route) nor into a different Session's active seal
|
|
@@ -188,14 +178,11 @@ export declare class ZLinkActorSessionBindingRegistry<TContext extends ZLinkActo
|
|
|
188
178
|
private waitForActiveFramesCore;
|
|
189
179
|
private resolveActiveFrameWaiters;
|
|
190
180
|
private rejectActiveFrameWaiters;
|
|
191
|
-
private startOutboundDrain;
|
|
192
|
-
private reserveOutbound;
|
|
193
|
-
private settleOutbound;
|
|
194
|
-
private failOutbound;
|
|
195
181
|
private rememberTerminalRelocation;
|
|
196
182
|
private deleteEmptyRelocationQueue;
|
|
197
183
|
private resolveSealWaiters;
|
|
198
184
|
private rejectSealWaiters;
|
|
185
|
+
private startHeldOneWayDrain;
|
|
199
186
|
}
|
|
200
187
|
export interface ZLinkActorSessionRouteFence {
|
|
201
188
|
readonly objectGeneration: bigint;
|