@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
|
@@ -6,34 +6,35 @@ import type {
|
|
|
6
6
|
ZLinkSpot,
|
|
7
7
|
ZLinkSpotActorJoinResult
|
|
8
8
|
} from '../../contracts';
|
|
9
|
+
import type { Message } from '../../contracts/Common/Message';
|
|
9
10
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
10
|
-
import {
|
|
11
|
-
import type {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
12
|
+
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
13
|
+
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
14
|
+
import {
|
|
15
|
+
type ZLinkBackendActorRecvInfo,
|
|
16
|
+
type ZLinkBackendActorRef,
|
|
17
|
+
type ZLinkBackendSpot,
|
|
18
|
+
type ZLinkBackendTopicMessage,
|
|
19
|
+
ZLinkBackendSpotDispatchEvent
|
|
16
20
|
} from '../backend/contracts';
|
|
17
|
-
|
|
21
|
+
|
|
18
22
|
import type { RequestResult } from '../backend/runtime-values';
|
|
19
|
-
type RuntimeMessage = Message;
|
|
20
|
-
import type { ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
21
23
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
22
24
|
import { ZLinkSpotActorLifecycleDrain } from './spot-actor-lifecycle-drain';
|
|
25
|
+
import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
23
26
|
import { ZLinkSpotActorPacketDrain, type ZLinkActorDispatchPart } from './spot-actor-packet-drain';
|
|
24
|
-
import { ZLINK_RECV_DONT_WAIT } from './spot-native-flags';
|
|
25
|
-
import { ZLinkSpotNativeActorJoinAdmission } from './spot-native-actor-join-admission';
|
|
26
|
-
import { ZLinkSpotRoutedFrameDispatch } from './spot-routed-frame-dispatch';
|
|
27
|
-
import { ZLinkSpotSubscriptionDispatch } from './spot-subscription-dispatch';
|
|
28
27
|
import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
29
|
-
import
|
|
30
|
-
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
31
|
-
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
32
|
-
import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
28
|
+
import { ZLinkSpotRoutedFrameDispatch } from './spot-routed-frame-dispatch';
|
|
33
29
|
import type {
|
|
34
30
|
ZLinkSpotActorTransferRuntime,
|
|
35
31
|
ZLinkSpotBoundSessionRuntime
|
|
36
32
|
} from './spot-runtime-ports';
|
|
33
|
+
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
34
|
+
import { ZLinkSpotSubscriptionDispatch } from './spot-subscription-dispatch';
|
|
35
|
+
const ACTOR_JOIN_POLL_INTERVAL_MS = 5;
|
|
36
|
+
|
|
37
|
+
type RuntimeMessage = Message;
|
|
37
38
|
|
|
38
39
|
const ZLINK_SPOT_DISPATCH_SUBJECT_SPOT = 1;
|
|
39
40
|
const ZLINK_SPOT_DISPATCH_SUBJECT_CHANNEL_DEALER = 3;
|
|
@@ -62,11 +63,11 @@ interface ZLinkSpotActorAdmissionRuntime {
|
|
|
62
63
|
readonly kind: 'enabled';
|
|
63
64
|
readonly runtime: ZLinkSpotActorTransferRuntime;
|
|
64
65
|
};
|
|
65
|
-
readonly commitNativeActor?: (actor: ZLinkActor) => Promise<void>;
|
|
66
66
|
readonly commitActorDeparture?: (actorId: string) => void;
|
|
67
67
|
readonly commitTransferredActor?: (
|
|
68
68
|
actor: ZLinkActor,
|
|
69
|
-
backlog: readonly ZLinkActorHandoffPacket[]
|
|
69
|
+
backlog: readonly ZLinkActorHandoffPacket[],
|
|
70
|
+
sealedSession: ZLinkRemoteBoundSessionTarget | undefined
|
|
70
71
|
) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
71
72
|
}
|
|
72
73
|
|
|
@@ -75,8 +76,7 @@ interface ZLinkSpotActorPacketRuntime {
|
|
|
75
76
|
readonly bindRemoteSession?: (
|
|
76
77
|
actor: ZLinkBackendActorRef,
|
|
77
78
|
sourceNodeRid: RoutingId,
|
|
78
|
-
sourceSessionRid: RoutingId
|
|
79
|
-
declaredTarget?: ZLinkRemoteBoundSessionTarget
|
|
79
|
+
sourceSessionRid: RoutingId
|
|
80
80
|
) => void;
|
|
81
81
|
readonly replyNoBind?: (
|
|
82
82
|
info: ZLinkBackendActorRecvInfo,
|
|
@@ -93,7 +93,6 @@ interface ZLinkSpotActorJoinDispatchOptions {
|
|
|
93
93
|
readonly nativeSpot: ZLinkBackendSpot;
|
|
94
94
|
readonly createTopicMessage: () => ZLinkBackendTopicMessage;
|
|
95
95
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
96
|
-
readonly isSpotClosing?: () => boolean;
|
|
97
96
|
readonly actors: ZLinkSpotActorAdmissionRuntime;
|
|
98
97
|
readonly packets?: ZLinkSpotActorPacketRuntime;
|
|
99
98
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
@@ -105,13 +104,10 @@ interface ZLinkSpotActorJoinDispatchOptions {
|
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
export class ZLinkSpotActorJoinDispatch {
|
|
108
|
-
private draining = false;
|
|
109
|
-
private redrainRequested = false;
|
|
110
107
|
private readonly nativeSpotId: string;
|
|
111
108
|
private readonly subscriptions: ZLinkSpotSubscriptionDispatch;
|
|
112
109
|
private readonly actorLifecycleDrain: ZLinkSpotActorLifecycleDrain;
|
|
113
110
|
private readonly actorPacketDrain: ZLinkSpotActorPacketDrain;
|
|
114
|
-
private readonly nativeActorJoinAdmission: ZLinkSpotNativeActorJoinAdmission;
|
|
115
111
|
private readonly routedFrames: ZLinkSpotRoutedFrameDispatch;
|
|
116
112
|
private readonly nativeSpot: ZLinkBackendSpot;
|
|
117
113
|
|
|
@@ -136,20 +132,9 @@ export class ZLinkSpotActorJoinDispatch {
|
|
|
136
132
|
waitIdle: waitSpotDispatchIdle,
|
|
137
133
|
flowEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
138
134
|
});
|
|
139
|
-
this.nativeActorJoinAdmission = new ZLinkSpotNativeActorJoinAdmission({
|
|
140
|
-
nativeSpot: options.nativeSpot,
|
|
141
|
-
serial: options.serial,
|
|
142
|
-
resolveActor: actors.resolveActor,
|
|
143
|
-
getTarget: actors.getTarget,
|
|
144
|
-
defaultAccept: actors.defaultAccept,
|
|
145
|
-
commitAcceptedActor: actors.commitNativeActor,
|
|
146
|
-
messageSerializers: options.messageSerializers,
|
|
147
|
-
dispatchErrors: options.dispatchErrors
|
|
148
|
-
});
|
|
149
135
|
this.routedFrames = new ZLinkSpotRoutedFrameDispatch({
|
|
150
136
|
nativeSpotId: this.nativeSpotId,
|
|
151
137
|
serial: options.serial,
|
|
152
|
-
isSpotClosing: options.isSpotClosing,
|
|
153
138
|
resolveActor: actors.resolveActor,
|
|
154
139
|
getTarget: () => actors.getTarget() as ZLinkActorJoinAdmissionTarget & ZLinkSpot,
|
|
155
140
|
defaultAccept: actors.defaultAccept,
|
|
@@ -159,7 +144,7 @@ export class ZLinkSpotActorJoinDispatch {
|
|
|
159
144
|
bindRemoteSession:
|
|
160
145
|
options.packets?.bindRemoteSession === undefined
|
|
161
146
|
? undefined
|
|
162
|
-
: (actor, sourceNodeRid, sourceSessionRid
|
|
147
|
+
: (actor, sourceNodeRid, sourceSessionRid) =>
|
|
163
148
|
options.packets!.bindRemoteSession!(
|
|
164
149
|
{
|
|
165
150
|
actorId: actor.actorId,
|
|
@@ -167,8 +152,7 @@ export class ZLinkSpotActorJoinDispatch {
|
|
|
167
152
|
nodeRid: actor.nodeRid
|
|
168
153
|
},
|
|
169
154
|
sourceNodeRid,
|
|
170
|
-
sourceSessionRid
|
|
171
|
-
declaredTarget
|
|
155
|
+
sourceSessionRid
|
|
172
156
|
),
|
|
173
157
|
routedBoundSessionReceiver: options.boundSessionRuntime?.receiveRoutedBoundSession.bind(
|
|
174
158
|
options.boundSessionRuntime
|
|
@@ -223,10 +207,6 @@ export class ZLinkSpotActorJoinDispatch {
|
|
|
223
207
|
return;
|
|
224
208
|
}
|
|
225
209
|
this.nativeSpot.setDispatchHandler((info) => {
|
|
226
|
-
if (info.event === ZLinkBackendSpotDispatchEvent.ActorJoinReadable) {
|
|
227
|
-
this.runDetached('spot actor join drain', () => this.drain());
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
210
|
if (info.event === ZLinkBackendSpotDispatchEvent.SubscribeReadable) {
|
|
231
211
|
this.runDetached('spot subscription drain', () => this.subscriptions.drain());
|
|
232
212
|
return;
|
|
@@ -278,41 +258,8 @@ export class ZLinkSpotActorJoinDispatch {
|
|
|
278
258
|
}
|
|
279
259
|
void callback().catch(() => undefined);
|
|
280
260
|
}
|
|
281
|
-
|
|
282
|
-
private async drain(): Promise<void> {
|
|
283
|
-
if (this.draining) {
|
|
284
|
-
this.redrainRequested = true;
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
this.draining = true;
|
|
288
|
-
try {
|
|
289
|
-
do {
|
|
290
|
-
this.redrainRequested = false;
|
|
291
|
-
await this.drainAvailableActorJoins();
|
|
292
|
-
} while (this.redrainWasRequested());
|
|
293
|
-
} finally {
|
|
294
|
-
this.draining = false;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
private redrainWasRequested(): boolean {
|
|
299
|
-
return this.redrainRequested;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
private async drainAvailableActorJoins(): Promise<void> {
|
|
303
|
-
for (;;) {
|
|
304
|
-
const request = this.nativeSpot.recvActorJoin(ZLINK_RECV_DONT_WAIT);
|
|
305
|
-
if (request === null) {
|
|
306
|
-
await waitSpotDispatchIdle();
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
await this.options.serial.executeLifecycleOperation(() =>
|
|
310
|
-
this.nativeActorJoinAdmission.admit(request, this.options.isSpotClosing?.() === true)
|
|
311
|
-
);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
261
|
}
|
|
315
262
|
|
|
316
263
|
function waitSpotDispatchIdle(): Promise<void> {
|
|
317
|
-
return new Promise((resolve) => setTimeout(resolve,
|
|
264
|
+
return new Promise((resolve) => setTimeout(resolve, ACTOR_JOIN_POLL_INTERVAL_MS));
|
|
318
265
|
}
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
2
|
+
import {
|
|
3
|
+
type RoutingId,
|
|
4
|
+
type ZLinkActor,
|
|
5
|
+
type ZLinkMessageSerializer,
|
|
6
|
+
type ZLinkSpot,
|
|
7
|
+
type ZLinkSpotActorJoinResult,
|
|
8
|
+
ZLinkEncodedPayload,
|
|
9
|
+
ZLinkMessage
|
|
7
10
|
} from '../../contracts';
|
|
11
|
+
|
|
12
|
+
import type { Message } from '../../contracts/Common/Message';
|
|
8
13
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
9
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
ZLinkDispatchErrorSurface,
|
|
16
|
+
ZLinkDispatchMessageKind,
|
|
17
|
+
ZLinkRuntimeDispatchErrorAction,
|
|
18
|
+
ZLinkRuntimeDispatchErrorReason
|
|
19
|
+
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
10
20
|
import { throwIfAborted } from '../abort';
|
|
11
|
-
import
|
|
21
|
+
import { ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME, ZLinkSpotActorDispatcher } from '../actors';
|
|
12
22
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
13
|
-
import { ZLinkConfigurationException } from '../configuration';
|
|
14
|
-
import {
|
|
15
|
-
ZLinkFrameworkInternalErrorKind,
|
|
16
|
-
createInternalFrameworkException
|
|
17
|
-
} from '../framework-errors-internal';
|
|
18
23
|
import { ZLinkDispatchErrorReporter } from '../channels';
|
|
19
|
-
import {
|
|
24
|
+
import { ZLinkConfigurationException } from '../configuration';
|
|
20
25
|
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
21
|
-
import { routingIdsEqual } from '../routing-id';
|
|
22
26
|
import type { ZLinkSpotActivation } from './spot-activation-state';
|
|
23
|
-
import type { ZLinkSpotActorTransferRuntime } from './spot-runtime-ports';
|
|
24
27
|
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
28
|
+
import type { ZLinkSpotActorTransferRuntime } from './spot-runtime-ports';
|
|
25
29
|
|
|
26
30
|
export interface ZLinkSpotActorMembershipOptions {
|
|
27
31
|
readonly resolveActivation: (
|
|
@@ -41,11 +45,8 @@ export interface ZLinkSpotActorMembershipOptions {
|
|
|
41
45
|
readonly entrySpotIdProvider?: (meshName: string) => string | undefined;
|
|
42
46
|
readonly spotRouteResolver?: ZLinkSpotRouteResolver;
|
|
43
47
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
44
|
-
readonly isSpotClosing?: (activation: ZLinkSpotActivation) => boolean;
|
|
45
48
|
}
|
|
46
49
|
|
|
47
|
-
export type ZLinkActorJoinRollback = () => Promise<void> | void;
|
|
48
|
-
|
|
49
50
|
export class ZLinkSpotActorMembership {
|
|
50
51
|
constructor(private readonly options: ZLinkSpotActorMembershipOptions) {}
|
|
51
52
|
|
|
@@ -53,22 +54,14 @@ export class ZLinkSpotActorMembership {
|
|
|
53
54
|
spotId: RoutingId,
|
|
54
55
|
actor: ZLinkActor,
|
|
55
56
|
request: Message,
|
|
56
|
-
commit: (
|
|
57
|
-
spot: ZLinkSpot
|
|
58
|
-
) => Promise<ZLinkActorJoinRollback | void> | ZLinkActorJoinRollback | void,
|
|
57
|
+
commit: (spot: ZLinkSpot) => Promise<void> | void,
|
|
59
58
|
signal?: AbortSignal,
|
|
60
59
|
leaveSource?: () => Promise<void>,
|
|
61
|
-
contentType =
|
|
60
|
+
contentType: string = ZlinkStreamContentType.Json
|
|
62
61
|
): Promise<ZLinkSpotActorJoinResult> {
|
|
63
62
|
throwIfAborted(signal);
|
|
64
63
|
const activation = this.requireActivation(spotId);
|
|
65
64
|
return await this.runLifecycleOperation(activation, async () => {
|
|
66
|
-
if (this.options.isSpotClosing?.(activation) === true) {
|
|
67
|
-
throw createInternalFrameworkException(
|
|
68
|
-
ZLinkFrameworkInternalErrorKind.RequestRejected,
|
|
69
|
-
`User Spot '${String(spotId)}' is closing.`
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
65
|
return await this.admitActorJoinCore(
|
|
73
66
|
activation,
|
|
74
67
|
actor,
|
|
@@ -85,41 +78,34 @@ export class ZLinkSpotActorMembership {
|
|
|
85
78
|
activation: ZLinkSpotActivation,
|
|
86
79
|
actor: ZLinkActor,
|
|
87
80
|
request: Message,
|
|
88
|
-
commit: (
|
|
89
|
-
spot: ZLinkSpot
|
|
90
|
-
) => Promise<ZLinkActorJoinRollback | void> | ZLinkActorJoinRollback | void,
|
|
81
|
+
commit: (spot: ZLinkSpot) => Promise<void> | void,
|
|
91
82
|
signal: AbortSignal | undefined,
|
|
92
83
|
leaveSource: (() => Promise<void>) | undefined,
|
|
93
84
|
contentType: string
|
|
94
85
|
): Promise<ZLinkSpotActorJoinResult> {
|
|
95
86
|
const dispatcher = this.createActorDispatcher(activation);
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
response = await dispatcher.evaluateActorJoin(actor, request, contentType);
|
|
104
|
-
if (response.accepted) {
|
|
87
|
+
const response = await dispatcher.evaluateActorJoin(actor, request, contentType);
|
|
88
|
+
if (response.accepted) {
|
|
89
|
+
await commit(activation.spot);
|
|
90
|
+
activation.commitActorJoin(actor);
|
|
91
|
+
try {
|
|
92
|
+
await dispatcher.notifyJoinActor(actor);
|
|
93
|
+
} finally {
|
|
105
94
|
if (leaveSource === undefined) {
|
|
106
|
-
|
|
95
|
+
void this.options.entrySpotCallbacks?.onLeaveActor(actor, signal).catch((error) => {
|
|
96
|
+
this.options.dispatchErrors?.report({
|
|
97
|
+
surface: ZLinkDispatchErrorSurface.SpotActor,
|
|
98
|
+
messageKind: ZLinkDispatchMessageKind.ActorSend,
|
|
99
|
+
reason: ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
100
|
+
action: ZLinkRuntimeDispatchErrorAction.Drop,
|
|
101
|
+
actorId: actor.context.actorId,
|
|
102
|
+
error
|
|
103
|
+
});
|
|
104
|
+
});
|
|
107
105
|
} else {
|
|
108
106
|
await leaveSource();
|
|
109
107
|
}
|
|
110
|
-
await dispatcher.commitActorJoin(actor, async () => {
|
|
111
|
-
const rollback = await commit(activation.spot);
|
|
112
|
-
if (rollback !== undefined) transaction.rollbackExternal = rollback;
|
|
113
|
-
transaction.rollbackMembership = activation.commitActorJoin(actor);
|
|
114
|
-
transaction.committed = true;
|
|
115
|
-
});
|
|
116
108
|
}
|
|
117
|
-
} catch (error) {
|
|
118
|
-
if (transaction.committed) {
|
|
119
|
-
transaction.rollbackMembership?.();
|
|
120
|
-
await transaction.rollbackExternal?.();
|
|
121
|
-
}
|
|
122
|
-
throw error;
|
|
123
109
|
}
|
|
124
110
|
return {
|
|
125
111
|
accepted: response.accepted,
|
|
@@ -169,24 +155,6 @@ export class ZLinkSpotActorMembership {
|
|
|
169
155
|
'Spot actor leave requires an Entry Spot node routing id.'
|
|
170
156
|
);
|
|
171
157
|
}
|
|
172
|
-
const remoteEntry =
|
|
173
|
-
localEntryNodeRid !== undefined && !routingIdsEqual(entryNodeRid, localEntryNodeRid);
|
|
174
|
-
if (!remoteEntry) {
|
|
175
|
-
const leaveSource = async () => {
|
|
176
|
-
activation.beginActorTransfer(actor.context.actorId);
|
|
177
|
-
await activation.spot.onLeaveActor(actor);
|
|
178
|
-
activation.commitActorDeparture(actor.context.actorId);
|
|
179
|
-
this.options.actorTransferRuntime?.clearRoutedActor(actor);
|
|
180
|
-
};
|
|
181
|
-
// A Spot actor handler already owns this activation's serial turn.
|
|
182
|
-
// Complete its lifecycle transition inside that turn instead of trying
|
|
183
|
-
// to acquire a second turn for the same owner.
|
|
184
|
-
if (activation.serial.isCurrentTurn) {
|
|
185
|
-
await leaveSource();
|
|
186
|
-
} else {
|
|
187
|
-
await activation.serial.execute(leaveSource);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
158
|
const request = RuntimeMessage.from(Buffer.alloc(0));
|
|
191
159
|
try {
|
|
192
160
|
const context = actor.context as typeof actor.context & {
|
|
@@ -24,7 +24,6 @@ import { createInboundFlow, currentFlowContext, runWithFlow } from '../diagnosti
|
|
|
24
24
|
import { streamSessionIdFromRoutingId } from '../streams/managed-stream';
|
|
25
25
|
import type { ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
26
26
|
import {
|
|
27
|
-
actorMessageFollowContext,
|
|
28
27
|
ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
|
|
29
28
|
ZLinkSpotActorDispatcher,
|
|
30
29
|
ZLinkSpotActorHandlerRegistryRuntime
|
|
@@ -104,10 +103,6 @@ interface ZLinkSpotActorPacketDispatchOptions {
|
|
|
104
103
|
| Promise<{ readonly handled: boolean; readonly response?: unknown } | undefined>
|
|
105
104
|
| { readonly handled: boolean; readonly response?: unknown }
|
|
106
105
|
| undefined;
|
|
107
|
-
readonly onRemoteBoundSessionTarget?: (
|
|
108
|
-
actorId: string,
|
|
109
|
-
target: ZLinkRemoteBoundSessionTarget | undefined
|
|
110
|
-
) => void;
|
|
111
106
|
readonly onDisconnectActor: (actor: ZLinkActor) => Promise<void>;
|
|
112
107
|
readonly actorResponseSender?: (
|
|
113
108
|
actor: ZLinkActor,
|
|
@@ -210,16 +205,6 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
210
205
|
) {
|
|
211
206
|
return undefined;
|
|
212
207
|
}
|
|
213
|
-
if (
|
|
214
|
-
remoteBoundSessionTarget !== undefined &&
|
|
215
|
-
actorMessageFollowContext(fallbackActorRef) === undefined
|
|
216
|
-
) {
|
|
217
|
-
// A replayed handoff/Message Follow packet keeps its captured Session
|
|
218
|
-
// route solely for that packet's response. It cannot republish the
|
|
219
|
-
// predecessor route over a binding already confirmed by a later Actor
|
|
220
|
-
// owner turn.
|
|
221
|
-
this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
|
|
222
|
-
}
|
|
223
208
|
const routed = await this.options.routeBeforeLocal?.(delivery);
|
|
224
209
|
if (routed?.handled === true) {
|
|
225
210
|
return routed.response;
|
|
@@ -239,7 +224,6 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
239
224
|
);
|
|
240
225
|
}
|
|
241
226
|
if (header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
242
|
-
this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
|
|
243
227
|
await this.options.onDisconnectActor(actor);
|
|
244
228
|
return undefined;
|
|
245
229
|
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import { ZLinkFrameworkException, type ActorRef, type RoutingId } from '../../contracts';
|
|
6
6
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
7
7
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
8
|
-
import type { ZLinkRemoteActorPacketTarget
|
|
8
|
+
import type { ZLinkRemoteActorPacketTarget } from '../actors';
|
|
9
9
|
import { decodeStreamHeader, messageToBytes, ZLinkStreamMessageKind } from '../streams/protocol';
|
|
10
10
|
import {
|
|
11
11
|
decodeRemoteActorSessionBinding,
|
|
@@ -25,8 +25,7 @@ interface ZLinkSpotActorPacketRelayDispatchOptions {
|
|
|
25
25
|
readonly bindRemoteSession?: (
|
|
26
26
|
actor: ActorRef,
|
|
27
27
|
sourceNodeRid: RoutingId,
|
|
28
|
-
sourceSessionRid: RoutingId
|
|
29
|
-
declaredTarget?: ZLinkRemoteBoundSessionTarget
|
|
28
|
+
sourceSessionRid: RoutingId
|
|
30
29
|
) => void;
|
|
31
30
|
readonly flowEnabled?: () => boolean;
|
|
32
31
|
}
|
|
@@ -81,18 +80,7 @@ export class ZLinkSpotActorPacketRelayDispatch {
|
|
|
81
80
|
'Remote actor session binding source did not match the declared session node.'
|
|
82
81
|
);
|
|
83
82
|
}
|
|
84
|
-
this.options.bindRemoteSession(
|
|
85
|
-
actorRef,
|
|
86
|
-
declaredSourceNodeRid,
|
|
87
|
-
binding.sessionRid,
|
|
88
|
-
remoteBoundSessionTarget === undefined
|
|
89
|
-
? undefined
|
|
90
|
-
: {
|
|
91
|
-
...remoteBoundSessionTarget,
|
|
92
|
-
sessionNodeRid: declaredSourceNodeRid,
|
|
93
|
-
sessionRid: binding.sessionRid
|
|
94
|
-
}
|
|
95
|
-
);
|
|
83
|
+
this.options.bindRemoteSession(actorRef, declaredSourceNodeRid, binding.sessionRid);
|
|
96
84
|
if (hasReplyToken(received.replyToken)) {
|
|
97
85
|
submitSpotRouteBridgeReply(received, actorPacketRelay.envelope, {
|
|
98
86
|
ok: true,
|
|
@@ -26,7 +26,7 @@ import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
|
26
26
|
|
|
27
27
|
interface ZLinkEntrySpotContextOptions {
|
|
28
28
|
readonly spotId: SpotId;
|
|
29
|
-
readonly objectGeneration:
|
|
29
|
+
readonly objectGeneration: bigint;
|
|
30
30
|
readonly nodeRid: RoutingId;
|
|
31
31
|
readonly handlers: ZLinkSpotHandlerRegistry;
|
|
32
32
|
readonly outbound: ZLinkSpotOutbound;
|
|
@@ -47,7 +47,7 @@ interface ZLinkEntrySpotContextOptions {
|
|
|
47
47
|
interface ZLinkSpotContextOptions {
|
|
48
48
|
readonly meshName: string;
|
|
49
49
|
readonly spotId: SpotId;
|
|
50
|
-
readonly objectGeneration:
|
|
50
|
+
readonly objectGeneration: bigint;
|
|
51
51
|
readonly handlers: ZLinkSpotHandlerRegistry;
|
|
52
52
|
readonly outbound: ZLinkSpotOutbound;
|
|
53
53
|
readonly timers: ZLinkSpotTimerRegistry;
|
|
@@ -263,7 +263,7 @@ function withImmutableSpotIdentity<
|
|
|
263
263
|
T extends {
|
|
264
264
|
readonly meshName: string;
|
|
265
265
|
readonly spotId: SpotId;
|
|
266
|
-
readonly objectGeneration:
|
|
266
|
+
readonly objectGeneration: bigint;
|
|
267
267
|
readonly nodeRid: RoutingId;
|
|
268
268
|
}
|
|
269
269
|
>(context: T): T {
|
|
@@ -88,7 +88,6 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
88
88
|
readonly spotPublisherClient?: ZLinkSpotPublisherClient;
|
|
89
89
|
readonly routedTransport?: ZLinkSpotRoutedTransport;
|
|
90
90
|
readonly spotRouterChannelIdForMesh?: (meshName: string) => string;
|
|
91
|
-
readonly channelMeshNameForChannel?: (channelName: string) => string | undefined;
|
|
92
91
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
93
92
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
94
93
|
readonly runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
|
|
@@ -99,7 +98,7 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
99
98
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
100
99
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
101
100
|
readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
102
|
-
readonly detachedTaskRunner
|
|
101
|
+
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
export class ZLinkEntrySpotActivation {
|
|
@@ -121,6 +120,11 @@ export class ZLinkEntrySpotActivation {
|
|
|
121
120
|
readonly context: ZLinkEntrySpotContext;
|
|
122
121
|
|
|
123
122
|
constructor(private readonly options: ZLinkEntrySpotActivationOptions) {
|
|
123
|
+
if ((options.detachedTaskRunner as unknown) === undefined) {
|
|
124
|
+
throw new ZLinkConfigurationException(
|
|
125
|
+
'Entry Spot activation requires a detached task runner.'
|
|
126
|
+
);
|
|
127
|
+
}
|
|
124
128
|
this.serial = new ZLinkSpotSerialTurnExecutor(false, options.nativeSpot.routingId);
|
|
125
129
|
this.spotSerialExecutor = new ZLinkSpotSerialExecutor(
|
|
126
130
|
this.serial,
|
|
@@ -145,7 +149,7 @@ export class ZLinkEntrySpotActivation {
|
|
|
145
149
|
this.workerRuntime = options.workerRuntime ?? new ZLinkWorkerRuntime();
|
|
146
150
|
this.context = createEntrySpotContext({
|
|
147
151
|
spotId: String(options.nativeSpot.routingId),
|
|
148
|
-
objectGeneration:
|
|
152
|
+
objectGeneration: entrySpotGeneration(options.nativeSpot),
|
|
149
153
|
nodeRid: options.nodeRid,
|
|
150
154
|
handlers: this.handlers,
|
|
151
155
|
outbound: this.outbound,
|
|
@@ -195,8 +199,6 @@ export class ZLinkEntrySpotActivation {
|
|
|
195
199
|
target.remoteBoundSessionTarget,
|
|
196
200
|
target.fallbackActorRef
|
|
197
201
|
),
|
|
198
|
-
onRemoteBoundSessionTarget: (targetActorId, target) =>
|
|
199
|
-
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
|
|
200
202
|
onDisconnectActor: (actor) => this.notifyDisconnectActor(actor),
|
|
201
203
|
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(
|
|
202
204
|
this.options.boundSessionRuntime
|
|
@@ -325,7 +327,7 @@ export class ZLinkEntrySpotActivation {
|
|
|
325
327
|
await cleanup(() => this.actorDispatch?.dispose());
|
|
326
328
|
await cleanup(() => this.timers.dispose());
|
|
327
329
|
await cleanup(() => this.spotSerialExecutor.close());
|
|
328
|
-
await cleanup(() => disposeLifecycleHandlers(this.entrySpot));
|
|
330
|
+
await cleanup(() => disposeLifecycleHandlers(this.entrySpot, this.options.detachedTaskRunner));
|
|
329
331
|
await cleanup(() => this.options.nativeSpot.dispose());
|
|
330
332
|
if (this.initialized) {
|
|
331
333
|
this.lifecycleMetrics.closed('entry');
|
|
@@ -372,6 +374,10 @@ export class ZLinkEntrySpotActivation {
|
|
|
372
374
|
}
|
|
373
375
|
}
|
|
374
376
|
|
|
377
|
+
executeActor<T>(actorId: string, operation: () => Promise<T>): Promise<T> {
|
|
378
|
+
return this.spotSerialExecutor.executeActor(actorId, operation);
|
|
379
|
+
}
|
|
380
|
+
|
|
375
381
|
/**
|
|
376
382
|
* Entry Spot membership does not have an application admission callback.
|
|
377
383
|
* The shared core round-trip therefore accepts a valid returning Actor and
|
|
@@ -393,7 +399,6 @@ export class ZLinkEntrySpotActivation {
|
|
|
393
399
|
kind: 'enabled',
|
|
394
400
|
runtime: this.options.actorTransferRuntime
|
|
395
401
|
},
|
|
396
|
-
commitNativeActor: (actor) => this.commitEntryActorTransaction(actor),
|
|
397
402
|
commitTransferredActor: async (actor, backlog) => {
|
|
398
403
|
await this.commitEntryActorTransaction(actor);
|
|
399
404
|
return await this.replayActorBacklog(actor, backlog);
|
|
@@ -401,23 +406,10 @@ export class ZLinkEntrySpotActivation {
|
|
|
401
406
|
},
|
|
402
407
|
packets: {
|
|
403
408
|
handle: (delivery) => this.dispatchActorPacket(delivery),
|
|
404
|
-
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid
|
|
409
|
+
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
|
|
405
410
|
if (routingIdsEqual(sourceNodeRid, this.options.nativeNode.routingId)) {
|
|
406
411
|
return;
|
|
407
412
|
}
|
|
408
|
-
const target =
|
|
409
|
-
declaredTarget ??
|
|
410
|
-
this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(
|
|
411
|
-
sourceNodeRid,
|
|
412
|
-
sourceSessionRid
|
|
413
|
-
);
|
|
414
|
-
if (target !== undefined) {
|
|
415
|
-
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(actor.actorId, {
|
|
416
|
-
...target,
|
|
417
|
-
sessionNodeRid: sourceNodeRid,
|
|
418
|
-
sessionRid: sourceSessionRid
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
413
|
this.options.nativeNode.bindRemoteActorSession(actor, sourceNodeRid, sourceSessionRid);
|
|
422
414
|
},
|
|
423
415
|
replyNoBind: (info, parts, result) => this.replyActorNoBind(info, parts, result)
|
|
@@ -549,15 +541,6 @@ function notifyEntryActorJoined(entrySpot: ZLinkEntrySpot, actor: ZLinkActor): P
|
|
|
549
541
|
return callback === undefined ? Promise.resolve() : callback.call(entrySpot, actor);
|
|
550
542
|
}
|
|
551
543
|
|
|
552
|
-
function toContextGeneration(generation: bigint): number {
|
|
553
|
-
if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
554
|
-
throw new ZLinkConfigurationException(
|
|
555
|
-
`Entry Spot object generation '${generation}' cannot be represented by the Node.js public context.`
|
|
556
|
-
);
|
|
557
|
-
}
|
|
558
|
-
return Number(generation);
|
|
559
|
-
}
|
|
560
|
-
|
|
561
544
|
function entrySpotGeneration(spot: ZLinkBackendSpot): bigint {
|
|
562
545
|
return (
|
|
563
546
|
spot.lifecycleGeneration ??
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { METRIC_NAMES } from '../diagnostics/runtime-metrics';
|
|
1
2
|
import type { ZLinkRuntimeMetrics } from '../diagnostics';
|
|
2
3
|
|
|
3
4
|
export type ZLinkSpotMetricKind = 'entry' | 'user';
|
|
@@ -6,10 +7,10 @@ export class ZLinkSpotLifecycleMetrics {
|
|
|
6
7
|
constructor(private readonly metrics?: ZLinkRuntimeMetrics) {}
|
|
7
8
|
|
|
8
9
|
opened(kind: ZLinkSpotMetricKind): void {
|
|
9
|
-
this.metrics?.change(
|
|
10
|
+
this.metrics?.change(METRIC_NAMES.SpotCount, 1, { kind });
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
closed(kind: ZLinkSpotMetricKind): void {
|
|
13
|
-
this.metrics?.change(
|
|
14
|
+
this.metrics?.change(METRIC_NAMES.SpotCount, -1, { kind });
|
|
14
15
|
}
|
|
15
16
|
}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ZLinkFrameworkInternalErrorKind,
|
|
3
|
-
createInternalFrameworkException,
|
|
4
|
-
internalFrameworkErrorKind,
|
|
5
|
-
wireReplyFailureException
|
|
6
|
-
} from '../framework-errors-internal';
|
|
7
1
|
import { randomUUID } from 'node:crypto';
|
|
8
2
|
import {
|
|
3
|
+
type ZLinkMessageSerializer,
|
|
9
4
|
ZLinkFrameworkException,
|
|
5
|
+
ZLinkSpotKind,
|
|
10
6
|
type RoutingId,
|
|
11
7
|
type SpotId,
|
|
12
8
|
type SpotRef,
|
|
@@ -15,20 +11,26 @@ import {
|
|
|
15
11
|
type ZLinkSpotCreateCall,
|
|
16
12
|
type ZLinkSpotCreateResult,
|
|
17
13
|
type ZLinkSpotGetOrCreateCall,
|
|
18
|
-
type ZLinkSpotManager
|
|
19
|
-
ZLinkSpotKind
|
|
14
|
+
type ZLinkSpotManager
|
|
20
15
|
} from '../../contracts';
|
|
21
|
-
|
|
16
|
+
|
|
17
|
+
import { ZLINK_MAX_SPOT_ID_BYTES } from '../../contracts/Common/CoreTypes';
|
|
22
18
|
import type { ZLinkObjectFactoryRegistration } from '../../contracts/Configuration/RegistrationTypes';
|
|
23
19
|
import { ZLinkConfigurationException } from '../configuration';
|
|
24
|
-
import
|
|
25
|
-
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
26
|
-
import type { DefaultZLinkSpotManager } from './index';
|
|
27
|
-
import { encodeFrameworkCreationPayload } from '../messaging/creation-payload-codec';
|
|
28
|
-
import type { ServiceUserSpotCloseRecord } from '../foundation/service-stateful-wire-codec';
|
|
20
|
+
import { captureZLinkSpotSerialTurn, requireZLinkYieldTurn } from '../execution';
|
|
29
21
|
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
22
|
+
import type { ServiceUserSpotCloseRecord } from '../foundation/service-stateful-wire-codec';
|
|
23
|
+
import {
|
|
24
|
+
ZLinkFrameworkInternalErrorKind,
|
|
25
|
+
createInternalFrameworkException,
|
|
26
|
+
internalFrameworkErrorKind,
|
|
27
|
+
wireReplyFailureException
|
|
28
|
+
} from '../framework-errors-internal';
|
|
29
|
+
import type { ZLinkUserSpotCreationCoordinator } from '../host/user-spot-creation-coordinator';
|
|
30
30
|
import type { ZLinkAuthoritySnapshot } from '../locations/internal-location-contracts';
|
|
31
|
-
import {
|
|
31
|
+
import { encodeFrameworkCreationPayload } from '../messaging/creation-payload-codec';
|
|
32
|
+
import type { DefaultZLinkSpotManager } from './index';
|
|
33
|
+
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
32
34
|
|
|
33
35
|
export interface ZLinkPublicSpotManagerOptions {
|
|
34
36
|
readonly local: DefaultZLinkSpotManager;
|
|
@@ -331,8 +333,10 @@ function selectFactory(
|
|
|
331
333
|
|
|
332
334
|
function requireText(value: string, label: string): string {
|
|
333
335
|
const bytes = Buffer.byteLength(value);
|
|
334
|
-
if (bytes < 1 || bytes >
|
|
335
|
-
throw invalidConfiguration(
|
|
336
|
+
if (bytes < 1 || bytes > ZLINK_MAX_SPOT_ID_BYTES || value.includes('\0')) {
|
|
337
|
+
throw invalidConfiguration(
|
|
338
|
+
`${label} must contain 1..${ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes and no NUL.`
|
|
339
|
+
);
|
|
336
340
|
}
|
|
337
341
|
return value;
|
|
338
342
|
}
|