@zlink-systems/framework 0.21.0 → 0.23.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/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/contracts/index.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +46 -42
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +245 -228
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +209 -220
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +2 -2
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +142 -134
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +77 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +218 -206
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +107 -79
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +595 -564
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -27,8 +27,8 @@ class DefaultZLinkSpotOutbound {
|
|
|
27
27
|
this.channelClient = options.channelClient;
|
|
28
28
|
this.spotPublisherClient = options.spotPublisherClient;
|
|
29
29
|
this.routedTransport = options.routedTransport;
|
|
30
|
-
this.spotRouterChannelIdForMesh =
|
|
31
|
-
?? ((meshName) => meshName);
|
|
30
|
+
this.spotRouterChannelIdForMesh =
|
|
31
|
+
options.spotRouterChannelIdForMesh ?? ((meshName) => meshName);
|
|
32
32
|
this.sourceSpotProvider = options.sourceSpotProvider;
|
|
33
33
|
this.meshName = options.meshName;
|
|
34
34
|
this.addressTransport = options.addressTransport;
|
|
@@ -194,8 +194,8 @@ function markSubmitted(options) {
|
|
|
194
194
|
if (options.submitted) {
|
|
195
195
|
(0, submission_result_1.throwAlreadySubmitted)('Spot call');
|
|
196
196
|
}
|
|
197
|
-
if (!options.instanceSpot &&
|
|
198
|
-
|| options.initialMeshName !== undefined)) {
|
|
197
|
+
if (!options.instanceSpot &&
|
|
198
|
+
(options.instanceSpotType !== undefined || options.initialMeshName !== undefined)) {
|
|
199
199
|
throw new configuration_1.ZLinkConfigurationException('Mesh selection requires an Instance Spot intent.');
|
|
200
200
|
}
|
|
201
201
|
options.submitted = true;
|
|
@@ -279,17 +279,14 @@ function wrapRequestCall(serial, inner) {
|
|
|
279
279
|
* otherwise the start is enqueued as its own serial turn.
|
|
280
280
|
*/
|
|
281
281
|
function startRequestOnSerial(serial, begin) {
|
|
282
|
-
return runInternalTransportStart(serial, begin)
|
|
283
|
-
.then((startedRequest) => startedRequest.pending);
|
|
282
|
+
return runInternalTransportStart(serial, begin).then((startedRequest) => startedRequest.pending);
|
|
284
283
|
}
|
|
285
284
|
/**
|
|
286
285
|
* Synthesizes only the transport start in the current turn. This is not a
|
|
287
286
|
* nested public operation: public same-owner waits are rejected or use Yield.
|
|
288
287
|
*/
|
|
289
288
|
function runInternalTransportStart(serial, begin) {
|
|
290
|
-
return serial.isCurrentTurn
|
|
291
|
-
? Promise.resolve().then(begin)
|
|
292
|
-
: serial.post(begin);
|
|
289
|
+
return serial.isCurrentTurn ? Promise.resolve().then(begin) : serial.post(begin);
|
|
293
290
|
}
|
|
294
291
|
function wrapRoutedSpotSendCall(serial, transport, spot, message, spotRouterChannelIdForMesh, sourceSpotProvider) {
|
|
295
292
|
const metadata = new Map();
|
|
@@ -447,13 +444,12 @@ function spotRefToSpotRouteTarget(spot, spotRouterChannelIdForMesh = (meshName)
|
|
|
447
444
|
};
|
|
448
445
|
}
|
|
449
446
|
function shouldRefreshAfterRouteDisconnect(target, error) {
|
|
450
|
-
return target.targetNodeState === contracts_1.ZLinkFrameworkRuntimeState.Serving
|
|
451
|
-
|
|
452
|
-
|
|
447
|
+
return (target.targetNodeState === contracts_1.ZLinkFrameworkRuntimeState.Serving &&
|
|
448
|
+
error instanceof Errors_1.ZLinkFrameworkException &&
|
|
449
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected);
|
|
453
450
|
}
|
|
454
451
|
function isShutdownTargetState(state) {
|
|
455
|
-
return state === contracts_1.ZLinkFrameworkRuntimeState.Draining
|
|
456
|
-
|| state === contracts_1.ZLinkFrameworkRuntimeState.Stopped;
|
|
452
|
+
return (state === contracts_1.ZLinkFrameworkRuntimeState.Draining || state === contracts_1.ZLinkFrameworkRuntimeState.Stopped);
|
|
457
453
|
}
|
|
458
454
|
function normalizeSpotRefRoutingId(routingId) {
|
|
459
455
|
return (0, routing_id_1.normalizeOpaqueRoutingId)(routingId);
|
|
@@ -20,13 +20,10 @@ function hasRemoteActorJoinIdentity(value) {
|
|
|
20
20
|
typeof value.actorType === 'string');
|
|
21
21
|
}
|
|
22
22
|
function isRemoteActorJoinPayload(value) {
|
|
23
|
-
return
|
|
24
|
-
typeof value.request === 'string');
|
|
23
|
+
return hasRemoteActorJoinIdentity(value) && typeof value.request === 'string';
|
|
25
24
|
}
|
|
26
25
|
function decodeRemoteActorJoinPayload(payload, request, received, raw, envelope) {
|
|
27
|
-
const phase = payload.phase === 'admission' || payload.phase === 'commit'
|
|
28
|
-
? payload.phase
|
|
29
|
-
: undefined;
|
|
26
|
+
const phase = payload.phase === 'admission' || payload.phase === 'commit' ? payload.phase : undefined;
|
|
30
27
|
const transferProtocol = phase !== undefined;
|
|
31
28
|
return {
|
|
32
29
|
envelope,
|
|
@@ -45,20 +42,19 @@ function decodeRemoteActorJoinPayload(payload, request, received, raw, envelope)
|
|
|
45
42
|
: undefined,
|
|
46
43
|
phase,
|
|
47
44
|
transferId: typeof payload.transferId === 'string' ? payload.transferId : undefined,
|
|
48
|
-
transferAdapterKey: typeof payload.transferAdapterKey === 'string'
|
|
49
|
-
? payload.transferAdapterKey
|
|
50
|
-
: undefined,
|
|
45
|
+
transferAdapterKey: typeof payload.transferAdapterKey === 'string' ? payload.transferAdapterKey : undefined,
|
|
51
46
|
transferState: typeof payload.transferState === 'string'
|
|
52
47
|
? runtime_message_1.ZLinkBufferMessage.from(Buffer.from(payload.transferState, 'base64'))
|
|
53
48
|
: undefined,
|
|
54
49
|
handoffBacklog: decodeHandoffBacklog(payload.handoffBacklog),
|
|
55
|
-
remoteBoundSessionTarget: decodeRemoteBoundSessionTarget(transferProtocol
|
|
50
|
+
remoteBoundSessionTarget: decodeRemoteBoundSessionTarget(transferProtocol
|
|
51
|
+
? payload.boundSessionRouterChannelId
|
|
52
|
+
: (payload.boundSessionRouterChannelId ?? payload.routerChannelId), transferProtocol
|
|
56
53
|
? payload.boundSessionTargetNodeRid
|
|
57
|
-
: payload.boundSessionTargetNodeRid ??
|
|
58
|
-
? payload.actorNodeRid
|
|
59
|
-
: String(received.routingId)), payload.boundSessionTargetNodeRidHex, transferProtocol
|
|
54
|
+
: (payload.boundSessionTargetNodeRid ??
|
|
55
|
+
(received.routingId === null ? payload.actorNodeRid : String(received.routingId))), payload.boundSessionTargetNodeRidHex, transferProtocol
|
|
60
56
|
? payload.boundSessionSpotId
|
|
61
|
-
: payload.boundSessionSpotId ?? payload.sourceSpotId, payload.boundSessionNodeRid, payload.boundSessionNodeRidHex, payload.boundSessionRid, payload.boundSessionRidHex, payload.boundSessionBindingGeneration, payload.boundSessionPreviousAuthorityOwnerGeneration, payload.boundSessionPreviousOwnerLeaseGeneration, payload.boundSessionRelocationSealId, payload.boundSessionServiceWireRelocation),
|
|
57
|
+
: (payload.boundSessionSpotId ?? payload.sourceSpotId), payload.boundSessionNodeRid, payload.boundSessionNodeRidHex, payload.boundSessionRid, payload.boundSessionRidHex, payload.boundSessionBindingGeneration, payload.boundSessionPreviousAuthorityOwnerGeneration, payload.boundSessionPreviousOwnerLeaseGeneration, payload.boundSessionRelocationSealId, payload.boundSessionServiceWireRelocation),
|
|
62
58
|
request,
|
|
63
59
|
requestContentType: typeof payload.requestContentType === 'string'
|
|
64
60
|
? payload.requestContentType
|
|
@@ -69,7 +65,8 @@ function decodeHandoffBacklog(value) {
|
|
|
69
65
|
if (!Array.isArray(value))
|
|
70
66
|
return [];
|
|
71
67
|
return value.map((entry, expectedIndex) => {
|
|
72
|
-
if (typeof entry !== 'object' ||
|
|
68
|
+
if (typeof entry !== 'object' ||
|
|
69
|
+
entry === null ||
|
|
73
70
|
entry.index !== expectedIndex ||
|
|
74
71
|
typeof entry.header !== 'string' ||
|
|
75
72
|
typeof entry.payload !== 'string' ||
|
|
@@ -79,12 +76,15 @@ function decodeHandoffBacklog(value) {
|
|
|
79
76
|
const packet = entry;
|
|
80
77
|
const messageFollowContext = (0, actors_1.decodeActorMessageFollowContext)(packet.messageFollowContext);
|
|
81
78
|
const source = packet.source;
|
|
82
|
-
if (messageFollowContext === undefined
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
79
|
+
if (messageFollowContext === undefined ||
|
|
80
|
+
(packet.returnResponse &&
|
|
81
|
+
(source === undefined ||
|
|
82
|
+
source.ownerId.length === 0 ||
|
|
83
|
+
BigInt(source.ownerLeaseGeneration) <= 0n ||
|
|
84
|
+
source.nodeRid.length === 0 ||
|
|
85
|
+
BigInt(source.nodeGeneration) <= 0n ||
|
|
86
|
+
source.replyRouteId !== messageFollowContext.replyRouteId)) ||
|
|
87
|
+
(!packet.returnResponse && source !== undefined)) {
|
|
88
88
|
throw new Error('Remote actor handoff request source fence is invalid.');
|
|
89
89
|
}
|
|
90
90
|
return { ...packet, messageFollowContext };
|
|
@@ -114,12 +114,8 @@ function decodeRemoteBoundSessionTarget(routerChannelId, targetNodeRid, targetNo
|
|
|
114
114
|
sessionNodeRid: typeof sessionNodeRid === 'string'
|
|
115
115
|
? (0, routing_id_1.decodeRoutingId)(sessionNodeRid, sessionNodeRidHex)
|
|
116
116
|
: undefined,
|
|
117
|
-
sessionRid: typeof sessionRid === 'string'
|
|
118
|
-
|
|
119
|
-
: undefined,
|
|
120
|
-
bindingGeneration: typeof bindingGeneration === 'string'
|
|
121
|
-
? BigInt(bindingGeneration)
|
|
122
|
-
: undefined,
|
|
117
|
+
sessionRid: typeof sessionRid === 'string' ? (0, routing_id_1.decodeRoutingId)(sessionRid, sessionRidHex) : undefined,
|
|
118
|
+
bindingGeneration: typeof bindingGeneration === 'string' ? BigInt(bindingGeneration) : undefined,
|
|
123
119
|
previousAuthorityOwnerGeneration: typeof previousAuthorityOwnerGeneration === 'string'
|
|
124
120
|
? BigInt(previousAuthorityOwnerGeneration)
|
|
125
121
|
: undefined,
|
|
@@ -41,10 +41,10 @@ function decodeRemoteBoundSessionSend(parts, codecs, flowEnabled = true) {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
function decodeActorRef(payload) {
|
|
44
|
-
if (typeof payload.actorId !== 'string'
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
if (typeof payload.actorId !== 'string' ||
|
|
45
|
+
typeof payload.actorNodeRid !== 'string' ||
|
|
46
|
+
typeof payload.actorGeneration !== 'string' ||
|
|
47
|
+
typeof payload.actorMeshName !== 'string') {
|
|
48
48
|
return undefined;
|
|
49
49
|
}
|
|
50
50
|
const actorRef = {
|
|
@@ -162,7 +162,5 @@ function decodeMultipartPayload(parts, codecs, flowEnabled = true) {
|
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
164
|
function metadataOf(value) {
|
|
165
|
-
return new Map(Object.entries(typeof value === 'object' && value !== null
|
|
166
|
-
? value
|
|
167
|
-
: {}));
|
|
165
|
+
return new Map(Object.entries(typeof value === 'object' && value !== null ? value : {}));
|
|
168
166
|
}
|
|
@@ -49,9 +49,7 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
49
49
|
}
|
|
50
50
|
const registrations = this.options.packetHandlers.get(envelope.packetName ?? '');
|
|
51
51
|
const replyable = (0, spot_route_replies_1.hasReplyToken)(received.replyToken);
|
|
52
|
-
const action = replyable
|
|
53
|
-
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError
|
|
54
|
-
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop;
|
|
52
|
+
const action = replyable ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop;
|
|
55
53
|
if (registrations === undefined || registrations.length === 0) {
|
|
56
54
|
this.options.dispatchErrors?.report({
|
|
57
55
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
@@ -85,7 +83,7 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
85
83
|
let response;
|
|
86
84
|
const applicationClaim = this.options.claimApplicationWork?.();
|
|
87
85
|
try {
|
|
88
|
-
await (0, flow_context_1.runWithFlow)((0, flow_context_1.createInboundFlow)(envelope.header.flowId, envelope.header.flowOrigin, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true), () => this.options.serial.execute(async () => {
|
|
86
|
+
await (0, flow_context_1.runWithFlow)((0, flow_context_1.createInboundFlow)(envelope.header.flowId, envelope.header.flowOrigin, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true, undefined), () => this.options.serial.execute(async () => {
|
|
89
87
|
const spot = this.options.getTarget();
|
|
90
88
|
// Keep the wire payload raw until this Spot has acquired its
|
|
91
89
|
// execution authority. A rejected or superseded work item must not
|
|
@@ -107,8 +105,8 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
107
105
|
return true;
|
|
108
106
|
}
|
|
109
107
|
catch (error) {
|
|
110
|
-
const payloadDecodeFailed = error instanceof contracts_1.ZLinkFrameworkException
|
|
111
|
-
|
|
108
|
+
const payloadDecodeFailed = error instanceof contracts_1.ZLinkFrameworkException &&
|
|
109
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed;
|
|
112
110
|
this.options.dispatchErrors?.report({
|
|
113
111
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
114
112
|
messageKind: replyable ? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request : ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
@@ -136,7 +134,9 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
136
134
|
}
|
|
137
135
|
async dispatchSpotDirectEnvelope(received, envelope) {
|
|
138
136
|
const replyable = envelope.kind === 1 /* ZLinkChannelMessageKind.Request */ && (0, spot_route_replies_1.hasReplyToken)(received.replyToken);
|
|
139
|
-
const messageKind = replyable
|
|
137
|
+
const messageKind = replyable
|
|
138
|
+
? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request
|
|
139
|
+
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send;
|
|
140
140
|
const action = replyable ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop;
|
|
141
141
|
const registrations = this.options.packetHandlers.get(envelope.packetName ?? '');
|
|
142
142
|
if (registrations === undefined || registrations.length === 0) {
|
|
@@ -149,7 +149,8 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
149
149
|
channelName: envelope.channelName
|
|
150
150
|
});
|
|
151
151
|
if (replyable) {
|
|
152
|
-
(0, spot_route_replies_1.submitRouteReply)(received
|
|
152
|
+
(0, spot_route_replies_1.submitRouteReply)(received
|
|
153
|
+
.reply()
|
|
153
154
|
.message(encodeSpotDirectReply(false, undefined, `SPOT route handler not found: ${envelope.packetName}`)));
|
|
154
155
|
}
|
|
155
156
|
return;
|
|
@@ -170,8 +171,7 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
170
171
|
}
|
|
171
172
|
}, (0, serial_work_size_1.zlinkSerialWorkOptions)(received.parts[0]?.size() ?? 0, (0, serial_work_size_1.zlinkMetadataByteLength)(envelope.metadata)));
|
|
172
173
|
if (replyable) {
|
|
173
|
-
(0, spot_route_replies_1.submitRouteReply)(received.reply()
|
|
174
|
-
.message(encodeSpotDirectReply(true, response)));
|
|
174
|
+
(0, spot_route_replies_1.submitRouteReply)(received.reply().message(encodeSpotDirectReply(true, response)));
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
catch (error) {
|
|
@@ -185,7 +185,8 @@ class ZLinkSpotRoutePacketDispatch {
|
|
|
185
185
|
error
|
|
186
186
|
});
|
|
187
187
|
if (replyable) {
|
|
188
|
-
(0, spot_route_replies_1.submitRouteReply)(received
|
|
188
|
+
(0, spot_route_replies_1.submitRouteReply)(received
|
|
189
|
+
.reply()
|
|
189
190
|
.message(encodeSpotDirectReply(false, undefined, error instanceof Error ? error.message : String(error))));
|
|
190
191
|
return;
|
|
191
192
|
}
|
|
@@ -206,14 +207,15 @@ function decodeSpotDirectEnvelope(parts) {
|
|
|
206
207
|
try {
|
|
207
208
|
const decoded = JSON.parse(parts[0].data().toString());
|
|
208
209
|
if (decoded.marker !== SPOT_DIRECT_ENVELOPE ||
|
|
209
|
-
(decoded.kind !== 1 /* ZLinkChannelMessageKind.Request */ &&
|
|
210
|
+
(decoded.kind !== 1 /* ZLinkChannelMessageKind.Request */ &&
|
|
211
|
+
decoded.kind !== 3 /* ZLinkChannelMessageKind.Command */) ||
|
|
210
212
|
typeof decoded.channelName !== 'string') {
|
|
211
213
|
return undefined;
|
|
212
214
|
}
|
|
213
215
|
const metadata = decoded.metadata ?? {};
|
|
214
|
-
if (typeof metadata !== 'object'
|
|
215
|
-
|
|
216
|
-
|
|
216
|
+
if (typeof metadata !== 'object' ||
|
|
217
|
+
Array.isArray(metadata) ||
|
|
218
|
+
!Object.values(metadata).every((value) => typeof value === 'string')) {
|
|
217
219
|
return undefined;
|
|
218
220
|
}
|
|
219
221
|
return {
|
|
@@ -24,8 +24,7 @@ function submitRouteReply(operation) {
|
|
|
24
24
|
}
|
|
25
25
|
function submitRoutePayloadReply(received, envelope, payload) {
|
|
26
26
|
if (envelope === undefined) {
|
|
27
|
-
return submitRouteReply(received.reply()
|
|
28
|
-
.message(Buffer.from(JSON.stringify(payload))));
|
|
27
|
+
return submitRouteReply(received.reply().message(Buffer.from(JSON.stringify(payload))));
|
|
29
28
|
}
|
|
30
29
|
return submitRouteReply(appendRouteReplyParts(received.reply(), (0, channel_envelope_1.encodeChannelReplyParts)(envelope.header, payload)));
|
|
31
30
|
}
|
|
@@ -34,8 +33,7 @@ function submitSpotRouteBridgeReply(received, envelope, payload) {
|
|
|
34
33
|
}
|
|
35
34
|
function submitRoutedActorJoinReply(received, decoded, payload) {
|
|
36
35
|
if (decoded.raw) {
|
|
37
|
-
return submitRouteReply(received.reply()
|
|
38
|
-
.message(Buffer.from(JSON.stringify(payload))));
|
|
36
|
+
return submitRouteReply(received.reply().message(Buffer.from(JSON.stringify(payload))));
|
|
39
37
|
}
|
|
40
38
|
return submitRouteReply(appendRouteReplyParts(received.reply(), (0, channel_envelope_1.encodeChannelReplyParts)(requireRoutedActorJoinEnvelope(decoded).header, payload)));
|
|
41
39
|
}
|
|
@@ -70,7 +68,7 @@ function requireRoutedActorJoinEnvelope(decoded) {
|
|
|
70
68
|
return decoded.envelope;
|
|
71
69
|
}
|
|
72
70
|
function isNativeBadAddress(error) {
|
|
73
|
-
return typeof error === 'object' &&
|
|
71
|
+
return (typeof error === 'object' &&
|
|
74
72
|
error !== null &&
|
|
75
|
-
Number(error.nativeErrno) === 14;
|
|
73
|
+
Number(error.nativeErrno) === 14);
|
|
76
74
|
}
|
|
@@ -45,7 +45,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
45
45
|
const existing = this.pending.get(decoded.transferId);
|
|
46
46
|
if (existing !== undefined) {
|
|
47
47
|
this.requireMatchingTransfer(existing, decoded);
|
|
48
|
-
const reply = existing.admissionReply ?? await existing.admissionTask;
|
|
48
|
+
const reply = existing.admissionReply ?? (await existing.admissionTask);
|
|
49
49
|
if (reply === undefined)
|
|
50
50
|
throw new Error(`Remote actor transfer '${decoded.transferId}' has no admission result.`);
|
|
51
51
|
(0, spot_route_replies_1.submitRoutedActorJoinReply)(received, decoded, reply);
|
|
@@ -75,7 +75,9 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
75
75
|
throw new Error('Remote actor transfer commit requires a transfer id.');
|
|
76
76
|
}
|
|
77
77
|
const pending = this.pending.get(transferId);
|
|
78
|
-
if (pending === undefined ||
|
|
78
|
+
if (pending === undefined ||
|
|
79
|
+
pending.actorId !== decoded.actorId ||
|
|
80
|
+
pending.actorType !== decoded.actorType) {
|
|
79
81
|
throw new Error(`Remote actor transfer '${transferId}' does not have a matching admission.`);
|
|
80
82
|
}
|
|
81
83
|
if (pending.phase === 'rejected') {
|
|
@@ -90,7 +92,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
90
92
|
clearTimeout(pending.deadline);
|
|
91
93
|
pending.commitTask = this.evaluateCommit(decoded, transferId, pending);
|
|
92
94
|
}
|
|
93
|
-
const commitReply = pending.commitReply ?? await pending.commitTask;
|
|
95
|
+
const commitReply = pending.commitReply ?? (await pending.commitTask);
|
|
94
96
|
(0, spot_route_replies_1.submitRoutedActorJoinReply)(received, decoded, commitReply);
|
|
95
97
|
}
|
|
96
98
|
catch (error) {
|
|
@@ -132,11 +134,12 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
132
134
|
}
|
|
133
135
|
async evaluateCommit(decoded, transferId, pending) {
|
|
134
136
|
try {
|
|
135
|
-
if (decoded.transferState === undefined ||
|
|
137
|
+
if (decoded.transferState === undefined ||
|
|
138
|
+
this.options.routedActorTransferProvider === undefined) {
|
|
136
139
|
throw new Error('Remote actor transfer commit cannot materialize the target actor.');
|
|
137
140
|
}
|
|
138
141
|
const { actor, actorRef } = await this.options.routedActorTransferProvider(decoded.actorId, decoded.actorType, decoded.transferAdapterKey, decoded.transferState, decoded.actorEntryNodeRid, decoded.remoteBoundSessionTarget);
|
|
139
|
-
const handoffResults = await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog) ?? [];
|
|
142
|
+
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
|
|
140
143
|
const commitReply = {
|
|
141
144
|
accepted: true,
|
|
142
145
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -195,8 +198,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
195
198
|
}
|
|
196
199
|
try {
|
|
197
200
|
const payload = JSON.parse(parts[0].data().toString());
|
|
198
|
-
if (payload.packetName !== spot_remote_codec_1.REMOTE_ACTOR_JOIN_PACKET ||
|
|
199
|
-
!(0, spot_remote_codec_1.isRemoteActorJoinPayload)(payload)) {
|
|
201
|
+
if (payload.packetName !== spot_remote_codec_1.REMOTE_ACTOR_JOIN_PACKET || !(0, spot_remote_codec_1.isRemoteActorJoinPayload)(payload)) {
|
|
200
202
|
return undefined;
|
|
201
203
|
}
|
|
202
204
|
return (0, spot_remote_codec_1.decodeRemoteActorJoinPayload)(payload, runtime_message_1.ZLinkBufferMessage.from(Buffer.from(payload.request, 'base64')), received, true);
|
|
@@ -12,7 +12,7 @@ class ZLinkSpotRoutedBoundSessionDispatch {
|
|
|
12
12
|
async dispatch(received) {
|
|
13
13
|
const boundSessionSend = (0, spot_remote_route_codec_1.decodeRemoteBoundSessionSend)(received.parts, this.options.channelCodecs(), this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
|
|
14
14
|
if (boundSessionSend !== undefined) {
|
|
15
|
-
await (0, flow_context_1.runWithFlow)((0, flow_context_1.createInboundFlow)(boundSessionSend.flowId ?? boundSessionSend.envelope?.header.flowId, boundSessionSend.flowOrigin ?? boundSessionSend.envelope?.header.flowOrigin, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true), () => this.options.routedBoundSessionReceiver?.(boundSessionSend.actorId, boundSessionSend.message, boundSessionSend.packetName, boundSessionSend.metadata, boundSessionSend.actorRef, boundSessionSend.actorPacketTarget));
|
|
15
|
+
await (0, flow_context_1.runWithFlow)((0, flow_context_1.createInboundFlow)(boundSessionSend.flowId ?? boundSessionSend.envelope?.header.flowId, boundSessionSend.flowOrigin ?? boundSessionSend.envelope?.header.flowOrigin, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true, undefined), () => this.options.routedBoundSessionReceiver?.(boundSessionSend.actorId, boundSessionSend.message, boundSessionSend.packetName, boundSessionSend.metadata, boundSessionSend.actorRef, boundSessionSend.actorPacketTarget));
|
|
16
16
|
if ((0, spot_route_replies_1.hasReplyToken)(received.replyToken)) {
|
|
17
17
|
(0, spot_route_replies_1.submitRoutePayloadReply)(received, boundSessionSend.envelope, { ok: true });
|
|
18
18
|
}
|
|
@@ -39,8 +39,7 @@ class ZLinkSpotRoutedBoundSessionDispatch {
|
|
|
39
39
|
if (!(0, spot_route_replies_1.hasReplyToken)(received.replyToken)) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
|
-
(0, spot_route_replies_1.submitRouteReply)(received.reply()
|
|
43
|
-
.message(Buffer.from(JSON.stringify({ ok: true }))));
|
|
42
|
+
(0, spot_route_replies_1.submitRouteReply)(received.reply().message(Buffer.from(JSON.stringify({ ok: true }))));
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
exports.ZLinkSpotRoutedBoundSessionDispatch = ZLinkSpotRoutedBoundSessionDispatch;
|
|
@@ -138,7 +138,8 @@ class ZLinkSpotRoutedFrameDispatch {
|
|
|
138
138
|
return;
|
|
139
139
|
}
|
|
140
140
|
const actorPacketRelay = (0, spot_remote_route_codec_1.decodeRemoteActorPacketRelay)(received.parts, this.channelCodecs(), this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
|
|
141
|
-
if (actorPacketRelay !== undefined &&
|
|
141
|
+
if (actorPacketRelay !== undefined &&
|
|
142
|
+
(await this.actorPacketRelayDispatch.dispatch(received, actorPacketRelay))) {
|
|
142
143
|
return;
|
|
143
144
|
}
|
|
144
145
|
if (await this.routePacketDispatch.dispatch(received)) {
|
|
@@ -149,14 +150,13 @@ class ZLinkSpotRoutedFrameDispatch {
|
|
|
149
150
|
}
|
|
150
151
|
exports.ZLinkSpotRoutedFrameDispatch = ZLinkSpotRoutedFrameDispatch;
|
|
151
152
|
function isRouteRecvRetryable(error) {
|
|
152
|
-
return typeof error === 'object' &&
|
|
153
|
+
return (typeof error === 'object' &&
|
|
153
154
|
error !== null &&
|
|
154
|
-
[201, 202, 204].includes(Number(error.result));
|
|
155
|
+
[201, 202, 204].includes(Number(error.result)));
|
|
155
156
|
}
|
|
156
157
|
function closeReceivedQuietly(received) {
|
|
157
158
|
try {
|
|
158
159
|
received.close();
|
|
159
160
|
}
|
|
160
|
-
catch {
|
|
161
|
-
}
|
|
161
|
+
catch { }
|
|
162
162
|
}
|
|
@@ -19,10 +19,10 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
19
19
|
await this.dispatch(spotId, packetName, decodePayload, context, false);
|
|
20
20
|
}
|
|
21
21
|
async request(spotId, packetName, request, context) {
|
|
22
|
-
return await this.dispatch(spotId, packetName, () => request, context, true);
|
|
22
|
+
return (await this.dispatch(spotId, packetName, () => request, context, true));
|
|
23
23
|
}
|
|
24
24
|
async requestEncoded(spotId, packetName, decodePayload, context) {
|
|
25
|
-
return await this.dispatch(spotId, packetName, decodePayload, context, true);
|
|
25
|
+
return (await this.dispatch(spotId, packetName, decodePayload, context, true));
|
|
26
26
|
}
|
|
27
27
|
async dispatch(spotId, packetName, decodePayload, context, returnResponse) {
|
|
28
28
|
const activation = this.options.resolveActivation(spotId);
|
|
@@ -33,7 +33,9 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
33
33
|
}
|
|
34
34
|
throw new configuration_1.ZLinkConfigurationException(`Spot '${spotId}' is not active.`);
|
|
35
35
|
}
|
|
36
|
-
const registrations = activation.handlers
|
|
36
|
+
const registrations = activation.handlers
|
|
37
|
+
.snapshot()
|
|
38
|
+
.filter((registration) => registration.kind === 'packet' &&
|
|
37
39
|
(registration.packetName ?? registration.handlerType.name) === (packetName ?? ''));
|
|
38
40
|
if (registrations.length === 0) {
|
|
39
41
|
this.reportMissing(spotId, packetName, context, returnResponse);
|
|
@@ -120,14 +122,14 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
120
122
|
return returnResponse ? response : undefined;
|
|
121
123
|
}
|
|
122
124
|
reportFailure(spotId, packetName, context, returnResponse, error) {
|
|
123
|
-
const frameworkErrorKind = error instanceof contracts_1.ZLinkFrameworkException
|
|
124
|
-
? (0, framework_errors_internal_1.internalFrameworkErrorKind)(error)
|
|
125
|
-
: undefined;
|
|
125
|
+
const frameworkErrorKind = error instanceof contracts_1.ZLinkFrameworkException ? (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) : undefined;
|
|
126
126
|
this.options.dispatchErrors?.report({
|
|
127
127
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
128
|
-
messageKind: returnResponse
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
messageKind: returnResponse
|
|
129
|
+
? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request
|
|
130
|
+
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
131
|
+
reason: frameworkErrorKind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.WorkerQueueFull ||
|
|
132
|
+
frameworkErrorKind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
131
133
|
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.Backpressure
|
|
132
134
|
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
133
135
|
action: returnResponse ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.FailCaller : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
@@ -140,7 +142,9 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
140
142
|
reportMissing(spotId, packetName, context, returnResponse) {
|
|
141
143
|
this.options.dispatchErrors?.report({
|
|
142
144
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
143
|
-
messageKind: returnResponse
|
|
145
|
+
messageKind: returnResponse
|
|
146
|
+
? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request
|
|
147
|
+
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
144
148
|
reason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerMissing,
|
|
145
149
|
action: returnResponse ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.FailCaller : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
146
150
|
packetName,
|
|
@@ -47,8 +47,8 @@ class ZLinkSpotSerialExecutor {
|
|
|
47
47
|
/** @internal Restores a durable Actor FIFO prefix without starting it. */
|
|
48
48
|
admitActorDurablePrefix(actorId, records) {
|
|
49
49
|
const serial = this.actorSerial(actorId);
|
|
50
|
-
return this.actorExecutor(actorId).admitDurablePrefix(records.map(record => ({
|
|
51
|
-
operation: executeChild => record.operation(child => executeChild(() => child(serial))),
|
|
50
|
+
return this.actorExecutor(actorId).admitDurablePrefix(records.map((record) => ({
|
|
51
|
+
operation: (executeChild) => record.operation((child) => executeChild(() => child(serial))),
|
|
52
52
|
preparation: record.preparation,
|
|
53
53
|
workOptions: record.workOptions
|
|
54
54
|
})));
|
|
@@ -73,18 +73,15 @@ class ZLinkSpotSerialExecutor {
|
|
|
73
73
|
if (this.closePromise !== undefined)
|
|
74
74
|
return this.closePromise;
|
|
75
75
|
this.closing = true;
|
|
76
|
-
const childSerials = [
|
|
77
|
-
...this.actorSerials.values(),
|
|
78
|
-
...this.timerSerials.values()
|
|
79
|
-
];
|
|
76
|
+
const childSerials = [...this.actorSerials.values(), ...this.timerSerials.values()];
|
|
80
77
|
const actorExecutors = [...this.actorExecutors.values()];
|
|
81
78
|
this.actorSerials.clear();
|
|
82
79
|
this.timerSerials.clear();
|
|
83
80
|
this.actorExecutors.clear();
|
|
84
81
|
this.closePromise = Promise.all([
|
|
85
82
|
this.spotSerial.close(),
|
|
86
|
-
...childSerials.map(serial => serial.close()),
|
|
87
|
-
...actorExecutors.map(executor => executor.close())
|
|
83
|
+
...childSerials.map((serial) => serial.close()),
|
|
84
|
+
...actorExecutors.map((executor) => executor.close())
|
|
88
85
|
]).then(() => undefined);
|
|
89
86
|
return this.closePromise;
|
|
90
87
|
}
|
|
@@ -41,13 +41,11 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
41
41
|
}
|
|
42
42
|
/** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
|
|
43
43
|
isActiveTurn(turn, turnId) {
|
|
44
|
-
return this.depth > 0
|
|
45
|
-
|
|
46
|
-
|| (turnId === this.activeTurnId && !turn.isSuspended));
|
|
44
|
+
return (this.depth > 0 &&
|
|
45
|
+
(this.resumedOwnerTurn === turn || (turnId === this.activeTurnId && !turn.isSuspended)));
|
|
47
46
|
}
|
|
48
47
|
setExecutionBarrier(barrier) {
|
|
49
|
-
if (this.executionBarrier !== undefined
|
|
50
|
-
&& this.executionBarrier !== barrier) {
|
|
48
|
+
if (this.executionBarrier !== undefined && this.executionBarrier !== barrier) {
|
|
51
49
|
throw new Error('ZLink Spot serial executor already belongs to another execution barrier.');
|
|
52
50
|
}
|
|
53
51
|
if (this.turnSequence !== 0 && this.executionBarrier === undefined) {
|
|
@@ -90,7 +88,7 @@ class ZLinkSpotSerialTurnExecutor {
|
|
|
90
88
|
const submitted = (0, application_job_queue_scope_1.hasApplicationJobPermit)()
|
|
91
89
|
? this.scheduler.submitPreAdmitted(boundOperation, options, barrierClaim)
|
|
92
90
|
: this.scheduler.submit(boundOperation, options, barrierClaim);
|
|
93
|
-
void submitted.catch(error => {
|
|
91
|
+
void submitted.catch((error) => {
|
|
94
92
|
barrierClaim?.release();
|
|
95
93
|
onError(error);
|
|
96
94
|
});
|
|
@@ -24,9 +24,9 @@ class ZLinkSpotSubscriptionDispatch {
|
|
|
24
24
|
}
|
|
25
25
|
configure(registrations) {
|
|
26
26
|
for (const registration of registrations) {
|
|
27
|
-
if (registration.kind !== 'subscribe'
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
if (registration.kind !== 'subscribe' ||
|
|
28
|
+
registration.channelName === undefined ||
|
|
29
|
+
registration.topic === undefined) {
|
|
30
30
|
continue;
|
|
31
31
|
}
|
|
32
32
|
const key = subscriptionKey(registration.channelName, registration.topic);
|
|
@@ -131,7 +131,7 @@ class ZLinkSpotSubscriptionDispatch {
|
|
|
131
131
|
}
|
|
132
132
|
const spot = this.options.getTarget();
|
|
133
133
|
const subSource = message.routingId === null ? undefined : String(message.routingId);
|
|
134
|
-
const inboundFlow = (0, flow_context_1.createInboundFlow)(envelope.header.flowId, envelope.header.flowOrigin, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
|
|
134
|
+
const inboundFlow = (0, flow_context_1.createInboundFlow)(envelope.header.flowId, envelope.header.flowOrigin, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true, undefined);
|
|
135
135
|
try {
|
|
136
136
|
await this.options.serial.execute(() => (0, flow_context_1.runWithFlow)(inboundFlow, async () => {
|
|
137
137
|
// Payload deserialization belongs to the Spot serial turn. Queue
|
|
@@ -169,8 +169,8 @@ class ZLinkSpotSubscriptionDispatch {
|
|
|
169
169
|
}), (0, serial_work_size_1.zlinkSerialWorkOptions)(envelope.payload.byteLength, (0, serial_work_size_1.zlinkMetadataByteLength)(envelope.header.metadata)));
|
|
170
170
|
}
|
|
171
171
|
catch (error) {
|
|
172
|
-
if (error instanceof contracts_1.ZLinkFrameworkException
|
|
173
|
-
|
|
172
|
+
if (error instanceof contracts_1.ZLinkFrameworkException &&
|
|
173
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed) {
|
|
174
174
|
this.options.dispatchErrors?.report({
|
|
175
175
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotSubscription,
|
|
176
176
|
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|