@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,5 +1,6 @@
|
|
|
1
1
|
import type { Type, ZLinkMessageContext } from '../../contracts';
|
|
2
2
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
3
|
+
import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
|
|
3
4
|
export interface ZLinkHandlerInstanceScope {
|
|
4
5
|
resolve<T>(type: Type<T>): Promise<T>;
|
|
5
6
|
dispose(): Promise<void>;
|
|
@@ -7,5 +8,6 @@ export interface ZLinkHandlerInstanceScope {
|
|
|
7
8
|
export declare function runInHandlerInstanceScope<T>(providerResolver: ZLinkProviderResolver | undefined, context: ZLinkMessageContext | undefined, callback: (scope: ZLinkHandlerInstanceScope) => Promise<T>): Promise<T>;
|
|
8
9
|
export declare function resolveLifecycleHandler<T>(owner: object, type: Type<T>, providerResolver?: ZLinkProviderResolver): Promise<T>;
|
|
9
10
|
export declare function runWithLifecycleHandler<THandler, TResult>(owner: object, type: Type<THandler>, providerResolver: ZLinkProviderResolver | undefined, callback: (handler: THandler) => Promise<TResult>): Promise<TResult>;
|
|
10
|
-
export declare function disposeLifecycleHandlers(owner: object): Promise<void>;
|
|
11
|
+
export declare function disposeLifecycleHandlers(owner: object, detachedTaskRunner: ZLinkDetachedTaskRunner): Promise<void>;
|
|
11
12
|
export declare function disposeOwnedInstance(instance: unknown): Promise<void>;
|
|
13
|
+
export declare function disposeOwnedInstances(instances: readonly unknown[]): Promise<void>;
|
|
@@ -5,12 +5,12 @@ exports.resolveLifecycleHandler = resolveLifecycleHandler;
|
|
|
5
5
|
exports.runWithLifecycleHandler = runWithLifecycleHandler;
|
|
6
6
|
exports.disposeLifecycleHandlers = disposeLifecycleHandlers;
|
|
7
7
|
exports.disposeOwnedInstance = disposeOwnedInstance;
|
|
8
|
+
exports.disposeOwnedInstances = disposeOwnedInstances;
|
|
8
9
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
9
|
-
const state_lane_1 = require("../execution/state-lane");
|
|
10
10
|
const HANDLER_SCOPE_FACTORY = Symbol.for('@zlink-systems/framework.handler-instance-scope-factory');
|
|
11
11
|
const activeHandlerScope = new node_async_hooks_1.AsyncLocalStorage();
|
|
12
12
|
const activeLifecycleScope = new node_async_hooks_1.AsyncLocalStorage();
|
|
13
|
-
const
|
|
13
|
+
const detachedLifecycleResource = new node_async_hooks_1.AsyncResource('zlink:handler-instance-scope');
|
|
14
14
|
const dispatchScopes = new WeakMap();
|
|
15
15
|
const lifecycleScopes = new WeakMap();
|
|
16
16
|
async function runInHandlerInstanceScope(providerResolver, context, callback) {
|
|
@@ -39,27 +39,27 @@ async function runInHandlerInstanceScope(providerResolver, context, callback) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
async function resolveLifecycleHandler(owner, type, providerResolver) {
|
|
42
|
-
|
|
43
|
-
if (scope === undefined) {
|
|
44
|
-
scope = Promise.resolve(new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver)));
|
|
45
|
-
lifecycleScopes.set(owner, scope);
|
|
46
|
-
}
|
|
47
|
-
return (await scope).resolve(type);
|
|
42
|
+
return lifecycleHandlerScope(owner, providerResolver).resolve(type);
|
|
48
43
|
}
|
|
49
44
|
async function runWithLifecycleHandler(owner, type, providerResolver, callback) {
|
|
45
|
+
return lifecycleHandlerScope(owner, providerResolver).run(type, callback);
|
|
46
|
+
}
|
|
47
|
+
function lifecycleHandlerScope(owner, providerResolver) {
|
|
50
48
|
let scope = lifecycleScopes.get(owner);
|
|
51
49
|
if (scope === undefined) {
|
|
52
|
-
scope =
|
|
50
|
+
scope = new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver));
|
|
53
51
|
lifecycleScopes.set(owner, scope);
|
|
54
52
|
}
|
|
55
|
-
return
|
|
53
|
+
return scope;
|
|
56
54
|
}
|
|
57
|
-
async function disposeLifecycleHandlers(owner) {
|
|
55
|
+
async function disposeLifecycleHandlers(owner, detachedTaskRunner) {
|
|
56
|
+
if (detachedTaskRunner === undefined) {
|
|
57
|
+
throw new Error('Lifecycle handler disposal requires a detached task runner.');
|
|
58
|
+
}
|
|
58
59
|
const scope = lifecycleScopes.get(owner);
|
|
59
60
|
if (scope === undefined)
|
|
60
61
|
return;
|
|
61
|
-
|
|
62
|
-
await resolved.dispose();
|
|
62
|
+
await scope.dispose(detachedTaskRunner);
|
|
63
63
|
// Keep the closed scope as a tombstone for the lifetime of the owner object.
|
|
64
64
|
// A late dispatch must fail instead of creating a second activation.
|
|
65
65
|
}
|
|
@@ -79,68 +79,49 @@ function isHandlerInstanceScopeFactory(value) {
|
|
|
79
79
|
}
|
|
80
80
|
class DefaultHandlerInstanceScope {
|
|
81
81
|
providerResolver;
|
|
82
|
-
lane = new state_lane_1.ZLinkStateLane();
|
|
83
82
|
instances = new Map();
|
|
84
83
|
owned = [];
|
|
85
84
|
disposed = false;
|
|
86
85
|
constructor(providerResolver) {
|
|
87
86
|
this.providerResolver = providerResolver;
|
|
88
87
|
}
|
|
89
|
-
|
|
90
|
-
const resolution = await this.lane.run(() => this.resolveCore(type));
|
|
91
|
-
if (resolution.activation !== undefined) {
|
|
92
|
-
startOutsideStateLane(() => {
|
|
93
|
-
void this.activate(type, resolution.activation);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
return await resolution.promise;
|
|
97
|
-
}
|
|
98
|
-
async dispose() {
|
|
99
|
-
const disposal = await this.lane.run(() => this.beginDisposeCore());
|
|
100
|
-
if (disposal === undefined)
|
|
101
|
-
return;
|
|
102
|
-
await Promise.allSettled(disposal.pending);
|
|
103
|
-
for (const instance of disposal.owned) {
|
|
104
|
-
await disposeOwnedInstance(instance);
|
|
105
|
-
}
|
|
106
|
-
await this.lane.run(() => this.completeDisposeCore());
|
|
107
|
-
}
|
|
108
|
-
resolveCore(type) {
|
|
88
|
+
resolve(type) {
|
|
109
89
|
if (this.disposed) {
|
|
110
|
-
|
|
90
|
+
return Promise.reject(new Error('Handler instance scope is already disposed.'));
|
|
111
91
|
}
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
return
|
|
92
|
+
const existing = this.instances.get(type);
|
|
93
|
+
if (existing !== undefined)
|
|
94
|
+
return existing;
|
|
115
95
|
const activation = createDeferred();
|
|
116
|
-
instance = activation.promise;
|
|
117
96
|
this.instances.set(type, activation.promise);
|
|
118
|
-
|
|
97
|
+
void this.activate(type, activation);
|
|
98
|
+
return activation.promise;
|
|
119
99
|
}
|
|
120
|
-
|
|
100
|
+
async dispose() {
|
|
121
101
|
if (this.disposed)
|
|
122
|
-
return
|
|
102
|
+
return;
|
|
123
103
|
this.disposed = true;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
104
|
+
await Promise.allSettled(this.instances.values());
|
|
105
|
+
try {
|
|
106
|
+
await disposeOwnedInstances(this.owned);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
this.owned.length = 0;
|
|
110
|
+
this.instances.clear();
|
|
111
|
+
}
|
|
132
112
|
}
|
|
133
113
|
async activate(type, activation) {
|
|
134
114
|
let instance;
|
|
135
115
|
try {
|
|
136
|
-
|
|
116
|
+
const created = this.providerResolver?.create?.(type);
|
|
117
|
+
instance = created === undefined ? new type() : await created;
|
|
137
118
|
}
|
|
138
119
|
catch (error) {
|
|
139
120
|
activation.reject(error);
|
|
140
121
|
return;
|
|
141
122
|
}
|
|
142
|
-
|
|
143
|
-
|
|
123
|
+
if (!this.disposed) {
|
|
124
|
+
this.owned.push(instance);
|
|
144
125
|
activation.resolve(instance);
|
|
145
126
|
return;
|
|
146
127
|
}
|
|
@@ -152,16 +133,9 @@ class DefaultHandlerInstanceScope {
|
|
|
152
133
|
activation.reject(error);
|
|
153
134
|
}
|
|
154
135
|
}
|
|
155
|
-
acceptActivationCore(instance) {
|
|
156
|
-
if (this.disposed)
|
|
157
|
-
return false;
|
|
158
|
-
this.owned.push(instance);
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
136
|
}
|
|
162
137
|
class LifecycleHandlerInstanceScope {
|
|
163
138
|
instances;
|
|
164
|
-
lane = new state_lane_1.ZLinkStateLane();
|
|
165
139
|
activeInvocations = 0;
|
|
166
140
|
closing = false;
|
|
167
141
|
idle;
|
|
@@ -170,36 +144,34 @@ class LifecycleHandlerInstanceScope {
|
|
|
170
144
|
constructor(instances) {
|
|
171
145
|
this.instances = instances;
|
|
172
146
|
}
|
|
173
|
-
|
|
174
|
-
const resolution = await this.lane.run(() => ({ promise: this.resolveCore(type) }));
|
|
175
|
-
return await resolution.promise;
|
|
176
|
-
}
|
|
177
|
-
resolveCore(type) {
|
|
147
|
+
resolve(type) {
|
|
178
148
|
this.throwIfClosingCore();
|
|
179
149
|
return this.instances.resolve(type);
|
|
180
150
|
}
|
|
181
151
|
async run(type, callback) {
|
|
182
|
-
|
|
152
|
+
this.beginInvocationCore();
|
|
183
153
|
try {
|
|
184
154
|
return await activeLifecycleScope.run(this, async () => callback(await this.instances.resolve(type)));
|
|
185
155
|
}
|
|
186
156
|
finally {
|
|
187
|
-
|
|
157
|
+
this.completeInvocationCore();
|
|
188
158
|
}
|
|
189
159
|
}
|
|
190
|
-
async dispose() {
|
|
160
|
+
async dispose(detachedTaskRunner) {
|
|
191
161
|
const disposeFromActiveInvocation = activeLifecycleScope.getStore() === this;
|
|
192
|
-
const disposal =
|
|
162
|
+
const disposal = this.beginDisposeCore();
|
|
193
163
|
if (disposal.deferred !== undefined) {
|
|
194
|
-
|
|
164
|
+
startOutsideLifecycleInvocation(() => {
|
|
195
165
|
void this.disposeWhenIdle(disposal);
|
|
166
|
+
if (disposeFromActiveInvocation) {
|
|
167
|
+
detachedTaskRunner.runDetached(LifecycleHandlerInstanceScope.name, () => disposal.completion);
|
|
168
|
+
}
|
|
196
169
|
});
|
|
197
170
|
}
|
|
198
171
|
if (disposeFromActiveInvocation) {
|
|
199
172
|
// Waiting here would make the current handler wait for its own terminal
|
|
200
173
|
// completion. The same disposal promise continues after run() releases
|
|
201
174
|
// the final active invocation.
|
|
202
|
-
void disposal.completion.catch(() => undefined);
|
|
203
175
|
return;
|
|
204
176
|
}
|
|
205
177
|
await disposal.completion;
|
|
@@ -245,7 +217,7 @@ class LifecycleHandlerInstanceScope {
|
|
|
245
217
|
deferred.resolve();
|
|
246
218
|
}
|
|
247
219
|
catch (error) {
|
|
248
|
-
|
|
220
|
+
this.failDisposalCore(deferred.promise);
|
|
249
221
|
deferred.reject(error);
|
|
250
222
|
}
|
|
251
223
|
}
|
|
@@ -264,8 +236,8 @@ function createDeferred() {
|
|
|
264
236
|
});
|
|
265
237
|
return { promise, resolve, reject };
|
|
266
238
|
}
|
|
267
|
-
function
|
|
268
|
-
return
|
|
239
|
+
function startOutsideLifecycleInvocation(work) {
|
|
240
|
+
return detachedLifecycleResource.runInAsyncScope(work);
|
|
269
241
|
}
|
|
270
242
|
async function disposeOwnedInstance(instance) {
|
|
271
243
|
if (instance === null || instance === undefined)
|
|
@@ -281,3 +253,18 @@ async function disposeOwnedInstance(instance) {
|
|
|
281
253
|
await value.onModuleDestroy();
|
|
282
254
|
}
|
|
283
255
|
}
|
|
256
|
+
async function disposeOwnedInstances(instances) {
|
|
257
|
+
const failures = [];
|
|
258
|
+
for (let index = instances.length - 1; index >= 0; index -= 1) {
|
|
259
|
+
try {
|
|
260
|
+
await disposeOwnedInstance(instances[index]);
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
failures.push(error);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (failures.length === 1)
|
|
267
|
+
throw failures[0];
|
|
268
|
+
if (failures.length > 1)
|
|
269
|
+
throw new AggregateError(failures, 'Handler scope cleanup failed.');
|
|
270
|
+
}
|
|
@@ -5,7 +5,7 @@ import { type ZLinkActorRoutedJoinTransport, type ZLinkRemoteActorPacketTarget,
|
|
|
5
5
|
import type { DefaultZLinkActorManager } from '../actors';
|
|
6
6
|
import type { DefaultZLinkSpotManager, ZLinkSpotNodeRuntimeManager } from '../spots';
|
|
7
7
|
import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
|
|
8
|
-
import type { ZLinkBoundSessionResponsePort, ZLinkStreamActorLookupPort } from '../streams/stream-binding-runtime-ports';
|
|
8
|
+
import type { ZLinkBoundSessionResponsePort, ZLinkSessionBindingConfirmationOptions, ZLinkStreamActorLookupPort } from '../streams/stream-binding-runtime-ports';
|
|
9
9
|
import { type ZLinkStreamFrameHeader } from '../streams/protocol';
|
|
10
10
|
import type { MeshRouterResolver } from './mesh-router-resolver';
|
|
11
11
|
import type { ZLinkStoreLocationResolvers } from '../locations';
|
|
@@ -32,7 +32,7 @@ export declare class ZLinkActorPacketRelay {
|
|
|
32
32
|
notifyBoundActorDisconnected(actor: ZLinkSessionActor, signal?: AbortSignal): Promise<void>;
|
|
33
33
|
clearRemoteActorPacketTarget(actorId: string): void;
|
|
34
34
|
updateRemoteActorPacketTarget(actorId: string, value: unknown): Promise<void>;
|
|
35
|
-
actorPacketTargetForState(actorId: string
|
|
35
|
+
actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined;
|
|
36
36
|
notifyActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void>;
|
|
37
37
|
notifyLocalActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void>;
|
|
38
38
|
receiveRemoteActorPacketRelay(payload: unknown, _routeContext: ZLinkRouteMessageContext): Promise<{
|
|
@@ -44,10 +44,13 @@ export declare class ZLinkActorPacketRelay {
|
|
|
44
44
|
readonly actorPacketTarget?: unknown;
|
|
45
45
|
}>;
|
|
46
46
|
relayActorPacket(actor: ZLinkSessionActor, frameHeader: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal): Promise<boolean>;
|
|
47
|
-
confirmRemoteSessionBinding(actor: ActorRef, sessionNodeRid: RoutingId, sessionRid: RoutingId, signal?: AbortSignal, options?:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
confirmRemoteSessionBinding(actor: ActorRef, sessionNodeRid: RoutingId, sessionRid: RoutingId, signal?: AbortSignal, options?: ZLinkSessionBindingConfirmationOptions): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Session–Actor binding §5·§6 (.NET ZLinkSessionActorCoordinator rule): a
|
|
50
|
+
* same-node bind installs the Session owner's registry identity through the
|
|
51
|
+
* same install a remote command 38 uses, so relocation seals and carries it.
|
|
52
|
+
*/
|
|
53
|
+
private installSameNodeSessionBinding;
|
|
51
54
|
relayRemoteActorPacket(actor: ZLinkSessionActor, frameHeader: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal): Promise<boolean>;
|
|
52
55
|
notifyRemoteActorDisconnected(actorId: string, remoteTarget: ZLinkRemoteBoundSessionTarget | ZLinkRemoteActorPacketTarget, signal?: AbortSignal, bindingActorRef?: ActorRef): Promise<void>;
|
|
53
56
|
private requireCurrentRemoteBinding;
|
|
@@ -6,7 +6,6 @@ const runtime_message_1 = require("../backend/runtime-message");
|
|
|
6
6
|
const contracts_1 = require("../../contracts");
|
|
7
7
|
const ConfigurationException_1 = require("../../contracts/Configuration/ConfigurationException");
|
|
8
8
|
const actors_1 = require("../actors");
|
|
9
|
-
const actor_runtime_state_1 = require("../actors/actor-runtime-state");
|
|
10
9
|
const actor_packet_relay_wire_1 = require("../actors/actor-packet-relay-wire");
|
|
11
10
|
const actor_routed_json_request_1 = require("../actors/actor-routed-json-request");
|
|
12
11
|
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
@@ -16,9 +15,6 @@ const submission_result_1 = require("../messaging/submission-result");
|
|
|
16
15
|
const actor_session_binding_runtime_owner_1 = require("../streams/actor-session-binding-runtime-owner");
|
|
17
16
|
const protocol_1 = require("../streams/protocol");
|
|
18
17
|
const remote_actor_packet_target_store_1 = require("./remote-actor-packet-target-store");
|
|
19
|
-
const REMOTE_SESSION_BIND_RETRY_DEADLINE_MS = 30_000;
|
|
20
|
-
const REMOTE_SESSION_BIND_RETRY_INITIAL_DELAY_MS = 25;
|
|
21
|
-
const REMOTE_SESSION_BIND_RETRY_MAX_DELAY_MS = 1_000;
|
|
22
18
|
class ZLinkActorPacketRelay {
|
|
23
19
|
options;
|
|
24
20
|
targets;
|
|
@@ -38,9 +34,7 @@ class ZLinkActorPacketRelay {
|
|
|
38
34
|
}
|
|
39
35
|
async notifyBoundActorDisconnected(actor, signal) {
|
|
40
36
|
const state = this.options.actorManager()?.getState(actor.actorId);
|
|
41
|
-
const currentRemoteBoundSessionTarget = state?.spotId === undefined
|
|
42
|
-
? undefined
|
|
43
|
-
: (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
|
|
37
|
+
const currentRemoteBoundSessionTarget = state?.spotId === undefined ? undefined : state.remoteBoundSessionTarget;
|
|
44
38
|
const currentRemoteActorPacketTarget = state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
|
|
45
39
|
const remoteTarget = currentRemoteBoundSessionTarget ??
|
|
46
40
|
currentRemoteActorPacketTarget ??
|
|
@@ -68,14 +62,14 @@ class ZLinkActorPacketRelay {
|
|
|
68
62
|
async updateRemoteActorPacketTarget(actorId, value) {
|
|
69
63
|
await this.targets.updateFromWire(actorId, value);
|
|
70
64
|
}
|
|
71
|
-
actorPacketTargetForState(actorId
|
|
72
|
-
return this.targets.targetForState(actorId
|
|
65
|
+
actorPacketTargetForState(actorId) {
|
|
66
|
+
return this.targets.targetForState(actorId);
|
|
73
67
|
}
|
|
74
68
|
async notifyActorDisconnectedById(actorId, signal) {
|
|
75
69
|
const state = this.options.actorManager()?.getState(actorId);
|
|
76
70
|
const remoteTarget = state === undefined
|
|
77
71
|
? undefined
|
|
78
|
-
: (
|
|
72
|
+
: (state.remoteBoundSessionTarget ?? state.remoteActorPacketTarget);
|
|
79
73
|
if (remoteTarget !== undefined) {
|
|
80
74
|
await this.notifyRemoteActorDisconnected(actorId, remoteTarget, signal);
|
|
81
75
|
return;
|
|
@@ -152,48 +146,25 @@ class ZLinkActorPacketRelay {
|
|
|
152
146
|
if (frameHeader.kind !== protocol_1.ZLinkStreamMessageKind.Send) {
|
|
153
147
|
throw new Error('Remote actor session binding requires a send frame.');
|
|
154
148
|
}
|
|
155
|
-
const { sessionNodeRid
|
|
149
|
+
const { sessionNodeRid } = (0, actor_packet_relay_wire_1.decodeRemoteActorSessionBinding)((0, protocol_1.messageToBytes)(body));
|
|
156
150
|
if (!(0, routing_id_1.routingIdsEqual)(sessionNodeRid, _routeContext.sourceNodeRid)) {
|
|
157
151
|
throw new Error('Remote actor session binding source did not match the declared session node.');
|
|
158
152
|
}
|
|
153
|
+
// The Actor owner installs the binding from the Session owner's
|
|
154
|
+
// command 38 (Session–Actor binding §5); this relay confirmation only
|
|
155
|
+
// acknowledges that the Actor is still owned here.
|
|
159
156
|
const state = this.options.actorManager()?.getState(relay.actorId);
|
|
160
|
-
|
|
161
|
-
if (state === undefined || actorRef === undefined) {
|
|
157
|
+
if (state?.nativeActorRef === undefined) {
|
|
162
158
|
throw new Error(`Actor '${relay.actorId}' does not have a concrete actor ref.`);
|
|
163
159
|
}
|
|
164
|
-
if (this.requireSpotNodeRuntime().primaryMeshNode === undefined) {
|
|
165
|
-
throw new Error('MeshNode actor runtime is not started.');
|
|
166
|
-
}
|
|
167
|
-
const target = relay.routerChannelId === undefined
|
|
168
|
-
? this.options.meshRouters.remoteBoundSessionTargetForSource(sessionNodeRid)
|
|
169
|
-
: {
|
|
170
|
-
routerChannelId: relay.routerChannelId,
|
|
171
|
-
targetNodeRid: sessionNodeRid,
|
|
172
|
-
spotId: sessionNodeRid
|
|
173
|
-
};
|
|
174
|
-
if (target === undefined) {
|
|
175
|
-
throw new Error('Remote actor session binding did not declare a return router.');
|
|
176
|
-
}
|
|
177
|
-
const bindingGeneration = fallbackActorRef?.bindingGeneration;
|
|
178
|
-
const refreshedTarget = (0, actor_runtime_state_1.mergeRemoteBoundSessionTarget)({
|
|
179
|
-
...target,
|
|
180
|
-
sessionNodeRid,
|
|
181
|
-
sessionRid,
|
|
182
|
-
...(bindingGeneration === undefined ? {} : { bindingGeneration })
|
|
183
|
-
}, (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget));
|
|
184
|
-
state.setRemoteBoundSessionTarget(refreshedTarget);
|
|
185
160
|
return { ok: true, response: { acknowledged: true } };
|
|
186
161
|
}
|
|
187
162
|
if (frameHeader.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
188
163
|
this.requireCurrentRemoteBinding(relay, _routeContext);
|
|
189
|
-
this.options
|
|
190
|
-
.actorManager()
|
|
191
|
-
?.getState(relay.actorId)
|
|
192
|
-
?.setRemoteBoundSessionTarget(undefined);
|
|
193
164
|
await this.notifyLocalActorDisconnectedById(relay.actorId);
|
|
194
165
|
return {
|
|
195
166
|
ok: true,
|
|
196
|
-
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId
|
|
167
|
+
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
|
|
197
168
|
};
|
|
198
169
|
}
|
|
199
170
|
if (remoteBoundSessionTarget !== undefined) {
|
|
@@ -229,7 +200,7 @@ class ZLinkActorPacketRelay {
|
|
|
229
200
|
});
|
|
230
201
|
return {
|
|
231
202
|
ok: true,
|
|
232
|
-
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId
|
|
203
|
+
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
|
|
233
204
|
};
|
|
234
205
|
}
|
|
235
206
|
if (frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Request &&
|
|
@@ -274,7 +245,7 @@ class ZLinkActorPacketRelay {
|
|
|
274
245
|
return {
|
|
275
246
|
ok: true,
|
|
276
247
|
deferredResponse: true,
|
|
277
|
-
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId
|
|
248
|
+
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
|
|
278
249
|
};
|
|
279
250
|
}
|
|
280
251
|
const response = state?.spotId === undefined
|
|
@@ -283,7 +254,7 @@ class ZLinkActorPacketRelay {
|
|
|
283
254
|
return {
|
|
284
255
|
ok: true,
|
|
285
256
|
response,
|
|
286
|
-
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId
|
|
257
|
+
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
|
|
287
258
|
};
|
|
288
259
|
}
|
|
289
260
|
catch (error) {
|
|
@@ -303,36 +274,17 @@ class ZLinkActorPacketRelay {
|
|
|
303
274
|
}
|
|
304
275
|
}
|
|
305
276
|
async relayActorPacket(actor, frameHeader, payload, signal) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
// relocation the cached packet target can carry a transiently
|
|
309
|
-
// incomplete Ready authority fence (route publication still
|
|
310
|
-
// converging); failing the request on the fence check would surface a
|
|
311
|
-
// NotFound for a Spot that exists and is Ready on its owner. Clear the
|
|
312
|
-
// stale hint and re-resolve with a short bound instead.
|
|
313
|
-
const fenceRetryDeadlineMs = performance.now() + 1_000;
|
|
314
|
-
for (;;) {
|
|
315
|
-
try {
|
|
316
|
-
if (await this.relayRemoteActorPacket(actor, frameHeader, payload, signal)) {
|
|
317
|
-
return true;
|
|
318
|
-
}
|
|
319
|
-
return await this.relayLocalActorPacket(actor, frameHeader, payload, signal);
|
|
320
|
-
}
|
|
321
|
-
catch (error) {
|
|
322
|
-
if (!(error instanceof Error && error.message.includes('no complete Ready authority fence')) ||
|
|
323
|
-
performance.now() >= fenceRetryDeadlineMs) {
|
|
324
|
-
throw error;
|
|
325
|
-
}
|
|
326
|
-
this.targets.clear(actor.actorId);
|
|
327
|
-
this.options.actorManager()?.getState(actor.actorId)?.setRemoteActorPacketTarget(undefined);
|
|
328
|
-
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
329
|
-
}
|
|
277
|
+
if (await this.relayRemoteActorPacket(actor, frameHeader, payload, signal)) {
|
|
278
|
+
return true;
|
|
330
279
|
}
|
|
280
|
+
return this.relayLocalActorPacket(actor, frameHeader, payload, signal);
|
|
331
281
|
}
|
|
332
282
|
async confirmRemoteSessionBinding(actor, sessionNodeRid, sessionRid, signal, options) {
|
|
333
283
|
const target = this.targets.targetForActorRef(actor);
|
|
334
|
-
if (target === undefined)
|
|
284
|
+
if (target === undefined) {
|
|
285
|
+
this.installSameNodeSessionBinding(actor.actorId, options?.binding);
|
|
335
286
|
return;
|
|
287
|
+
}
|
|
336
288
|
const header = (0, protocol_1.encodeStreamHeader)({
|
|
337
289
|
kind: protocol_1.ZLinkStreamMessageKind.Send,
|
|
338
290
|
codec: protocol_1.ZLinkStreamCodec.Json,
|
|
@@ -350,7 +302,9 @@ class ZLinkActorPacketRelay {
|
|
|
350
302
|
payload: (0, actor_packet_relay_wire_1.encodeRemoteActorSessionBinding)({ sessionNodeRid, sessionRid })
|
|
351
303
|
});
|
|
352
304
|
if (options?.waitForAcknowledgement === false) {
|
|
353
|
-
await this.
|
|
305
|
+
await this.options.routeTransport.sendToSpot(withDefaultSpotKind(target), request, {
|
|
306
|
+
packetName: actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
307
|
+
});
|
|
354
308
|
return;
|
|
355
309
|
}
|
|
356
310
|
const reply = await this.requestRemoteTarget(withDefaultSpotKind(target), request, `Remote actor session binding is not available for '${actor.actorId}'.`, (parts) => JSON.parse(parts[0]?.getString('utf8') ?? '{}'), signal);
|
|
@@ -369,26 +323,31 @@ class ZLinkActorPacketRelay {
|
|
|
369
323
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(remoteKind, `Actor '${actor.actorId}' did not acknowledge its remote session binding: ${JSON.stringify(reply)}`, reply.error);
|
|
370
324
|
}
|
|
371
325
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
326
|
+
/**
|
|
327
|
+
* Session–Actor binding §5·§6 (.NET ZLinkSessionActorCoordinator rule): a
|
|
328
|
+
* same-node bind installs the Session owner's registry identity through the
|
|
329
|
+
* same install a remote command 38 uses, so relocation seals and carries it.
|
|
330
|
+
*/
|
|
331
|
+
installSameNodeSessionBinding(actorId, binding) {
|
|
332
|
+
// The Actor is gone (destroyed or relocated away): nothing to record.
|
|
333
|
+
const state = this.options.actorManager()?.getState(actorId);
|
|
334
|
+
// No registry binding exists only for a native-fallback bind, which has no
|
|
335
|
+
// Session owner registry (managed-stream.ts `bindActor` fallback).
|
|
336
|
+
if (state === undefined || binding === undefined)
|
|
337
|
+
return;
|
|
338
|
+
const route = this.options.meshRouters.remoteBoundSessionTargetForSource(binding.sessionOwnerNodeRid);
|
|
339
|
+
if (route === undefined) {
|
|
340
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actorId}' Session route is unavailable.`);
|
|
341
|
+
}
|
|
342
|
+
state.installBoundSessionBinding({
|
|
343
|
+
...route,
|
|
344
|
+
sessionNodeRid: binding.sessionOwnerNodeRid,
|
|
345
|
+
sessionRid: binding.sessionRid,
|
|
346
|
+
sessionOwnerNodeGeneration: binding.sessionOwnerNodeGeneration,
|
|
347
|
+
sessionOwnerId: binding.sessionOwnerId,
|
|
348
|
+
sessionOwnerLeaseGeneration: binding.sessionOwnerLeaseGeneration,
|
|
349
|
+
bindingGeneration: binding.bindingGeneration
|
|
350
|
+
});
|
|
392
351
|
}
|
|
393
352
|
async relayRemoteActorPacket(actor, frameHeader, payload, signal) {
|
|
394
353
|
const streamRuntime = this.options.streamBindingRuntime();
|
|
@@ -544,9 +503,7 @@ class ZLinkActorPacketRelay {
|
|
|
544
503
|
}
|
|
545
504
|
requireCurrentRemoteBinding(relay, routeContext) {
|
|
546
505
|
const state = this.options.actorManager()?.getState(relay.actorId);
|
|
547
|
-
const current = state
|
|
548
|
-
? undefined
|
|
549
|
-
: (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
|
|
506
|
+
const current = state?.boundSession;
|
|
550
507
|
if (current === undefined ||
|
|
551
508
|
current.sessionNodeRid === undefined ||
|
|
552
509
|
!(0, routing_id_1.routingIdsEqual)(current.sessionNodeRid, routeContext.sourceNodeRid) ||
|
|
@@ -7,6 +7,7 @@ const runtime_values_1 = require("../backend/runtime-values");
|
|
|
7
7
|
const contracts_1 = require("../../contracts");
|
|
8
8
|
const authority_key_codec_1 = require("../locations/authority-key-codec");
|
|
9
9
|
const creation_operation_id_1 = require("../locations/creation-operation-id");
|
|
10
|
+
const diagnostic_text_1 = require("../diagnostics/diagnostic-text");
|
|
10
11
|
const actor_authority_publication_1 = require("../actors/actor-authority-publication");
|
|
11
12
|
const user_spot_creation_coordinator_1 = require("./user-spot-creation-coordinator");
|
|
12
13
|
const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
|
|
@@ -20,9 +21,10 @@ class ZLinkActorPlacementCoordinator {
|
|
|
20
21
|
this.options = options;
|
|
21
22
|
}
|
|
22
23
|
async create(actorId, stableType, createOnly, meshName, requestPayload, timeoutMs, signal) {
|
|
23
|
-
const deadline = createDeadline(timeoutMs, signal);
|
|
24
|
-
const deadlineMs = performance.now() + timeoutMs;
|
|
25
24
|
const deadlineUnixMs = Date.now() + timeoutMs;
|
|
25
|
+
const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
|
|
26
|
+
const deadline = createDeadline(remainingMs, signal);
|
|
27
|
+
const deadlineMs = performance.now() + remainingMs;
|
|
26
28
|
const contentReference = (0, user_spot_creation_coordinator_1.encodeLocationCreationContent)(requestPayload);
|
|
27
29
|
const requestSha256 = (0, node_crypto_1.createHash)('sha256').update(requestPayload).digest();
|
|
28
30
|
const excluded = new Set();
|
|
@@ -60,7 +62,7 @@ class ZLinkActorPlacementCoordinator {
|
|
|
60
62
|
target: reservationTarget(target),
|
|
61
63
|
creatingPayload,
|
|
62
64
|
capacity: { actors: 1, spots: 0 }
|
|
63
|
-
}, deadline.signal);
|
|
65
|
+
}, deadline.signal, BigInt(deadlineUnixMs));
|
|
64
66
|
const existing = existingActor(reserved, actorId, stableType);
|
|
65
67
|
if (existing !== undefined) {
|
|
66
68
|
if (createOnly) {
|
|
@@ -110,13 +112,13 @@ class ZLinkActorPlacementCoordinator {
|
|
|
110
112
|
// 83-118, 99-108). Backpressured(113) still surfaces as target
|
|
111
113
|
// placement capacity -> Unavailable through the shared path.
|
|
112
114
|
throw (0, framework_errors_internal_1.wireReplyFailureException)(remote.terminalResult, remote.failureCode, `Remote Actor '${actorId}' creation failed with result ${remote.terminalResult}, ` +
|
|
113
|
-
`failure code ${remote.failureCode}, and tail ${remote.tail?.kind
|
|
115
|
+
`failure code ${remote.failureCode}, and tail ${(0, diagnostic_text_1.diagnosticTextOrAbsent)(remote.tail?.kind)}.`);
|
|
114
116
|
}
|
|
115
117
|
if (remote.tail?.kind !== 'actorCreate') {
|
|
116
118
|
// An OK terminal whose reply lacks the actorCreate tail is a
|
|
117
119
|
// protocol violation, not a create failure.
|
|
118
120
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Remote Actor '${actorId}' create reply carried tail ` +
|
|
119
|
-
`${remote.tail?.kind
|
|
121
|
+
`${(0, diagnostic_text_1.diagnosticTextOrAbsent)(remote.tail?.kind)} on an OK terminal.`);
|
|
120
122
|
}
|
|
121
123
|
if (remote.tail.createResult === 'rejected') {
|
|
122
124
|
return {
|
|
@@ -29,6 +29,8 @@ export interface ZLinkActorRuntimeOptionsFactoryOptions {
|
|
|
29
29
|
readonly meshNode: (meshName: string) => ZLinkBackendMeshNode | undefined;
|
|
30
30
|
readonly meshCompletions: (meshName: string) => ZLinkMeshCompletionTable | undefined;
|
|
31
31
|
readonly notifyEntrySpotActorCreated: (nodeRid: RoutingId, actor: ZLinkActor, createRequest: ZLinkMessage, signal?: AbortSignal) => Promise<import('../../contracts').ZLinkActorCreateResponse | undefined>;
|
|
32
|
+
readonly notifyEntrySpotActorJoined: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
|
|
33
|
+
readonly notifyEntrySpotActorLeft: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
|
|
32
34
|
readonly locationLifecycle: () => ZLinkLocationLifecycle | undefined;
|
|
33
35
|
readonly primaryMeshName: () => string | undefined;
|
|
34
36
|
readonly actorMeshName: (actorType: string) => string | undefined;
|
|
@@ -27,6 +27,22 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
27
27
|
completionTableProvider: this.options.primaryMeshCompletions,
|
|
28
28
|
spotRouteResolver: this.options.createLocationSpotRouteResolver(),
|
|
29
29
|
locationLifecycle: this.options.locationLifecycle(),
|
|
30
|
+
localSpotJoin: (spotId, actor, request, commit, signal, leaveSource, contentType) => {
|
|
31
|
+
const manager = this.options.spotManager();
|
|
32
|
+
if (manager === undefined)
|
|
33
|
+
throw new Error('Actor Spot membership runtime is not started.');
|
|
34
|
+
return manager.admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType);
|
|
35
|
+
},
|
|
36
|
+
localEntryJoin: this.options.notifyEntrySpotActorJoined,
|
|
37
|
+
reportSourceLeaveError: this.options.reportPostCommitError,
|
|
38
|
+
localSourceLeave: async (actor, spotId, signal) => {
|
|
39
|
+
if (spotId === undefined)
|
|
40
|
+
return this.options.notifyEntrySpotActorLeft(actor, signal);
|
|
41
|
+
const manager = this.options.spotManager();
|
|
42
|
+
if (manager === undefined)
|
|
43
|
+
throw new Error('Actor Spot membership runtime is not started.');
|
|
44
|
+
return manager.notifyActorLeftAfterTransfer(spotId, actor, signal);
|
|
45
|
+
},
|
|
30
46
|
postCommitErrorReporter: this.options.reportPostCommitError,
|
|
31
47
|
sourceTransfer: this.options.actorTransferRuntime,
|
|
32
48
|
actorJoinRelocation: this.options.actorJoinRelocation,
|
|
@@ -89,10 +105,7 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
89
105
|
return node === undefined ? undefined : (0, backend_1.meshActorSessionNodeAdapter)(node, completions);
|
|
90
106
|
},
|
|
91
107
|
localActorProvider: () => this.options.actorManager()?.getState(actorId)?.actor !== undefined,
|
|
92
|
-
remoteBoundSessionTargetProvider: () =>
|
|
93
|
-
const state = this.options.actorManager()?.getState(actorId);
|
|
94
|
-
return (0, actors_1.preferredRemoteBoundSessionTarget)(state?.remoteBoundSessionTarget, state?.boundSessionTransferTarget);
|
|
95
|
-
},
|
|
108
|
+
remoteBoundSessionTargetProvider: () => this.options.actorManager()?.getState(actorId)?.remoteBoundSessionTarget,
|
|
96
109
|
remoteActorPacketTargetProvider: () => this.options.actorPacketTargetForState(actorId),
|
|
97
110
|
requestTimeoutMs: this.options.registration.requestTimeoutMs,
|
|
98
111
|
actorId,
|