@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +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/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +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 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- 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 +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- 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 +49 -153
- 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 +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- 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 +7 -27
- 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 +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- 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 +1 -2
- 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 +41 -34
- 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 +4 -3
- 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 +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- 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.d.ts +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- 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/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- 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.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- 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 +79 -94
- 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 +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- 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 -171
- 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 +15 -28
- 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 +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- 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 +309 -336
- 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/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- 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 +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- 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 +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- 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 +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- 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/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -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 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- 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 +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- 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 +85 -218
- 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 +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- 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 +14 -37
- 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 +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- 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 +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- 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 +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- 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 +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- 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/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- 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 +127 -125
- 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 +63 -160
- 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 -320
- 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 +16 -57
- 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 +175 -356
- 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 +457 -482
- 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/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- 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 +59 -47
- 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 +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- 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 +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -7,9 +7,11 @@ exports.submitRoutedActorJoinReply = submitRoutedActorJoinReply;
|
|
|
7
7
|
exports.submitRoutedActorJoinError = submitRoutedActorJoinError;
|
|
8
8
|
exports.appendRouteReplyParts = appendRouteReplyParts;
|
|
9
9
|
exports.hasReplyToken = hasReplyToken;
|
|
10
|
+
const node_os_1 = require("node:os");
|
|
10
11
|
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
11
12
|
const configuration_1 = require("../configuration");
|
|
12
13
|
const spot_route_reply_wire_1 = require("./spot-route-reply-wire");
|
|
14
|
+
const nativeErrnoValues = node_os_1.constants.errno;
|
|
13
15
|
function submitRouteReply(operation) {
|
|
14
16
|
try {
|
|
15
17
|
operation.submit();
|
|
@@ -70,5 +72,5 @@ function requireRoutedActorJoinEnvelope(decoded) {
|
|
|
70
72
|
function isNativeBadAddress(error) {
|
|
71
73
|
return (typeof error === 'object' &&
|
|
72
74
|
error !== null &&
|
|
73
|
-
Number(error.nativeErrno) ===
|
|
75
|
+
Number(error.nativeErrno) === nativeErrnoValues.EFAULT);
|
|
74
76
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { ZLinkActor, ZLinkMessage, ZLinkMessageSerializer, ZLinkSpotActorJoinResult } from '../../contracts';
|
|
2
|
+
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
3
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors/actor-runtime-state';
|
|
2
4
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
3
5
|
import { type ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
|
|
4
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
5
|
-
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
6
7
|
interface ZLinkRoutedActorAdmissionTarget {
|
|
7
8
|
onActorJoin?(actorId: string, request: ZLinkMessage): Promise<ZLinkSpotActorJoinResult>;
|
|
8
9
|
}
|
|
9
10
|
interface ZLinkSpotRoutedActorAdmissionOptions {
|
|
10
11
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
11
|
-
readonly isSpotClosing?: () => boolean;
|
|
12
12
|
readonly getTarget: () => ZLinkRoutedActorAdmissionTarget;
|
|
13
13
|
readonly defaultAccept: boolean;
|
|
14
14
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
15
|
-
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
15
|
+
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
16
16
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
17
17
|
readonly pendingAdmissionTimeoutMs?: number;
|
|
18
18
|
/** Spec 27 §4: with tracing Off, inbound flow fields are neither validated nor carried forward. */
|
|
@@ -7,7 +7,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
|
|
|
7
7
|
const routing_id_1 = require("../routing-id");
|
|
8
8
|
const spot_remote_codec_1 = require("./spot-remote-codec");
|
|
9
9
|
const spot_route_replies_1 = require("./spot-route-replies");
|
|
10
|
-
const
|
|
10
|
+
const DEFAULT_PENDING_ADMISSION_TIMEOUT_MS = 30_000;
|
|
11
11
|
class ZLinkSpotRoutedActorAdmission {
|
|
12
12
|
options;
|
|
13
13
|
pending = new Map();
|
|
@@ -22,15 +22,6 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
22
22
|
if (decoded === undefined) {
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
|
-
if (this.options.isSpotClosing?.() === true) {
|
|
26
|
-
try {
|
|
27
|
-
(0, spot_route_replies_1.submitRoutedActorJoinError)(received, decoded, (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, `Actor '${decoded.actorId}' target Spot is closing.`));
|
|
28
|
-
}
|
|
29
|
-
finally {
|
|
30
|
-
this.closeDecoded(decoded);
|
|
31
|
-
}
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
25
|
if (decoded.phase === 'admission') {
|
|
35
26
|
await this.admitTransfer(decoded, received);
|
|
36
27
|
return true;
|
|
@@ -149,7 +140,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
149
140
|
throw new Error('Remote actor transfer commit cannot materialize the target actor.');
|
|
150
141
|
}
|
|
151
142
|
const { actor, actorRef } = await this.options.routedActorTransferProvider(decoded.actorId, decoded.actorType, decoded.transferAdapterKey, decoded.transferState, decoded.actorEntryNodeRid, decoded.remoteBoundSessionTarget);
|
|
152
|
-
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
|
|
143
|
+
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog, decoded.remoteBoundSessionTarget)) ?? [];
|
|
153
144
|
const commitReply = {
|
|
154
145
|
accepted: true,
|
|
155
146
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -193,7 +184,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
193
184
|
pending.deadline = setTimeout(() => {
|
|
194
185
|
if (this.pending.get(transferId) === pending)
|
|
195
186
|
this.pending.delete(transferId);
|
|
196
|
-
}, this.options.pendingAdmissionTimeoutMs ??
|
|
187
|
+
}, this.options.pendingAdmissionTimeoutMs ?? DEFAULT_PENDING_ADMISSION_TIMEOUT_MS);
|
|
197
188
|
pending.deadline.unref();
|
|
198
189
|
}
|
|
199
190
|
closeDecoded(decoded) {
|
|
@@ -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;
|