@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,28 +1,27 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
|
|
3
|
-
import type { ActorRef, RoutingId, ZLinkActor, ZLinkChannelClient, ZLinkFanoutClient, ZLinkMessage, ZLinkMeshNodeDescriptor, ZLinkMessageSerializer, ZLinkSpotPublisherClient } from '../../contracts';
|
|
4
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
5
|
-
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
6
|
-
import { ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
7
|
-
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
8
|
-
import { type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
1
|
+
import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkChannelClient, type ZLinkFanoutClient, type ZLinkMeshNodeDescriptor, type ZLinkMessage, type ZLinkMessageSerializer, type ZLinkSpotPublisherClient, ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
9
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
10
|
-
import type {
|
|
11
|
-
import {
|
|
3
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
|
+
import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
|
|
5
|
+
import type { ZLinkActivationConcurrency } from '../activation-admission';
|
|
6
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
7
|
+
import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
12
8
|
import type { ZLinkBackendAdapterFactory, ZLinkBackendContext, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
13
9
|
import { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
14
10
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
11
|
+
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
12
|
+
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
13
|
+
import type { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
14
|
+
import { type ZLinkMessageFollowOrigin, type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
15
|
+
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
16
|
+
import { ApplicationJobQueue } from '../host/application-job-queue';
|
|
15
17
|
import { ZLinkLocationRuntime, type ZLinkLocationEventSink, type ZLinkLocationRuntimeStores } from '../locations';
|
|
16
|
-
import type
|
|
17
|
-
import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
18
|
+
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
18
19
|
import type { ZLinkDetachedTaskRunner } from './spot-actor-join-dispatch';
|
|
19
20
|
import type { ZLinkSpotRoutedTransport } from './spot-outbound';
|
|
20
21
|
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
21
|
-
import type { ZLinkEntryActorRuntime,
|
|
22
|
-
import type { ZLinkActivationConcurrency } from '../activation-admission';
|
|
23
|
-
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
24
|
-
import { ApplicationJobQueue } from '../host/application-job-queue';
|
|
22
|
+
import type { ZLinkEntryActorRuntime, ZLinkSpotActorHandoffRuntime, ZLinkSpotActorTransferRuntime, ZLinkSpotBoundSessionRuntime } from './spot-runtime-ports';
|
|
25
23
|
export interface ZLinkSpotNodeRuntimeManagerOptions {
|
|
24
|
+
readonly errorSink: import('../diagnostics/dispatch-error-port').ZLinkDispatchErrorSink;
|
|
26
25
|
readonly listenerRecords?: ZLinkListenerRecords;
|
|
27
26
|
readonly registration: ZLinkFrameworkRegistration;
|
|
28
27
|
readonly primaryMeshName?: string;
|
|
@@ -43,7 +42,7 @@ export interface ZLinkSpotNodeRuntimeManagerOptions {
|
|
|
43
42
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
44
43
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
45
44
|
readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
46
|
-
readonly detachedTaskRunner
|
|
45
|
+
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
47
46
|
readonly applicationJobQueue?: ApplicationJobQueue;
|
|
48
47
|
readonly applicationJobReceiveFlowFailureSink?: (error: unknown) => void;
|
|
49
48
|
readonly peerAdmissionSealed?: (meshName: string) => boolean;
|
|
@@ -60,7 +59,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
60
59
|
private readonly entryActivations;
|
|
61
60
|
private readonly entryActivationStarts;
|
|
62
61
|
private readonly publishers;
|
|
63
|
-
private
|
|
62
|
+
private readonly disposal;
|
|
64
63
|
private readonly autoConnectLoops;
|
|
65
64
|
private readonly publishedMeshNodeDescriptors;
|
|
66
65
|
private readonly descriptorRevisionByMesh;
|
|
@@ -110,6 +109,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
110
109
|
notifyEntrySpotActorDisconnected(meshName: string, actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
111
110
|
serverChannels(meshName: string): [string, import("../configuration").ZLinkMeshChannelOptions][];
|
|
112
111
|
dispose(signal?: AbortSignal, deadline?: Date): Promise<void>;
|
|
112
|
+
private disposeCore;
|
|
113
113
|
private dispatchMeshRecord;
|
|
114
114
|
dispatchEntrySpotRecord(meshName: string, owner: ReadyRecord, record: ReceiveRecord): Promise<boolean>;
|
|
115
115
|
private ensureEntryActivation;
|
|
@@ -117,6 +117,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
117
117
|
private primaryEntryActivation;
|
|
118
118
|
dispatchEntryActorPacket(actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
|
|
119
119
|
dispatchEntryActorJoin(meshName: string, actor: ZLinkActor, handoffBacklog?: readonly ZLinkActorHandoffPacket[]): Promise<void>;
|
|
120
|
+
executeEntryActor<T>(meshName: string, actorId: string, operation: () => Promise<T>): Promise<T>;
|
|
120
121
|
publish(meshName: string, channelName: string, topic: string, packetName: string | undefined, event: Message, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
121
122
|
private executePublish;
|
|
122
123
|
tryPublish(meshName: string, channelName: string, topic: string, packetName: string | undefined, event: Message, metadata?: ReadonlyMap<string, string>): ZLinkSubmitResult;
|
|
@@ -2,26 +2,31 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotNodeRuntimeManager = void 0;
|
|
4
4
|
exports.createFrameworkEntrySpotId = createFrameworkEntrySpotId;
|
|
5
|
-
const
|
|
5
|
+
const disposal_1 = require("../disposal");
|
|
6
6
|
const node_crypto_1 = require("node:crypto");
|
|
7
|
-
const Locations_1 = require("../../contracts/Locations");
|
|
8
7
|
const contracts_1 = require("../../contracts");
|
|
9
|
-
const
|
|
8
|
+
const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
|
|
9
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
10
10
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
11
|
+
const Locations_1 = require("../../contracts/Locations");
|
|
12
|
+
const abort_1 = require("../abort");
|
|
13
|
+
const mesh_completion_table_1 = require("../backend/mesh-completion-table");
|
|
14
|
+
const mesh_dispatch_pump_1 = require("../backend/mesh-dispatch-pump");
|
|
11
15
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
12
|
-
const
|
|
16
|
+
const channel_clients_1 = require("../channels/channel-clients");
|
|
17
|
+
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
13
18
|
const configuration_1 = require("../configuration");
|
|
14
|
-
const mesh_dispatch_pump_1 = require("../backend/mesh-dispatch-pump");
|
|
15
|
-
const execution_1 = require("../execution");
|
|
16
19
|
const flow_context_1 = require("../diagnostics/flow-context");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
20
|
+
const execution_1 = require("../execution");
|
|
21
|
+
const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
|
|
22
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
23
|
+
const application_job_queue_1 = require("../host/application-job-queue");
|
|
19
24
|
const locations_1 = require("../locations");
|
|
25
|
+
const submission_result_1 = require("../messaging/submission-result");
|
|
26
|
+
const routing_id_1 = require("../routing-id");
|
|
20
27
|
const spot_entry_activation_1 = require("./spot-entry-activation");
|
|
21
28
|
const spot_node_autoconnect_1 = require("./spot-node-autoconnect");
|
|
22
|
-
const
|
|
23
|
-
const abort_1 = require("../abort");
|
|
24
|
-
const application_job_queue_1 = require("../host/application-job-queue");
|
|
29
|
+
const DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS = 1000;
|
|
25
30
|
const ZLINK_SEND_DONT_WAIT = 1;
|
|
26
31
|
// Shared default for the dominant no-metadata call; avoids a Map allocation
|
|
27
32
|
// per outbound operation.
|
|
@@ -34,7 +39,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
34
39
|
entryActivations = new Map();
|
|
35
40
|
entryActivationStarts = new Map();
|
|
36
41
|
publishers = new Map();
|
|
37
|
-
|
|
42
|
+
disposal = new disposal_1.RuntimeDisposal();
|
|
38
43
|
autoConnectLoops = [];
|
|
39
44
|
publishedMeshNodeDescriptors = new Map();
|
|
40
45
|
// Keep the revision source separate from the cached Store row. A new owner
|
|
@@ -51,6 +56,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
51
56
|
applicationJobQueue;
|
|
52
57
|
constructor(options) {
|
|
53
58
|
this.options = options;
|
|
59
|
+
if (options.detachedTaskRunner === undefined) {
|
|
60
|
+
throw new configuration_1.ZLinkConfigurationException('Spot node runtime requires a detached task runner.');
|
|
61
|
+
}
|
|
54
62
|
this.applicationJobQueue =
|
|
55
63
|
options.applicationJobQueue ??
|
|
56
64
|
new application_job_queue_1.ApplicationJobQueue((0, application_job_queue_1.resolveApplicationJobQueueConfiguration)());
|
|
@@ -82,7 +90,8 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
82
90
|
peerResolver: location.resolver,
|
|
83
91
|
executor: capability.executor,
|
|
84
92
|
events: location.events,
|
|
85
|
-
options: location.options
|
|
93
|
+
options: location.options,
|
|
94
|
+
errorSink: this.options.errorSink
|
|
86
95
|
});
|
|
87
96
|
const loop = new locations_1.ZLinkAutoConnectLoop({
|
|
88
97
|
reconciler,
|
|
@@ -185,9 +194,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
185
194
|
: Object.keys(spotNode.actorFactories ?? {}).length) > 0;
|
|
186
195
|
node.configureObjectPlacement({
|
|
187
196
|
role: spotNode.objectRole ?? (hasLegacyObjectFactories ? 'server' : 'none'),
|
|
188
|
-
placementWeight: spotNode.placementWeight ??
|
|
197
|
+
placementWeight: spotNode.placementWeight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT,
|
|
189
198
|
activeCapacityLimit: aggregatePlacementCapacity(spotNode.actorLimit ?? 0, spotNode.spotLimit ?? 0),
|
|
190
|
-
pendingCapacityLimit: spotNode.activationConcurrencyLimit ??
|
|
199
|
+
pendingCapacityLimit: spotNode.activationConcurrencyLimit ?? InternalDefaults_1.DEFAULT_ACTIVATION_CONCURRENCY_LIMIT,
|
|
191
200
|
objectCapabilities: [
|
|
192
201
|
...stableTypes.map((type) => `object-type:${type}`),
|
|
193
202
|
...instanceSpotTypes.map((type) => `instance-spot-type:${type}`)
|
|
@@ -336,13 +345,13 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
336
345
|
},
|
|
337
346
|
activationConcurrency: this.options.activationConcurrency?.(meshName) ?? {
|
|
338
347
|
active: 0,
|
|
339
|
-
limit: registration.activationConcurrencyLimit ??
|
|
348
|
+
limit: registration.activationConcurrencyLimit ?? InternalDefaults_1.DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
|
|
340
349
|
},
|
|
341
350
|
channelWeights: Object.fromEntries(this.serverChannels(meshName).map(([channelName, channel]) => [
|
|
342
351
|
channelName,
|
|
343
352
|
state === contracts_1.ZLinkFrameworkRuntimeState.Draining
|
|
344
353
|
? 0
|
|
345
|
-
: this.effectiveChannelWeight(meshName, channelName, channel.weight ??
|
|
354
|
+
: this.effectiveChannelWeight(meshName, channelName, channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT)
|
|
346
355
|
])),
|
|
347
356
|
applicationVersion: this.options.registration.applicationVersion,
|
|
348
357
|
maintenanceWave: this.options.registration.maintenanceWave,
|
|
@@ -433,7 +442,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
433
442
|
if (registration === undefined) {
|
|
434
443
|
throw new configuration_1.ZLinkConfigurationException(`Mesh '${meshName}' is not registered.`);
|
|
435
444
|
}
|
|
436
|
-
return this.runtimePlacementWeights.get(meshName) ??
|
|
445
|
+
return (this.runtimePlacementWeights.get(meshName) ??
|
|
446
|
+
registration.placementWeight ??
|
|
447
|
+
RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT);
|
|
437
448
|
}
|
|
438
449
|
channelWeight(channelName) {
|
|
439
450
|
const match = this.resolveChannel(channelName);
|
|
@@ -486,17 +497,15 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
486
497
|
return this.runtimeChannelWeights.get(meshName)?.get(channelName) ?? configuredWeight;
|
|
487
498
|
}
|
|
488
499
|
resolveChannel(channelName) {
|
|
489
|
-
const
|
|
490
|
-
|
|
491
|
-
return channel === undefined ? [] : [{ meshName, configuredWeight: channel.weight ?? 100 }];
|
|
492
|
-
});
|
|
493
|
-
if (matches.length === 0) {
|
|
500
|
+
const route = (0, channel_clients_1.resolveChannelRoute)(this.options.registration, channelName);
|
|
501
|
+
if (route?.kind !== 'route-mesh') {
|
|
494
502
|
throw new configuration_1.ZLinkConfigurationException(`RouteMesh channel '${channelName}' is not registered.`);
|
|
495
503
|
}
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
504
|
+
const match = (0, channel_clients_1.requireUniqueRouteMeshChannel)(route.matches, `RouteMesh channel '${channelName}' is registered in more than one Mesh.`);
|
|
505
|
+
return {
|
|
506
|
+
meshName: match.meshName,
|
|
507
|
+
configuredWeight: match.mesh.meshChannels?.[channelName]?.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT
|
|
508
|
+
};
|
|
500
509
|
}
|
|
501
510
|
scheduleRuntimeWeightPublication(meshName, applyWeight) {
|
|
502
511
|
const publish = this.runtimeWeightPublication
|
|
@@ -508,12 +517,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
508
517
|
await this.publishMeshNodeState(state, undefined, meshName);
|
|
509
518
|
});
|
|
510
519
|
this.runtimeWeightPublication = publish;
|
|
511
|
-
|
|
512
|
-
this.options.detachedTaskRunner.runDetached(`RouteMesh '${meshName}' runtime weight publication`, async () => await publish);
|
|
513
|
-
}
|
|
514
|
-
else {
|
|
515
|
-
void publish.catch(() => undefined);
|
|
516
|
-
}
|
|
520
|
+
this.options.detachedTaskRunner.runDetached(`RouteMesh '${meshName}' runtime weight publication`, async () => await publish);
|
|
517
521
|
}
|
|
518
522
|
get primaryMeshCompletions() {
|
|
519
523
|
const meshName = this.options.primaryMeshName ?? this.meshNodes.keys().next().value;
|
|
@@ -553,18 +557,16 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
553
557
|
serverChannels(meshName) {
|
|
554
558
|
return Object.entries(this.options.registration.spotNodes.get(meshName)?.meshChannels ?? {}).filter(([, channel]) => channel.server === true);
|
|
555
559
|
}
|
|
556
|
-
|
|
557
|
-
this.
|
|
560
|
+
dispose(signal, deadline) {
|
|
561
|
+
return this.disposal.run(() => this.disposeCore(signal, deadline));
|
|
562
|
+
}
|
|
563
|
+
async disposeCore(signal, deadline) {
|
|
558
564
|
const autoConnectLoops = [...this.autoConnectLoops];
|
|
559
565
|
const entryActivations = [...this.entryActivations.values()];
|
|
560
566
|
const meshPumps = [...this.meshPumps.values()];
|
|
561
567
|
const meshNodes = [...this.meshNodes.values()];
|
|
562
568
|
const meshCompletions = [...this.meshCompletions.values()];
|
|
563
|
-
this.entryActivations.clear();
|
|
564
|
-
this.autoConnectLoops.length = 0;
|
|
565
|
-
this.meshPumps.clear();
|
|
566
569
|
const publishers = [...this.publishers.values()];
|
|
567
|
-
this.publishers.clear();
|
|
568
570
|
const errors = [];
|
|
569
571
|
const settle = async (operations) => {
|
|
570
572
|
const results = await Promise.allSettled(operations);
|
|
@@ -577,19 +579,23 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
577
579
|
await settle(entryActivations.reverse().map((activation) => activation.dispose(deadline)));
|
|
578
580
|
await settle(meshPumps.reverse().map((pump) => pump.dispose()));
|
|
579
581
|
await settle(meshNodes.reverse().map(async (node) => {
|
|
580
|
-
node.shutdown(
|
|
582
|
+
node.shutdown(DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS);
|
|
581
583
|
node.close();
|
|
582
584
|
}));
|
|
583
585
|
for (const completions of meshCompletions) {
|
|
584
586
|
completions.dispose();
|
|
585
587
|
}
|
|
586
|
-
this.meshNodes.clear();
|
|
587
|
-
this.meshCompletions.clear();
|
|
588
588
|
await settle(autoConnectLoops.map((loop) => loop.finishTransportShutdown(signal)));
|
|
589
589
|
if (errors.length === 1)
|
|
590
590
|
throw errors[0];
|
|
591
591
|
if (errors.length > 1)
|
|
592
592
|
throw new AggregateError(errors, 'SPOT node runtime cleanup failed.');
|
|
593
|
+
this.entryActivations.clear();
|
|
594
|
+
this.autoConnectLoops.length = 0;
|
|
595
|
+
this.meshPumps.clear();
|
|
596
|
+
this.publishers.clear();
|
|
597
|
+
this.meshNodes.clear();
|
|
598
|
+
this.meshCompletions.clear();
|
|
593
599
|
}
|
|
594
600
|
async dispatchMeshRecord(meshName, owner, record) {
|
|
595
601
|
if (record.kind === service_runtime_contracts_1.ReceiveKind.Completion) {
|
|
@@ -699,7 +705,6 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
699
705
|
spotPublisherClient: this.options.spotPublisherClient,
|
|
700
706
|
routedTransport: this.options.routedTransport,
|
|
701
707
|
spotRouterChannelIdForMesh: this.options.spotRouterChannelIdForMesh,
|
|
702
|
-
channelMeshNameForChannel: (channelName) => resolveChannelMeshName(this.options.registration, channelName),
|
|
703
708
|
timerHandlers: spotNode.entrySpotTimerHandlers,
|
|
704
709
|
packetHandlers: spotNode.entrySpotPacketHandlers,
|
|
705
710
|
subscriptionHandlers: spotNode.entrySpotSubscriptionHandlers,
|
|
@@ -780,8 +785,15 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
780
785
|
}
|
|
781
786
|
await activation.commitServiceActorJoin(actor, handoffBacklog);
|
|
782
787
|
}
|
|
788
|
+
executeEntryActor(meshName, actorId, operation) {
|
|
789
|
+
const activation = this.entryActivations.get(meshName);
|
|
790
|
+
if (activation === undefined) {
|
|
791
|
+
throw new configuration_1.ZLinkConfigurationException(`Entry Spot Actor '${actorId}' has no activation for MeshNode '${meshName}'.`);
|
|
792
|
+
}
|
|
793
|
+
return activation.executeActor(actorId, operation);
|
|
794
|
+
}
|
|
783
795
|
publish(meshName, channelName, topic, packetName, event, signal, metadata = EMPTY_SPOT_METADATA) {
|
|
784
|
-
if (this.
|
|
796
|
+
if (this.disposal.started) {
|
|
785
797
|
return Promise.reject(runtimeShutdownError());
|
|
786
798
|
}
|
|
787
799
|
if (signal?.aborted === true) {
|
|
@@ -803,7 +815,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
803
815
|
return this.publishWithFlags(meshName, channelName, topic, packetName, event, ZLINK_SEND_DONT_WAIT, metadata);
|
|
804
816
|
}
|
|
805
817
|
publishWithFlags(meshName, channelName, topic, packetName, event, flags, metadata) {
|
|
806
|
-
if (this.
|
|
818
|
+
if (this.disposal.started) {
|
|
807
819
|
throw runtimeShutdownError();
|
|
808
820
|
}
|
|
809
821
|
const publisher = this.publishers.get(meshName);
|
|
@@ -834,31 +846,14 @@ function createFrameworkEntrySpotId(prefix) {
|
|
|
834
846
|
}
|
|
835
847
|
return `${prefix}-entry-${(0, node_crypto_1.randomUUID)()}`;
|
|
836
848
|
}
|
|
837
|
-
function resolveChannelMeshName(registration, channelName) {
|
|
838
|
-
const matches = [...registration.spotNodes.entries()]
|
|
839
|
-
.filter(([, node]) => Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName))
|
|
840
|
-
.map(([meshName]) => meshName);
|
|
841
|
-
return matches.length === 1 ? matches[0] : undefined;
|
|
842
|
-
}
|
|
843
849
|
function mapPublishSubmitStatus(result) {
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
// A publish with no matching subscriber is a successful zero-recipient
|
|
852
|
-
// operation, not an operation-specific not-found failure.
|
|
853
|
-
return submission_result_1.ZLinkSubmitStatus.Submitted;
|
|
854
|
-
case runtime_values_1.SubmitResult.NotConnected:
|
|
855
|
-
return submission_result_1.ZLinkSubmitStatus.RouteNotConnected;
|
|
856
|
-
case runtime_values_1.SubmitResult.Terminated:
|
|
857
|
-
case runtime_values_1.SubmitResult.InvalidHandle:
|
|
858
|
-
return submission_result_1.ZLinkSubmitStatus.Shutdown;
|
|
859
|
-
default:
|
|
860
|
-
throw new configuration_1.ZLinkConfigurationException(`Logical Multicast failed with submit result '${result}'.`);
|
|
861
|
-
}
|
|
850
|
+
// Source publication preserves its local admission status before commit.
|
|
851
|
+
if (result === runtime_values_1.SubmitResult.NotAdmitted || result === runtime_values_1.SubmitResult.Backpressured)
|
|
852
|
+
return submission_result_1.ZLinkSubmitStatus.Backpressured;
|
|
853
|
+
// A publish with no matching subscriber succeeds with zero recipients.
|
|
854
|
+
if (result === runtime_values_1.SubmitResult.NotFound)
|
|
855
|
+
return submission_result_1.ZLinkSubmitStatus.Submitted;
|
|
856
|
+
return (0, submission_result_1.classifySubmitResult)(result, 'Logical Multicast').status;
|
|
862
857
|
}
|
|
863
858
|
function requireEntrySpotReply(result) {
|
|
864
859
|
if (result !== runtime_values_1.SubmitResult.Ok) {
|
|
@@ -866,8 +861,8 @@ function requireEntrySpotReply(result) {
|
|
|
866
861
|
}
|
|
867
862
|
}
|
|
868
863
|
function requirePublicRuntimeWeight(value, label) {
|
|
869
|
-
if (!
|
|
870
|
-
throw new configuration_1.ZLinkConfigurationException(`${label} must be an integer in 0
|
|
864
|
+
if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(value)) {
|
|
865
|
+
throw new configuration_1.ZLinkConfigurationException(`${label} must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
|
|
871
866
|
}
|
|
872
867
|
return value;
|
|
873
868
|
}
|
|
@@ -927,7 +922,7 @@ function objectCapability(objectKind, stableType, factory) {
|
|
|
927
922
|
};
|
|
928
923
|
}
|
|
929
924
|
function aggregatePlacementCapacity(actorLimit, spotLimit) {
|
|
930
|
-
const unlimited =
|
|
925
|
+
const unlimited = RegistrationBuilderPolicy_1.ZLINK_MAX_CAPACITY;
|
|
931
926
|
const actors = actorLimit === 0 ? unlimited : actorLimit;
|
|
932
927
|
const spots = spotLimit === 0 ? unlimited : spotLimit;
|
|
933
928
|
return Math.min(unlimited, actors + spots);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
1
|
+
import { type RoutingId, type ZLinkChannelClient, type ZLinkChannelRequestCall, type ZLinkPublishCall, type ZLinkSendCall, type ZLinkSpotOutbound, type ZLinkSpotPublisherClient, type ZLinkSpotRequestCall, type ZLinkSpotSendCall } from '../../contracts';
|
|
3
2
|
import type { ZLinkBackendSpot } from '../backend/contracts';
|
|
3
|
+
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
4
|
+
import { type SpotHandle } from './spot-handle';
|
|
4
5
|
import type { ZLinkSpotRouteTarget } from './spot-routing-internal';
|
|
5
6
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
6
|
-
import { type SpotHandle } from './spot-handle';
|
|
7
7
|
export interface DefaultZLinkSpotOutboundOptions {
|
|
8
8
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
9
9
|
readonly channelClient?: ZLinkChannelClient;
|
|
@@ -58,6 +58,7 @@ export interface ZLinkSpotRoutedTransport {
|
|
|
58
58
|
requestFromSpotToSpot?<TReply = unknown>(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, request: unknown, options: ZLinkSpotRoutedRequestOptions): Promise<TReply>;
|
|
59
59
|
}
|
|
60
60
|
export interface ZLinkSpotRoutedSendOptions {
|
|
61
|
+
readonly instanceSpot?: boolean;
|
|
61
62
|
readonly packetName?: string;
|
|
62
63
|
/** Internal end-to-end budget remaining for route admission. */
|
|
63
64
|
readonly timeoutMs?: number;
|
|
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DefaultZLinkSpotOutbound = void 0;
|
|
4
4
|
exports.sendToSpotHandle = sendToSpotHandle;
|
|
5
5
|
exports.requestToSpotHandle = requestToSpotHandle;
|
|
6
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
7
6
|
const contracts_1 = require("../../contracts");
|
|
8
|
-
const
|
|
9
|
-
const routing_id_1 = require("../routing-id");
|
|
7
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
10
8
|
const configuration_1 = require("../configuration");
|
|
11
|
-
const workers_1 = require("../workers");
|
|
12
9
|
const execution_1 = require("../execution");
|
|
10
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
13
11
|
const packet_name_1 = require("../messaging/packet-name");
|
|
12
|
+
const submission_result_1 = require("../messaging/submission-result");
|
|
13
|
+
const routing_id_1 = require("../routing-id");
|
|
14
|
+
const workers_1 = require("../workers");
|
|
14
15
|
const spot_handle_1 = require("./spot-handle");
|
|
15
16
|
class DefaultZLinkSpotOutbound {
|
|
16
17
|
serial;
|
|
@@ -93,13 +94,13 @@ function createAddressedSpotSendCall(serial, transport, spotId, message, sourceS
|
|
|
93
94
|
selectOnce(options, 'instanceSpot');
|
|
94
95
|
options.instanceSpot = true;
|
|
95
96
|
if (instanceSpotType !== undefined) {
|
|
96
|
-
options.instanceSpotType = requireAddressValue(instanceSpotType, 'Instance Spot type',
|
|
97
|
+
options.instanceSpotType = requireAddressValue(instanceSpotType, 'Instance Spot type', CoreTypes_1.ZLINK_MAX_STABLE_TYPE_BYTES);
|
|
97
98
|
}
|
|
98
99
|
return this;
|
|
99
100
|
},
|
|
100
101
|
inMesh(meshName) {
|
|
101
102
|
selectOnce(options, 'inMesh');
|
|
102
|
-
options.initialMeshName = requireAddressValue(meshName, 'Mesh name',
|
|
103
|
+
options.initialMeshName = requireAddressValue(meshName, 'Mesh name', CoreTypes_1.ZLINK_MAX_MESH_NAME_BYTES);
|
|
103
104
|
return this;
|
|
104
105
|
},
|
|
105
106
|
async submit(signal) {
|
|
@@ -130,13 +131,13 @@ function createAddressedSpotRequestCall(serial, transport, spotId, request, sour
|
|
|
130
131
|
selectOnce(options, 'instanceSpot');
|
|
131
132
|
options.instanceSpot = true;
|
|
132
133
|
if (instanceSpotType !== undefined) {
|
|
133
|
-
options.instanceSpotType = requireAddressValue(instanceSpotType, 'Instance Spot type',
|
|
134
|
+
options.instanceSpotType = requireAddressValue(instanceSpotType, 'Instance Spot type', CoreTypes_1.ZLINK_MAX_STABLE_TYPE_BYTES);
|
|
134
135
|
}
|
|
135
136
|
return this;
|
|
136
137
|
},
|
|
137
138
|
inMesh(meshName) {
|
|
138
139
|
selectOnce(options, 'inMesh');
|
|
139
|
-
options.initialMeshName = requireAddressValue(meshName, 'Mesh name',
|
|
140
|
+
options.initialMeshName = requireAddressValue(meshName, 'Mesh name', CoreTypes_1.ZLINK_MAX_MESH_NAME_BYTES);
|
|
140
141
|
return this;
|
|
141
142
|
},
|
|
142
143
|
timeout(timeoutMs) {
|
|
@@ -7,6 +7,8 @@ exports.decodeRemoteActorJoinPayload = decodeRemoteActorJoinPayload;
|
|
|
7
7
|
exports.decodeHandoffBacklog = decodeHandoffBacklog;
|
|
8
8
|
exports.decodeRemoteActorRef = decodeRemoteActorRef;
|
|
9
9
|
exports.decodeRemoteBoundSessionTarget = decodeRemoteBoundSessionTarget;
|
|
10
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
11
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
10
12
|
const actors_1 = require("../actors");
|
|
11
13
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
12
14
|
const routing_id_1 = require("../routing-id");
|
|
@@ -58,7 +60,7 @@ function decodeRemoteActorJoinPayload(payload, request, received, raw, envelope)
|
|
|
58
60
|
request,
|
|
59
61
|
requestContentType: typeof payload.requestContentType === 'string'
|
|
60
62
|
? payload.requestContentType
|
|
61
|
-
:
|
|
63
|
+
: stream_wire_1.ZlinkStreamContentType.Json
|
|
62
64
|
};
|
|
63
65
|
}
|
|
64
66
|
function decodeHandoffBacklog(value) {
|
|
@@ -179,8 +181,8 @@ function decodeBoundSessionServiceWireRelocation(value) {
|
|
|
179
181
|
}
|
|
180
182
|
function requireSpotId(value) {
|
|
181
183
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
182
|
-
if (bytes < 1 || bytes >
|
|
183
|
-
throw new Error(
|
|
184
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES) {
|
|
185
|
+
throw new Error(`Remote bound session SpotId must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
|
|
184
186
|
}
|
|
185
187
|
return value;
|
|
186
188
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ZLinkMessageSerializer, type ZLinkSpot } from '../../contracts';
|
|
2
2
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
3
|
+
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
3
4
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
4
5
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
5
6
|
import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
6
7
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
7
|
-
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
8
8
|
interface ZLinkSpotRoutePacketDispatchOptions {
|
|
9
9
|
readonly packetHandlers: ReadonlyMap<string, readonly ZLinkSpotHandlerRegistration[]>;
|
|
10
10
|
readonly nativeSpotId: string;
|
|
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkSpotRoutePacketDispatch = void 0;
|
|
4
4
|
const contracts_1 = require("../../contracts");
|
|
5
5
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
6
|
+
const actors_1 = require("../actors");
|
|
7
|
+
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
6
8
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
7
9
|
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
+
const spot_direct_envelope_1 = require("../channels/spot-direct-envelope");
|
|
11
|
+
const flow_context_1 = require("../diagnostics/flow-context");
|
|
10
12
|
const serial_work_size_1 = require("../execution/serial-work-size");
|
|
13
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
14
|
+
const handler_instance_scope_1 = require("../handlers/handler-instance-scope");
|
|
11
15
|
const spot_remote_codec_1 = require("./spot-remote-codec");
|
|
12
16
|
const spot_route_replies_1 = require("./spot-route-replies");
|
|
13
|
-
const flow_context_1 = require("../diagnostics/flow-context");
|
|
14
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
15
|
-
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
16
|
-
const SPOT_DIRECT_ENVELOPE = 'zlink.framework.spot-direct.v1';
|
|
17
17
|
/** D5: reply metadata attached only to framework-self-generated errors. */
|
|
18
18
|
const FRAMEWORK_ORIGIN_REPLY_METADATA = Object.freeze({
|
|
19
19
|
[channel_envelope_1.ZLINK_FRAMEWORK_ORIGIN_METADATA_KEY]: channel_envelope_1.ZLINK_FRAMEWORK_ORIGIN_METADATA_VALUE
|
|
@@ -206,7 +206,7 @@ function decodeSpotDirectEnvelope(parts) {
|
|
|
206
206
|
}
|
|
207
207
|
try {
|
|
208
208
|
const decoded = JSON.parse(parts[0].data().toString());
|
|
209
|
-
if (decoded.marker !== SPOT_DIRECT_ENVELOPE ||
|
|
209
|
+
if (decoded.marker !== spot_direct_envelope_1.SPOT_DIRECT_ENVELOPE ||
|
|
210
210
|
(decoded.kind !== 1 /* ZLinkChannelMessageKind.Request */ &&
|
|
211
211
|
decoded.kind !== 3 /* ZLinkChannelMessageKind.Command */) ||
|
|
212
212
|
typeof decoded.channelName !== 'string') {
|
|
@@ -232,7 +232,7 @@ function decodeSpotDirectEnvelope(parts) {
|
|
|
232
232
|
}
|
|
233
233
|
function encodeSpotDirectReply(ok, response, error) {
|
|
234
234
|
return runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from(JSON.stringify({
|
|
235
|
-
marker: SPOT_DIRECT_ENVELOPE,
|
|
235
|
+
marker: spot_direct_envelope_1.SPOT_DIRECT_ENVELOPE,
|
|
236
236
|
ok,
|
|
237
237
|
response,
|
|
238
238
|
error
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ZLinkBackendReceived as BackendReceived, ZLinkBackendMessageLike as MessageLike } from '../backend/runtime-values';
|
|
2
2
|
import { decodeChannelEnvelope } from '../channels/channel-envelope';
|
|
3
|
-
import { encodeSpotRouteBridgeReply } from './spot-route-reply-wire';
|
|
4
3
|
import type { ZLinkDecodedRemoteActorJoinRequest } from './spot-remote-codec';
|
|
4
|
+
import { encodeSpotRouteBridgeReply } from './spot-route-reply-wire';
|
|
5
5
|
export interface ZLinkRouteReplySubmitOperation {
|
|
6
6
|
message(message: MessageLike): ZLinkRouteReplySubmitOperation;
|
|
7
7
|
submit(): void;
|
|
@@ -7,9 +7,11 @@ exports.submitRoutedActorJoinReply = submitRoutedActorJoinReply;
|
|
|
7
7
|
exports.submitRoutedActorJoinError = submitRoutedActorJoinError;
|
|
8
8
|
exports.appendRouteReplyParts = appendRouteReplyParts;
|
|
9
9
|
exports.hasReplyToken = hasReplyToken;
|
|
10
|
+
const node_os_1 = require("node:os");
|
|
10
11
|
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
11
12
|
const configuration_1 = require("../configuration");
|
|
12
13
|
const spot_route_reply_wire_1 = require("./spot-route-reply-wire");
|
|
14
|
+
const nativeErrnoValues = node_os_1.constants.errno;
|
|
13
15
|
function submitRouteReply(operation) {
|
|
14
16
|
try {
|
|
15
17
|
operation.submit();
|
|
@@ -70,5 +72,5 @@ function requireRoutedActorJoinEnvelope(decoded) {
|
|
|
70
72
|
function isNativeBadAddress(error) {
|
|
71
73
|
return (typeof error === 'object' &&
|
|
72
74
|
error !== null &&
|
|
73
|
-
Number(error.nativeErrno) ===
|
|
75
|
+
Number(error.nativeErrno) === nativeErrnoValues.EFAULT);
|
|
74
76
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { ZLinkActor, ZLinkMessage, ZLinkMessageSerializer, ZLinkSpotActorJoinResult } from '../../contracts';
|
|
2
|
+
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
3
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors/actor-runtime-state';
|
|
2
4
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
3
5
|
import { type ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
|
|
4
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
5
|
-
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
6
7
|
interface ZLinkRoutedActorAdmissionTarget {
|
|
7
8
|
onActorJoin?(actorId: string, request: ZLinkMessage): Promise<ZLinkSpotActorJoinResult>;
|
|
8
9
|
}
|
|
9
10
|
interface ZLinkSpotRoutedActorAdmissionOptions {
|
|
10
11
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
11
|
-
readonly isSpotClosing?: () => boolean;
|
|
12
12
|
readonly getTarget: () => ZLinkRoutedActorAdmissionTarget;
|
|
13
13
|
readonly defaultAccept: boolean;
|
|
14
14
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
15
|
-
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
15
|
+
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
16
16
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
17
17
|
readonly pendingAdmissionTimeoutMs?: number;
|
|
18
18
|
/** Spec 27 §4: with tracing Off, inbound flow fields are neither validated nor carried forward. */
|
|
@@ -7,7 +7,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
|
|
|
7
7
|
const routing_id_1 = require("../routing-id");
|
|
8
8
|
const spot_remote_codec_1 = require("./spot-remote-codec");
|
|
9
9
|
const spot_route_replies_1 = require("./spot-route-replies");
|
|
10
|
-
const
|
|
10
|
+
const DEFAULT_PENDING_ADMISSION_TIMEOUT_MS = 30_000;
|
|
11
11
|
class ZLinkSpotRoutedActorAdmission {
|
|
12
12
|
options;
|
|
13
13
|
pending = new Map();
|
|
@@ -22,15 +22,6 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
22
22
|
if (decoded === undefined) {
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
|
-
if (this.options.isSpotClosing?.() === true) {
|
|
26
|
-
try {
|
|
27
|
-
(0, spot_route_replies_1.submitRoutedActorJoinError)(received, decoded, (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, `Actor '${decoded.actorId}' target Spot is closing.`));
|
|
28
|
-
}
|
|
29
|
-
finally {
|
|
30
|
-
this.closeDecoded(decoded);
|
|
31
|
-
}
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
25
|
if (decoded.phase === 'admission') {
|
|
35
26
|
await this.admitTransfer(decoded, received);
|
|
36
27
|
return true;
|
|
@@ -149,7 +140,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
149
140
|
throw new Error('Remote actor transfer commit cannot materialize the target actor.');
|
|
150
141
|
}
|
|
151
142
|
const { actor, actorRef } = await this.options.routedActorTransferProvider(decoded.actorId, decoded.actorType, decoded.transferAdapterKey, decoded.transferState, decoded.actorEntryNodeRid, decoded.remoteBoundSessionTarget);
|
|
152
|
-
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
|
|
143
|
+
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog, decoded.remoteBoundSessionTarget)) ?? [];
|
|
153
144
|
const commitReply = {
|
|
154
145
|
accepted: true,
|
|
155
146
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -193,7 +184,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
193
184
|
pending.deadline = setTimeout(() => {
|
|
194
185
|
if (this.pending.get(transferId) === pending)
|
|
195
186
|
this.pending.delete(transferId);
|
|
196
|
-
}, this.options.pendingAdmissionTimeoutMs ??
|
|
187
|
+
}, this.options.pendingAdmissionTimeoutMs ?? DEFAULT_PENDING_ADMISSION_TIMEOUT_MS);
|
|
197
188
|
pending.deadline.unref();
|
|
198
189
|
}
|
|
199
190
|
closeDecoded(decoded) {
|