@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { ActorRef } from '../../contracts';
|
|
2
|
-
import type { ServiceSessionBindingAdmissionResult } from '../foundation/service-session-binding-ingress-port';
|
|
3
2
|
import type {
|
|
4
3
|
ZLinkActorSessionAuthorityFence,
|
|
5
4
|
ZLinkActorSessionRelocationClaim,
|
|
6
5
|
ZLinkActorSessionRelocationSnapshot,
|
|
7
|
-
ZLinkActorSessionRetainedOutbound,
|
|
8
6
|
ZLinkActorSessionRouteFence
|
|
9
7
|
} from './actor-session-binding-registry';
|
|
10
8
|
|
|
@@ -19,12 +17,6 @@ export interface ZLinkActorSessionBindingRuntimeOwner {
|
|
|
19
17
|
actorId: string,
|
|
20
18
|
sealId: string
|
|
21
19
|
): Promise<ZLinkActorSessionRelocationSnapshot | undefined>;
|
|
22
|
-
retainRelocationOutbound(
|
|
23
|
-
actorId: string,
|
|
24
|
-
operation: ZLinkActorSessionRetainedOutbound,
|
|
25
|
-
sealId?: string
|
|
26
|
-
): Promise<ServiceSessionBindingAdmissionResult>;
|
|
27
|
-
discardRelocationOutbound(actorId: string, sealId: string, error: unknown): Promise<void>;
|
|
28
20
|
applyRelocation(
|
|
29
21
|
actorId: string,
|
|
30
22
|
sealId: string,
|
|
@@ -1,25 +1,33 @@
|
|
|
1
1
|
import type { ZLinkMessage, ZLinkMessageSerializer, ZLinkSessionActor } from '../../contracts';
|
|
2
|
-
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
4
|
-
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
5
3
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} from './protocol';
|
|
4
|
+
ZLinkDispatchErrorSurface,
|
|
5
|
+
ZLinkDispatchMessageKind,
|
|
6
|
+
ZLinkRuntimeMessageFlowOutcome
|
|
7
|
+
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
11
8
|
import { throwIfAborted } from '../abort';
|
|
12
|
-
import {
|
|
9
|
+
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
10
|
+
import { flowIfEnabled } from '../diagnostics';
|
|
11
|
+
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
12
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
13
13
|
import {
|
|
14
14
|
ZLinkActorSessionBindingRegistry,
|
|
15
15
|
ZLinkActorSessionBindingTermination
|
|
16
16
|
} from './actor-session-binding-registry';
|
|
17
17
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
18
18
|
import { ZLinkManagedStream } from './managed-stream';
|
|
19
|
+
import {
|
|
20
|
+
encodeStreamHeader,
|
|
21
|
+
messageToBytes,
|
|
22
|
+
ZLinkStreamMessageKind,
|
|
23
|
+
type ZLinkStreamFrameHeader
|
|
24
|
+
} from './protocol';
|
|
19
25
|
import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
20
26
|
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
27
|
+
export const DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS = 2000;
|
|
21
28
|
|
|
22
29
|
export interface ZLinkBoundActorRelaySenderOptions {
|
|
30
|
+
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
23
31
|
readonly actorBindTimeoutMs?: number;
|
|
24
32
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
25
33
|
readonly relay?: (
|
|
@@ -65,36 +73,47 @@ export class ZLinkBoundActorRelaySender {
|
|
|
65
73
|
await admission.complete();
|
|
66
74
|
}
|
|
67
75
|
};
|
|
68
|
-
if (
|
|
69
|
-
(await this.routes.isSealed(actor.actorId)) &&
|
|
70
|
-
captureZLinkExecutionTurn() !== undefined
|
|
71
|
-
) {
|
|
72
|
-
void operation().catch(() => undefined);
|
|
73
|
-
return { status: ZLinkSubmitStatus.Submitted };
|
|
74
|
-
}
|
|
75
76
|
return await operation();
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
78
|
+
throwIfAborted(signal);
|
|
79
|
+
const held = await this.routes.acceptOneWay(actor.actorId, actor.bindingToken, () => {
|
|
80
|
+
let heldMessage: Message | undefined = encodeFrameworkPayloadMessage(
|
|
81
|
+
payload,
|
|
82
|
+
this.options.messageSerializers
|
|
83
|
+
);
|
|
84
|
+
return {
|
|
85
|
+
deliver: async () => {
|
|
86
|
+
try {
|
|
87
|
+
const result = await this.routes.runAcceptedFrameWhenReady(
|
|
88
|
+
actor.actorId,
|
|
89
|
+
actor.bindingToken,
|
|
90
|
+
() =>
|
|
91
|
+
this.relayAcceptedFrame(actor, payload, undefined, header, undefined, heldMessage)
|
|
92
|
+
);
|
|
93
|
+
if (result.status !== ZLinkSubmitStatus.Submitted) {
|
|
94
|
+
this.traceHeldDrop(
|
|
95
|
+
header,
|
|
96
|
+
result.status === ZLinkSubmitStatus.Backpressured ||
|
|
97
|
+
result.status === ZLinkSubmitStatus.TimedOut
|
|
98
|
+
? 'backpressure'
|
|
99
|
+
: result.status === ZLinkSubmitStatus.Shutdown
|
|
100
|
+
? 'shutdown'
|
|
101
|
+
: 'stale_target'
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
} finally {
|
|
105
|
+
heldMessage?.close();
|
|
106
|
+
heldMessage = undefined;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
drop: (reason, error) => {
|
|
110
|
+
heldMessage?.close();
|
|
111
|
+
heldMessage = undefined;
|
|
112
|
+
this.traceHeldDrop(header, reason, error);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
if (held) {
|
|
98
117
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
99
118
|
}
|
|
100
119
|
return this.routes.runAcceptedFrameWhenReady(
|
|
@@ -105,12 +124,36 @@ export class ZLinkBoundActorRelaySender {
|
|
|
105
124
|
);
|
|
106
125
|
}
|
|
107
126
|
|
|
127
|
+
private traceHeldDrop(
|
|
128
|
+
header: ZLinkStreamFrameHeader,
|
|
129
|
+
reason: 'backpressure' | 'target_closed' | 'stale_target' | 'shutdown',
|
|
130
|
+
error?: unknown
|
|
131
|
+
): void {
|
|
132
|
+
flowIfEnabled(
|
|
133
|
+
this.options.dispatchErrors?.flow,
|
|
134
|
+
ZLinkRuntimeMessageFlowOutcome.Dropped,
|
|
135
|
+
undefined,
|
|
136
|
+
header.flowId
|
|
137
|
+
)?.trace({
|
|
138
|
+
outcome: ZLinkRuntimeMessageFlowOutcome.Dropped,
|
|
139
|
+
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
140
|
+
messageKind: ZLinkDispatchMessageKind.Send,
|
|
141
|
+
packetName: header.name,
|
|
142
|
+
flowId: header.flowId,
|
|
143
|
+
flowOrigin: header.flowOrigin,
|
|
144
|
+
correlationId: header.correlationId,
|
|
145
|
+
errorReason: reason,
|
|
146
|
+
...(error instanceof Error ? { errorType: error.name, errorMessage: error.message } : {})
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
108
150
|
private async relayAcceptedFrame(
|
|
109
151
|
actor: DefaultZLinkSessionActor,
|
|
110
152
|
payload: ZLinkMessage,
|
|
111
153
|
signal?: AbortSignal,
|
|
112
154
|
header?: ZLinkStreamFrameHeader,
|
|
113
|
-
requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined }
|
|
155
|
+
requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined },
|
|
156
|
+
acceptedPayload?: Message
|
|
114
157
|
): Promise<ZLinkSubmitResult> {
|
|
115
158
|
const activeHeader = header ?? (await this.currentHeader(actor));
|
|
116
159
|
const started = await this.lifecycle.run(actor.actorId, async () => {
|
|
@@ -119,7 +162,8 @@ export class ZLinkBoundActorRelaySender {
|
|
|
119
162
|
payload,
|
|
120
163
|
signal,
|
|
121
164
|
activeHeader,
|
|
122
|
-
requestAdmission
|
|
165
|
+
requestAdmission,
|
|
166
|
+
acceptedPayload
|
|
123
167
|
);
|
|
124
168
|
if (
|
|
125
169
|
activeHeader.kind === ZLinkStreamMessageKind.Request &&
|
|
@@ -165,13 +209,15 @@ export class ZLinkBoundActorRelaySender {
|
|
|
165
209
|
payload: ZLinkMessage,
|
|
166
210
|
signal: AbortSignal | undefined,
|
|
167
211
|
currentHeader?: ZLinkStreamFrameHeader,
|
|
168
|
-
requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined }
|
|
212
|
+
requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined },
|
|
213
|
+
acceptedPayload?: Message
|
|
169
214
|
): Promise<ZLinkSubmitResult> {
|
|
170
215
|
const header = currentHeader ?? (await this.currentHeader(actor));
|
|
171
216
|
const held = requestAdmission?.beginSubmission(signal);
|
|
172
217
|
if (held !== undefined) await held;
|
|
173
218
|
throwIfAborted(signal);
|
|
174
|
-
const payloadMessage =
|
|
219
|
+
const payloadMessage =
|
|
220
|
+
acceptedPayload ?? encodeFrameworkPayloadMessage(payload, this.options.messageSerializers);
|
|
175
221
|
try {
|
|
176
222
|
if (this.options.relay !== undefined) {
|
|
177
223
|
const handled = await this.options.relay(actor, header, payloadMessage, signal);
|
|
@@ -198,7 +244,7 @@ export class ZLinkBoundActorRelaySender {
|
|
|
198
244
|
framePayloadMessage.close();
|
|
199
245
|
}
|
|
200
246
|
} finally {
|
|
201
|
-
payloadMessage.close();
|
|
247
|
+
if (acceptedPayload === undefined) payloadMessage.close();
|
|
202
248
|
}
|
|
203
249
|
}
|
|
204
250
|
|
|
@@ -224,7 +270,7 @@ export class ZLinkBoundActorRelaySender {
|
|
|
224
270
|
) {
|
|
225
271
|
await detached.context.stream.unbindActor(
|
|
226
272
|
actor.actorId,
|
|
227
|
-
this.options.actorBindTimeoutMs ??
|
|
273
|
+
this.options.actorBindTimeoutMs ?? DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS,
|
|
228
274
|
signal
|
|
229
275
|
);
|
|
230
276
|
}
|
|
@@ -233,7 +279,7 @@ export class ZLinkBoundActorRelaySender {
|
|
|
233
279
|
|
|
234
280
|
async notifyPhysicalDisconnect(context: DefaultZLinkSessionContext): Promise<void> {
|
|
235
281
|
const snapshot = [...context.boundActors];
|
|
236
|
-
const timeoutMs = this.options.actorBindTimeoutMs ??
|
|
282
|
+
const timeoutMs = this.options.actorBindTimeoutMs ?? DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS;
|
|
237
283
|
await Promise.allSettled(
|
|
238
284
|
snapshot.map(async (actor) => {
|
|
239
285
|
const detached = await this.lifecycle.run(actor.actorId, async () => {
|
|
@@ -23,6 +23,8 @@ import type { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './ses
|
|
|
23
23
|
import { boundSessionErrorPayload } from './bound-session-response-target';
|
|
24
24
|
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
25
25
|
import { ZLinkManagedStream } from './managed-stream';
|
|
26
|
+
import type { ZLinkSessionBindingIdentity } from './stream-binding-runtime-ports';
|
|
27
|
+
import { REMOTE_BOUND_SESSION_BIND_PACKET } from '../spots/spot-remote-codec';
|
|
26
28
|
|
|
27
29
|
const ZLINK_SEND_DONT_WAIT = 1;
|
|
28
30
|
|
|
@@ -301,12 +303,30 @@ export class ZLinkBoundSessionService {
|
|
|
301
303
|
}
|
|
302
304
|
}
|
|
303
305
|
|
|
306
|
+
/**
|
|
307
|
+
* Closes the physical Session of one exact binding after its relocation
|
|
308
|
+
* failed (Session–Actor binding §8.1). A newer binding of the same Actor is
|
|
309
|
+
* not selected.
|
|
310
|
+
*/
|
|
311
|
+
async closeSessionBinding(
|
|
312
|
+
actorId: string,
|
|
313
|
+
expected: ZLinkSessionBindingIdentity,
|
|
314
|
+
signal?: AbortSignal
|
|
315
|
+
): Promise<void> {
|
|
316
|
+
const route = await this.routes.routeForSessionBinding(
|
|
317
|
+
actorId,
|
|
318
|
+
expected.sessionRid,
|
|
319
|
+
expected.bindingGeneration
|
|
320
|
+
);
|
|
321
|
+
await route?.context.close(signal);
|
|
322
|
+
}
|
|
323
|
+
|
|
304
324
|
async relayRemoteBoundSessionBind(stream: ZLinkManagedStream, actorRef: ActorRef): Promise<void> {
|
|
305
325
|
const encodedBindHeader = encodeStreamHeader({
|
|
306
326
|
kind: ZLinkStreamMessageKind.Send,
|
|
307
327
|
codec: ZLinkStreamCodec.Raw,
|
|
308
328
|
flags: ZLinkStreamHeaderFlags.None,
|
|
309
|
-
name:
|
|
329
|
+
name: REMOTE_BOUND_SESSION_BIND_PACKET,
|
|
310
330
|
metadata: new Map()
|
|
311
331
|
});
|
|
312
332
|
// encodeStreamHeader returns a fresh, unaliased array; view it without re-copying.
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import {
|
|
2
|
+
type ActorRef,
|
|
3
|
+
type Type,
|
|
4
|
+
type ZLinkActor,
|
|
5
|
+
type ZLinkBoundSession,
|
|
6
|
+
type ZLinkMessageSerializer,
|
|
7
|
+
type ZLinkSession,
|
|
8
|
+
type ZLinkSessionActor,
|
|
9
|
+
type ZLinkSessionFactory,
|
|
10
|
+
type ZLinkStreamCompressionCodec,
|
|
11
|
+
type ZLinkStreamCompressionOptions,
|
|
12
|
+
ZLinkMessage
|
|
13
13
|
} from '../../contracts';
|
|
14
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
15
|
-
import type { ZLinkSubmitResult } from '../messaging/submission-result';
|
|
16
|
-
import { ZLinkMessage } from '../../contracts';
|
|
17
14
|
import type { Message } from '../../contracts/Common/Message';
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
type ZLinkFrameworkRegistration
|
|
22
|
-
} from '../configuration';
|
|
23
|
-
import { ZLinkDispatchErrorReporter } from '../channels';
|
|
15
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
16
|
+
import { DEFAULT_STREAM_NODE_MAX_MESSAGE_SIZE } from '../../contracts/Configuration/InternalDefaults';
|
|
17
|
+
import { zlinkDefaultLocationOptions } from '../../contracts/Locations/Options';
|
|
24
18
|
import type {
|
|
25
|
-
ZLinkBackendAdapterFactory,
|
|
26
19
|
ZLinkBackendActorSessionNode,
|
|
20
|
+
ZLinkBackendAdapterFactory,
|
|
27
21
|
ZLinkBackendContext,
|
|
28
22
|
ZLinkBackendMeshNode,
|
|
29
23
|
ZLinkBackendSocketMonitor,
|
|
30
24
|
ZLinkBackendStreamSocket
|
|
31
25
|
} from '../backend/contracts';
|
|
32
26
|
import type { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
27
|
+
import { ZLinkDispatchErrorReporter } from '../channels';
|
|
28
|
+
import {
|
|
29
|
+
buildAdvertisedEndpoint,
|
|
30
|
+
ZLinkConfigurationException,
|
|
31
|
+
type ZLinkFrameworkRegistration
|
|
32
|
+
} from '../configuration';
|
|
33
|
+
import type { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
33
34
|
import type { StreamSessionService } from '../foundation/service-runtime-contracts';
|
|
34
35
|
import { registerServiceSessionBindingIngressPort } from '../foundation/service-session-binding-ingress-port';
|
|
35
36
|
import {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
type ZLinkStreamReplyMessageKind
|
|
41
|
-
} from './protocol';
|
|
37
|
+
ApplicationJobQueue,
|
|
38
|
+
resolveApplicationJobQueueConfiguration
|
|
39
|
+
} from '../host/application-job-queue';
|
|
40
|
+
import type { ZLinkSubmitResult } from '../messaging/submission-result';
|
|
42
41
|
import {
|
|
42
|
+
DEFAULT_TERMINAL_RELOCATION_CAPACITY,
|
|
43
43
|
ZLinkActorSessionBindingRegistry,
|
|
44
44
|
type ZLinkActorSessionAuthorityFence
|
|
45
45
|
} from './actor-session-binding-registry';
|
|
@@ -48,38 +48,45 @@ import {
|
|
|
48
48
|
registerActorSessionBindingRuntimeOwner
|
|
49
49
|
} from './actor-session-binding-runtime-owner';
|
|
50
50
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
51
|
+
import { ZLinkBoundActorRelaySender } from './bound-actor-relay-sender';
|
|
51
52
|
import {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
} from './
|
|
53
|
+
DefaultZLinkBoundSessionResponseTarget,
|
|
54
|
+
type ZLinkBoundSessionResponseTarget
|
|
55
|
+
} from './bound-session-response-target';
|
|
56
|
+
import { ZLinkBoundSessionService, type ZLinkBoundSessionTransport } from './bound-session-service';
|
|
57
|
+
import { ZLinkManagedStream } from './managed-stream';
|
|
56
58
|
import {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
messageToBytes,
|
|
60
|
+
ZLinkStreamCodec,
|
|
61
|
+
ZLinkStreamMessageKind,
|
|
62
|
+
type ZLinkStreamFrameHeader,
|
|
63
|
+
type ZLinkStreamReplyMessageKind
|
|
64
|
+
} from './protocol';
|
|
65
|
+
import { ZLinkSessionActorCoordinator } from './session-actor-coordinator';
|
|
61
66
|
import {
|
|
62
67
|
DefaultZLinkBoundSession,
|
|
63
68
|
DefaultZLinkSessionActor,
|
|
64
69
|
DefaultZLinkSessionContext
|
|
65
70
|
} from './session-context';
|
|
66
|
-
import {
|
|
67
|
-
DefaultZLinkBoundSessionResponseTarget,
|
|
68
|
-
type ZLinkBoundSessionResponseTarget
|
|
69
|
-
} from './bound-session-response-target';
|
|
70
|
-
import { ZLinkBoundSessionService, type ZLinkBoundSessionTransport } from './bound-session-service';
|
|
71
|
-
import { ZLinkSessionActorCoordinator } from './session-actor-coordinator';
|
|
72
|
-
import { ZLinkBoundActorRelaySender } from './bound-actor-relay-sender';
|
|
73
|
-
import { ZLinkManagedStream } from './managed-stream';
|
|
74
71
|
import { createStreamSessionInstance } from './session-provider';
|
|
75
|
-
import {
|
|
72
|
+
import type {
|
|
73
|
+
ZLinkActorRouteCommitOptions,
|
|
74
|
+
ZLinkSessionBindingConfirmationOptions,
|
|
75
|
+
ZLinkSessionBindingIdentity
|
|
76
|
+
} from './stream-binding-runtime-ports';
|
|
77
|
+
import {
|
|
78
|
+
decompressStreamPayload,
|
|
79
|
+
resolveStreamCompressionCodec,
|
|
80
|
+
ZLinkStreamFrameMessageFactory
|
|
81
|
+
} from './stream-frame-factory';
|
|
82
|
+
import { simpleMessage } from './stream-message-utils';
|
|
76
83
|
import {
|
|
77
84
|
ZLinkStreamSessionNodeRuntime as ZLinkStreamSessionNodeRuntimeCore,
|
|
78
85
|
ZLinkStreamSessionRuntime as ZLinkStreamSessionRuntimeCore,
|
|
79
86
|
type ZLinkStreamSessionNodeRuntimeOptions as ZLinkStreamSessionNodeRuntimeCoreOptions,
|
|
80
87
|
type ZLinkStreamSessionRuntimeOptions as ZLinkStreamSessionRuntimeCoreOptions
|
|
81
88
|
} from './stream-session-runtime';
|
|
82
|
-
|
|
89
|
+
const DEFAULT_STREAM_SERVICE_SHUTDOWN_TIMEOUT_MS = 1000;
|
|
83
90
|
export { ZLinkPendingSessionRequest } from './session-requests';
|
|
84
91
|
export { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
85
92
|
export { ZLinkActorSessionBindingRegistry } from './actor-session-binding-registry';
|
|
@@ -99,6 +106,7 @@ export type {
|
|
|
99
106
|
} from './bound-session-service';
|
|
100
107
|
|
|
101
108
|
export interface ZLinkStreamBindingRuntimeOptions {
|
|
109
|
+
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
102
110
|
readonly transport?: ZLinkBoundSessionTransport;
|
|
103
111
|
readonly messageFactory?: ZLinkStreamMessageFactory;
|
|
104
112
|
readonly streamPayloadCodec?: ZLinkStreamPayloadCodec;
|
|
@@ -121,7 +129,7 @@ export interface ZLinkStreamBindingRuntimeOptions {
|
|
|
121
129
|
actor: ActorRef,
|
|
122
130
|
sessionRid: ActorRef['nodeRid'],
|
|
123
131
|
signal?: AbortSignal,
|
|
124
|
-
options?:
|
|
132
|
+
options?: ZLinkSessionBindingConfirmationOptions
|
|
125
133
|
) => Promise<void>;
|
|
126
134
|
readonly errorSink?: () =>
|
|
127
135
|
| {
|
|
@@ -274,10 +282,7 @@ export class ZLinkStreamRuntimeManager {
|
|
|
274
282
|
node.nativeSessionServices.push(service);
|
|
275
283
|
const bindingOwner = actorSessionBindingRuntimeOwner(this.options.bindingRuntime);
|
|
276
284
|
registerServiceSessionBindingIngressPort(service, {
|
|
277
|
-
actorSlot: (actorId, sessionRid) => bindingOwner.actorSlot(actorId, sessionRid)
|
|
278
|
-
retainOutbound: (actorId, delivery) =>
|
|
279
|
-
bindingOwner.retainRelocationOutbound(actorId, delivery),
|
|
280
|
-
clearOutbound: (actorId, error) => bindingOwner.clearRelocation(actorId, error)
|
|
285
|
+
actorSlot: (actorId, sessionRid) => bindingOwner.actorSlot(actorId, sessionRid)
|
|
281
286
|
});
|
|
282
287
|
nativeSessionRoutes.set(meshName, {
|
|
283
288
|
service,
|
|
@@ -332,16 +337,16 @@ export class ZLinkStreamRuntimeManager {
|
|
|
332
337
|
|
|
333
338
|
async dispose(): Promise<void> {
|
|
334
339
|
const nodes = [...this.nodes.values()];
|
|
335
|
-
this.nodes.clear();
|
|
336
340
|
for (const node of nodes.reverse()) {
|
|
337
341
|
await node.runtime?.dispose();
|
|
338
342
|
for (const service of node.nativeSessionServices) {
|
|
339
|
-
service.shutdown(
|
|
343
|
+
service.shutdown(DEFAULT_STREAM_SERVICE_SHUTDOWN_TIMEOUT_MS);
|
|
340
344
|
service.close();
|
|
341
345
|
}
|
|
342
346
|
await node.monitor?.dispose();
|
|
343
347
|
await node.socket.dispose();
|
|
344
348
|
}
|
|
349
|
+
this.nodes.clear();
|
|
345
350
|
}
|
|
346
351
|
|
|
347
352
|
async notifyServerDrain(meshName: string): Promise<void> {
|
|
@@ -373,6 +378,7 @@ export class ZLinkStreamSessionRuntime extends ZLinkStreamSessionRuntimeCore {
|
|
|
373
378
|
const bindingRuntime =
|
|
374
379
|
options.bindingRuntime ??
|
|
375
380
|
new ZLinkStreamBindingRuntime({
|
|
381
|
+
dispatchErrors: options.dispatchErrors,
|
|
376
382
|
flowCreationEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
377
383
|
});
|
|
378
384
|
super(
|
|
@@ -396,6 +402,7 @@ export class ZLinkStreamSessionNodeRuntime extends ZLinkStreamSessionNodeRuntime
|
|
|
396
402
|
const bindingRuntime =
|
|
397
403
|
options.bindingRuntime ??
|
|
398
404
|
new ZLinkStreamBindingRuntime({
|
|
405
|
+
dispatchErrors: options.dispatchErrors,
|
|
399
406
|
flowCreationEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
400
407
|
});
|
|
401
408
|
super({
|
|
@@ -424,7 +431,12 @@ export class ZLinkStreamBindingRuntime {
|
|
|
424
431
|
this.routes = new ZLinkActorSessionBindingRegistry<
|
|
425
432
|
DefaultZLinkSessionContext,
|
|
426
433
|
DefaultZLinkSessionActor
|
|
427
|
-
>(
|
|
434
|
+
>(
|
|
435
|
+
DEFAULT_TERMINAL_RELOCATION_CAPACITY,
|
|
436
|
+
runtimeOptions.sessionRelocationSealTimeoutMs ??
|
|
437
|
+
zlinkDefaultLocationOptions.sessionRelocationSealTimeoutMs,
|
|
438
|
+
runtimeOptions.errorSink
|
|
439
|
+
);
|
|
428
440
|
this.compressionCodec = resolveStreamCompressionCodec(runtimeOptions.streamCompression);
|
|
429
441
|
this.frameMessages = new ZLinkStreamFrameMessageFactory(runtimeOptions);
|
|
430
442
|
this.boundSessions = new ZLinkBoundSessionService(
|
|
@@ -446,19 +458,11 @@ export class ZLinkStreamBindingRuntime {
|
|
|
446
458
|
actorSessionLifecycle
|
|
447
459
|
);
|
|
448
460
|
registerActorSessionBindingRuntimeOwner(this, {
|
|
449
|
-
actorSlot: async (actorId, sessionRid) =>
|
|
450
|
-
|
|
451
|
-
return route !== undefined && route.sessionIdentity === sessionRid
|
|
452
|
-
? route.actorSlot
|
|
453
|
-
: undefined;
|
|
454
|
-
},
|
|
461
|
+
actorSlot: async (actorId, sessionRid) =>
|
|
462
|
+
(await this.routes.routeForSessionBinding(actorId, sessionRid))?.actorSlot,
|
|
455
463
|
sealRelocation: (claim, expected, signal) =>
|
|
456
464
|
this.routes.sealRelocation(claim, expected, signal),
|
|
457
465
|
relocationSnapshot: (actorId, sealId) => this.routes.relocationSnapshot(actorId, sealId),
|
|
458
|
-
retainRelocationOutbound: (actorId, operation, sealId) =>
|
|
459
|
-
this.routes.retainRelocationOutbound(actorId, operation, sealId),
|
|
460
|
-
discardRelocationOutbound: (actorId, sealId, error) =>
|
|
461
|
-
this.routes.discardRelocationOutbound(actorId, sealId, error),
|
|
462
466
|
applyRelocation: (...args) => this.routes.applyRelocation(...args),
|
|
463
467
|
observeRelocationTerminal: (...args) => this.routes.observeRelocationTerminal(...args),
|
|
464
468
|
clearRelocation: (actorId, error) => this.routes.clearRelocation(actorId, error),
|
|
@@ -743,6 +747,14 @@ export class ZLinkStreamBindingRuntime {
|
|
|
743
747
|
await this.boundSessions.disconnectBoundSession(actorId, signal);
|
|
744
748
|
}
|
|
745
749
|
|
|
750
|
+
async closeSessionBinding(
|
|
751
|
+
actorId: string,
|
|
752
|
+
expected: ZLinkSessionBindingIdentity,
|
|
753
|
+
signal?: AbortSignal
|
|
754
|
+
): Promise<void> {
|
|
755
|
+
await this.boundSessions.closeSessionBinding(actorId, expected, signal);
|
|
756
|
+
}
|
|
757
|
+
|
|
746
758
|
async relay(
|
|
747
759
|
actor: DefaultZLinkSessionActor,
|
|
748
760
|
payload: ZLinkMessage,
|
|
@@ -10,7 +10,11 @@ import type {
|
|
|
10
10
|
ZLinkMessageSerializer,
|
|
11
11
|
ZLinkStream
|
|
12
12
|
} from '../../contracts';
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
ZLinkSubmitStatus,
|
|
15
|
+
classifySubmitResult,
|
|
16
|
+
type ZLinkSubmitResult
|
|
17
|
+
} from '../messaging/submission-result';
|
|
14
18
|
import type { Message } from '../../contracts/Common/Message';
|
|
15
19
|
import { throwIfAborted } from '../abort';
|
|
16
20
|
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
@@ -19,14 +23,16 @@ import type {
|
|
|
19
23
|
ZLinkBackendSendFlags,
|
|
20
24
|
ZLinkBackendStreamSocket
|
|
21
25
|
} from '../backend/contracts';
|
|
22
|
-
import { RequestResult,
|
|
26
|
+
import { RequestResult, isZLinkBackendResultError } from '../backend/runtime-values';
|
|
23
27
|
import { ZLinkBufferMessage as NativeMessage } from '../backend/runtime-message';
|
|
28
|
+
import { diagnosticTextOrAbsent } from '../diagnostics/diagnostic-text';
|
|
24
29
|
import type {
|
|
25
30
|
StreamSessionActorAuthorityFence,
|
|
26
31
|
StreamSessionService
|
|
27
32
|
} from '../foundation/service-runtime-contracts';
|
|
28
33
|
import type { ServiceRetiredBoundSessionRouteFence } from '../foundation/service-stateful-wire-codec';
|
|
29
34
|
import type { ServiceActorRef } from '../foundation/service-stateful-registry';
|
|
35
|
+
import type { ServiceStreamSessionBinding } from '../foundation/service-runtime-contracts';
|
|
30
36
|
import {
|
|
31
37
|
closeMeshCompletion,
|
|
32
38
|
type ZLinkMeshCompletion,
|
|
@@ -55,7 +61,8 @@ export interface ZLinkNativeSessionRoute {
|
|
|
55
61
|
|
|
56
62
|
interface ZLinkManagedActorBinding {
|
|
57
63
|
readonly actor: ZLinkBackendActorRef;
|
|
58
|
-
|
|
64
|
+
/** The Session owner's registry snapshot of this binding (Session–Actor binding §5-2). */
|
|
65
|
+
readonly binding?: ServiceStreamSessionBinding;
|
|
59
66
|
readonly route?: ZLinkNativeSessionRoute;
|
|
60
67
|
}
|
|
61
68
|
|
|
@@ -90,7 +97,12 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
90
97
|
}
|
|
91
98
|
|
|
92
99
|
actorBindingGeneration(actorId: string): bigint | undefined {
|
|
93
|
-
return this.nativeActorBindings.get(actorId)?.bindingGeneration;
|
|
100
|
+
return this.nativeActorBindings.get(actorId)?.binding?.bindingGeneration;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** The Session owner's registry snapshot of the Actor's current native binding. */
|
|
104
|
+
actorBinding(actorId: string): ServiceStreamSessionBinding | undefined {
|
|
105
|
+
return this.nativeActorBindings.get(actorId)?.binding;
|
|
94
106
|
}
|
|
95
107
|
|
|
96
108
|
private isTransportClosed(): boolean {
|
|
@@ -128,7 +140,9 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
128
140
|
await this.socket.submit(this.backendRoutingId(), payload, timeoutMs);
|
|
129
141
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
130
142
|
} catch (error) {
|
|
131
|
-
if (
|
|
143
|
+
if (isZLinkBackendResultError(error) && error.operation === 'submit') {
|
|
144
|
+
return classifySubmitResult(error.result, 'STREAM submit', error.phase);
|
|
145
|
+
}
|
|
132
146
|
throw error;
|
|
133
147
|
}
|
|
134
148
|
}
|
|
@@ -268,7 +282,7 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
268
282
|
}
|
|
269
283
|
this.nativeActorBindings.set(actor.actorId, {
|
|
270
284
|
actor: nativeActor,
|
|
271
|
-
|
|
285
|
+
binding,
|
|
272
286
|
route
|
|
273
287
|
});
|
|
274
288
|
return;
|
|
@@ -309,7 +323,11 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
309
323
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
310
324
|
`Actor '${actor.actorId}' native route fence does not match its ActorRef ` +
|
|
311
325
|
`(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, ` +
|
|
312
|
-
`resolved ${
|
|
326
|
+
`resolved ${diagnosticTextOrAbsent(
|
|
327
|
+
resolved === undefined
|
|
328
|
+
? undefined
|
|
329
|
+
: `${String(resolved.nodeRid)}/${resolved.generation}`
|
|
330
|
+
)}, ` +
|
|
313
331
|
`terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`
|
|
314
332
|
);
|
|
315
333
|
}
|
|
@@ -329,7 +347,8 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
329
347
|
const binding = this.nativeActorBindings.get(actorId);
|
|
330
348
|
if (binding?.route !== undefined) {
|
|
331
349
|
const route = binding.route;
|
|
332
|
-
|
|
350
|
+
const bindingGeneration = binding.binding!.bindingGeneration;
|
|
351
|
+
if (!this.hasNativeBinding(route, actorId, bindingGeneration)) {
|
|
333
352
|
this.nativeActorBindings.delete(actorId);
|
|
334
353
|
return;
|
|
335
354
|
}
|
|
@@ -340,7 +359,7 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
340
359
|
route.service.unbindActor(
|
|
341
360
|
this.backendRoutingId(),
|
|
342
361
|
binding.actor as never,
|
|
343
|
-
|
|
362
|
+
bindingGeneration,
|
|
344
363
|
timeoutMs
|
|
345
364
|
),
|
|
346
365
|
signal
|
|
@@ -356,7 +375,7 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
356
375
|
// tombstone. A transport teardown can therefore report an internal
|
|
357
376
|
// completion after the exact binding is already gone. Treat only that
|
|
358
377
|
// exact missing binding as stale cleanup; preserve other failures.
|
|
359
|
-
if (this.hasNativeBinding(route, actorId,
|
|
378
|
+
if (this.hasNativeBinding(route, actorId, bindingGeneration)) {
|
|
360
379
|
throw error;
|
|
361
380
|
}
|
|
362
381
|
}
|
|
@@ -160,9 +160,8 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
160
160
|
): Promise<ZLinkSubmitResult> {
|
|
161
161
|
const localActor = this.options.localActorProvider?.() === true;
|
|
162
162
|
const remoteTarget = this.options.remoteBoundSessionTargetProvider();
|
|
163
|
-
const sealedRemoteTarget = remoteTarget?.relocationSealId !== undefined;
|
|
164
163
|
let nativeAttempted = false;
|
|
165
|
-
if (localActor
|
|
164
|
+
if (localActor) {
|
|
166
165
|
const result = await this.options.runtime.submitLocalBoundSession(
|
|
167
166
|
this.options.actorId,
|
|
168
167
|
this.message,
|
|
@@ -213,7 +212,6 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
213
212
|
actorNodeRidHex: (actorRef?.nodeRid as { toHex?: () => string } | undefined)?.toHex?.(),
|
|
214
213
|
actorGeneration: actorRef?.objectGeneration.toString(),
|
|
215
214
|
actorOwnershipGeneration: ownershipGeneration?.toString(),
|
|
216
|
-
relocationSealId: remoteTarget.relocationSealId,
|
|
217
215
|
message: this.message,
|
|
218
216
|
boundPacketName: packetName,
|
|
219
217
|
metadata: this.selectedMetadata,
|