@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
|
@@ -4,21 +4,17 @@ exports.ZLinkSpotActorJoinDispatch = void 0;
|
|
|
4
4
|
const contracts_1 = require("../backend/contracts");
|
|
5
5
|
const spot_actor_lifecycle_drain_1 = require("./spot-actor-lifecycle-drain");
|
|
6
6
|
const spot_actor_packet_drain_1 = require("./spot-actor-packet-drain");
|
|
7
|
-
const spot_native_flags_1 = require("./spot-native-flags");
|
|
8
|
-
const spot_native_actor_join_admission_1 = require("./spot-native-actor-join-admission");
|
|
9
7
|
const spot_routed_frame_dispatch_1 = require("./spot-routed-frame-dispatch");
|
|
10
8
|
const spot_subscription_dispatch_1 = require("./spot-subscription-dispatch");
|
|
9
|
+
const ACTOR_JOIN_POLL_INTERVAL_MS = 5;
|
|
11
10
|
const ZLINK_SPOT_DISPATCH_SUBJECT_SPOT = 1;
|
|
12
11
|
const ZLINK_SPOT_DISPATCH_SUBJECT_CHANNEL_DEALER = 3;
|
|
13
12
|
class ZLinkSpotActorJoinDispatch {
|
|
14
13
|
options;
|
|
15
|
-
draining = false;
|
|
16
|
-
redrainRequested = false;
|
|
17
14
|
nativeSpotId;
|
|
18
15
|
subscriptions;
|
|
19
16
|
actorLifecycleDrain;
|
|
20
17
|
actorPacketDrain;
|
|
21
|
-
nativeActorJoinAdmission;
|
|
22
18
|
routedFrames;
|
|
23
19
|
nativeSpot;
|
|
24
20
|
constructor(options) {
|
|
@@ -43,20 +39,9 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
43
39
|
waitIdle: waitSpotDispatchIdle,
|
|
44
40
|
flowEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
45
41
|
});
|
|
46
|
-
this.nativeActorJoinAdmission = new spot_native_actor_join_admission_1.ZLinkSpotNativeActorJoinAdmission({
|
|
47
|
-
nativeSpot: options.nativeSpot,
|
|
48
|
-
serial: options.serial,
|
|
49
|
-
resolveActor: actors.resolveActor,
|
|
50
|
-
getTarget: actors.getTarget,
|
|
51
|
-
defaultAccept: actors.defaultAccept,
|
|
52
|
-
commitAcceptedActor: actors.commitNativeActor,
|
|
53
|
-
messageSerializers: options.messageSerializers,
|
|
54
|
-
dispatchErrors: options.dispatchErrors
|
|
55
|
-
});
|
|
56
42
|
this.routedFrames = new spot_routed_frame_dispatch_1.ZLinkSpotRoutedFrameDispatch({
|
|
57
43
|
nativeSpotId: this.nativeSpotId,
|
|
58
44
|
serial: options.serial,
|
|
59
|
-
isSpotClosing: options.isSpotClosing,
|
|
60
45
|
resolveActor: actors.resolveActor,
|
|
61
46
|
getTarget: () => actors.getTarget(),
|
|
62
47
|
defaultAccept: actors.defaultAccept,
|
|
@@ -65,11 +50,11 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
65
50
|
actorPacketHandler: options.packets?.handle,
|
|
66
51
|
bindRemoteSession: options.packets?.bindRemoteSession === undefined
|
|
67
52
|
? undefined
|
|
68
|
-
: (actor, sourceNodeRid, sourceSessionRid
|
|
53
|
+
: (actor, sourceNodeRid, sourceSessionRid) => options.packets.bindRemoteSession({
|
|
69
54
|
actorId: actor.actorId,
|
|
70
55
|
generation: actor.objectGeneration,
|
|
71
56
|
nodeRid: actor.nodeRid
|
|
72
|
-
}, sourceNodeRid, sourceSessionRid
|
|
57
|
+
}, sourceNodeRid, sourceSessionRid),
|
|
73
58
|
routedBoundSessionReceiver: options.boundSessionRuntime?.receiveRoutedBoundSession.bind(options.boundSessionRuntime),
|
|
74
59
|
routedBoundSessionResponseReceiver: options.boundSessionRuntime?.receiveRoutedBoundSessionResponse.bind(options.boundSessionRuntime),
|
|
75
60
|
routedBoundSessionErrorReceiver: options.boundSessionRuntime?.receiveRoutedBoundSessionError.bind(options.boundSessionRuntime),
|
|
@@ -105,10 +90,6 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
105
90
|
return;
|
|
106
91
|
}
|
|
107
92
|
this.nativeSpot.setDispatchHandler((info) => {
|
|
108
|
-
if (info.event === contracts_1.ZLinkBackendSpotDispatchEvent.ActorJoinReadable) {
|
|
109
|
-
this.runDetached('spot actor join drain', () => this.drain());
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
93
|
if (info.event === contracts_1.ZLinkBackendSpotDispatchEvent.SubscribeReadable) {
|
|
113
94
|
this.runDetached('spot subscription drain', () => this.subscriptions.drain());
|
|
114
95
|
return;
|
|
@@ -147,37 +128,8 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
147
128
|
}
|
|
148
129
|
void callback().catch(() => undefined);
|
|
149
130
|
}
|
|
150
|
-
async drain() {
|
|
151
|
-
if (this.draining) {
|
|
152
|
-
this.redrainRequested = true;
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.draining = true;
|
|
156
|
-
try {
|
|
157
|
-
do {
|
|
158
|
-
this.redrainRequested = false;
|
|
159
|
-
await this.drainAvailableActorJoins();
|
|
160
|
-
} while (this.redrainWasRequested());
|
|
161
|
-
}
|
|
162
|
-
finally {
|
|
163
|
-
this.draining = false;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
redrainWasRequested() {
|
|
167
|
-
return this.redrainRequested;
|
|
168
|
-
}
|
|
169
|
-
async drainAvailableActorJoins() {
|
|
170
|
-
for (;;) {
|
|
171
|
-
const request = this.nativeSpot.recvActorJoin(spot_native_flags_1.ZLINK_RECV_DONT_WAIT);
|
|
172
|
-
if (request === null) {
|
|
173
|
-
await waitSpotDispatchIdle();
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
await this.options.serial.executeLifecycleOperation(() => this.nativeActorJoinAdmission.admit(request, this.options.isSpotClosing?.() === true));
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
131
|
}
|
|
180
132
|
exports.ZLinkSpotActorJoinDispatch = ZLinkSpotActorJoinDispatch;
|
|
181
133
|
function waitSpotDispatchIdle() {
|
|
182
|
-
return new Promise((resolve) => setTimeout(resolve,
|
|
134
|
+
return new Promise((resolve) => setTimeout(resolve, ACTOR_JOIN_POLL_INTERVAL_MS));
|
|
183
135
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
1
|
+
import { type RoutingId, type ZLinkActor, type ZLinkMessageSerializer, type ZLinkSpot, type ZLinkSpotActorJoinResult } from '../../contracts';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
3
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
4
|
import { ZLinkDispatchErrorReporter } from '../channels';
|
|
5
5
|
import type { ZLinkSpotActivation } from './spot-activation-state';
|
|
6
|
-
import type { ZLinkSpotActorTransferRuntime } from './spot-runtime-ports';
|
|
7
6
|
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
7
|
+
import type { ZLinkSpotActorTransferRuntime } from './spot-runtime-ports';
|
|
8
8
|
export interface ZLinkSpotActorMembershipOptions {
|
|
9
9
|
readonly resolveActivation: (spotId: RoutingId, meshName?: string) => ZLinkSpotActivation | undefined;
|
|
10
10
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
@@ -20,13 +20,11 @@ export interface ZLinkSpotActorMembershipOptions {
|
|
|
20
20
|
readonly entrySpotIdProvider?: (meshName: string) => string | undefined;
|
|
21
21
|
readonly spotRouteResolver?: ZLinkSpotRouteResolver;
|
|
22
22
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
23
|
-
readonly isSpotClosing?: (activation: ZLinkSpotActivation) => boolean;
|
|
24
23
|
}
|
|
25
|
-
export type ZLinkActorJoinRollback = () => Promise<void> | void;
|
|
26
24
|
export declare class ZLinkSpotActorMembership {
|
|
27
25
|
private readonly options;
|
|
28
26
|
constructor(options: ZLinkSpotActorMembershipOptions);
|
|
29
|
-
admitActorJoin(spotId: RoutingId, actor: ZLinkActor, request: Message, commit: (spot: ZLinkSpot) => Promise<
|
|
27
|
+
admitActorJoin(spotId: RoutingId, actor: ZLinkActor, request: Message, commit: (spot: ZLinkSpot) => Promise<void> | void, signal?: AbortSignal, leaveSource?: () => Promise<void>, contentType?: string): Promise<ZLinkSpotActorJoinResult>;
|
|
30
28
|
private admitActorJoinCore;
|
|
31
29
|
leaveActor(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal, meshName?: string): Promise<void>;
|
|
32
30
|
private leaveActorCore;
|
|
@@ -1,58 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotActorMembership = void 0;
|
|
4
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
6
|
+
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
5
7
|
const abort_1 = require("../abort");
|
|
8
|
+
const actors_1 = require("../actors");
|
|
6
9
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
7
10
|
const configuration_1 = require("../configuration");
|
|
8
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
9
|
-
const actors_1 = require("../actors");
|
|
10
11
|
const payload_codec_1 = require("../messaging/payload-codec");
|
|
11
|
-
const routing_id_1 = require("../routing-id");
|
|
12
12
|
class ZLinkSpotActorMembership {
|
|
13
13
|
options;
|
|
14
14
|
constructor(options) {
|
|
15
15
|
this.options = options;
|
|
16
16
|
}
|
|
17
|
-
async admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType =
|
|
17
|
+
async admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType = stream_wire_1.ZlinkStreamContentType.Json) {
|
|
18
18
|
(0, abort_1.throwIfAborted)(signal);
|
|
19
19
|
const activation = this.requireActivation(spotId);
|
|
20
20
|
return await this.runLifecycleOperation(activation, async () => {
|
|
21
|
-
if (this.options.isSpotClosing?.(activation) === true) {
|
|
22
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, `User Spot '${String(spotId)}' is closing.`);
|
|
23
|
-
}
|
|
24
21
|
return await this.admitActorJoinCore(activation, actor, request, commit, signal, leaveSource, contentType);
|
|
25
22
|
});
|
|
26
23
|
}
|
|
27
24
|
async admitActorJoinCore(activation, actor, request, commit, signal, leaveSource, contentType) {
|
|
28
25
|
const dispatcher = this.createActorDispatcher(activation);
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
const response = await dispatcher.evaluateActorJoin(actor, request, contentType);
|
|
27
|
+
if (response.accepted) {
|
|
28
|
+
await commit(activation.spot);
|
|
29
|
+
activation.commitActorJoin(actor);
|
|
30
|
+
try {
|
|
31
|
+
await dispatcher.notifyJoinActor(actor);
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
34
|
if (leaveSource === undefined) {
|
|
35
|
-
|
|
35
|
+
void this.options.entrySpotCallbacks?.onLeaveActor(actor, signal).catch((error) => {
|
|
36
|
+
this.options.dispatchErrors?.report({
|
|
37
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotActor,
|
|
38
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorSend,
|
|
39
|
+
reason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
40
|
+
action: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
41
|
+
actorId: actor.context.actorId,
|
|
42
|
+
error
|
|
43
|
+
});
|
|
44
|
+
});
|
|
36
45
|
}
|
|
37
46
|
else {
|
|
38
47
|
await leaveSource();
|
|
39
48
|
}
|
|
40
|
-
await dispatcher.commitActorJoin(actor, async () => {
|
|
41
|
-
const rollback = await commit(activation.spot);
|
|
42
|
-
if (rollback !== undefined)
|
|
43
|
-
transaction.rollbackExternal = rollback;
|
|
44
|
-
transaction.rollbackMembership = activation.commitActorJoin(actor);
|
|
45
|
-
transaction.committed = true;
|
|
46
|
-
});
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
if (transaction.committed) {
|
|
51
|
-
transaction.rollbackMembership?.();
|
|
52
|
-
await transaction.rollbackExternal?.();
|
|
53
|
-
}
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
51
|
return {
|
|
57
52
|
accepted: response.accepted,
|
|
58
53
|
reply: response.reply === undefined
|
|
@@ -80,24 +75,6 @@ class ZLinkSpotActorMembership {
|
|
|
80
75
|
if (entryNodeRid === undefined) {
|
|
81
76
|
throw new configuration_1.ZLinkConfigurationException('Spot actor leave requires an Entry Spot node routing id.');
|
|
82
77
|
}
|
|
83
|
-
const remoteEntry = localEntryNodeRid !== undefined && !(0, routing_id_1.routingIdsEqual)(entryNodeRid, localEntryNodeRid);
|
|
84
|
-
if (!remoteEntry) {
|
|
85
|
-
const leaveSource = async () => {
|
|
86
|
-
activation.beginActorTransfer(actor.context.actorId);
|
|
87
|
-
await activation.spot.onLeaveActor(actor);
|
|
88
|
-
activation.commitActorDeparture(actor.context.actorId);
|
|
89
|
-
this.options.actorTransferRuntime?.clearRoutedActor(actor);
|
|
90
|
-
};
|
|
91
|
-
// A Spot actor handler already owns this activation's serial turn.
|
|
92
|
-
// Complete its lifecycle transition inside that turn instead of trying
|
|
93
|
-
// to acquire a second turn for the same owner.
|
|
94
|
-
if (activation.serial.isCurrentTurn) {
|
|
95
|
-
await leaveSource();
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
await activation.serial.execute(leaveSource);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
78
|
const request = runtime_message_1.ZLinkBufferMessage.from(Buffer.alloc(0));
|
|
102
79
|
try {
|
|
103
80
|
const context = actor.context;
|
|
@@ -58,7 +58,6 @@ interface ZLinkSpotActorPacketDispatchOptions {
|
|
|
58
58
|
readonly handled: boolean;
|
|
59
59
|
readonly response?: unknown;
|
|
60
60
|
} | undefined;
|
|
61
|
-
readonly onRemoteBoundSessionTarget?: (actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined) => void;
|
|
62
61
|
readonly onDisconnectActor: (actor: ZLinkActor) => Promise<void>;
|
|
63
62
|
readonly actorResponseSender?: (actor: ZLinkActor, packetName: string, requestSeq: bigint, response: unknown, replyOptions: ZLinkActorResponseOptions, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, signal?: AbortSignal) => Promise<void> | void;
|
|
64
63
|
readonly actorErrorSender?: (actorId: string, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef) => Promise<void> | void;
|
|
@@ -65,14 +65,6 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
65
65
|
header.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
66
66
|
return undefined;
|
|
67
67
|
}
|
|
68
|
-
if (remoteBoundSessionTarget !== undefined &&
|
|
69
|
-
(0, actors_1.actorMessageFollowContext)(fallbackActorRef) === undefined) {
|
|
70
|
-
// A replayed handoff/Message Follow packet keeps its captured Session
|
|
71
|
-
// route solely for that packet's response. It cannot republish the
|
|
72
|
-
// predecessor route over a binding already confirmed by a later Actor
|
|
73
|
-
// owner turn.
|
|
74
|
-
this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
|
|
75
|
-
}
|
|
76
68
|
const routed = await this.options.routeBeforeLocal?.(delivery);
|
|
77
69
|
if (routed?.handled === true) {
|
|
78
70
|
return routed.response;
|
|
@@ -82,7 +74,6 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
82
74
|
return this.handleMissingActor(actorId, parts, header, messageKind, action, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
|
|
83
75
|
}
|
|
84
76
|
if (header.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
85
|
-
this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
|
|
86
77
|
await this.options.onDisconnectActor(actor);
|
|
87
78
|
return undefined;
|
|
88
79
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type ActorRef, type RoutingId } from '../../contracts';
|
|
2
2
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
3
|
-
import type { ZLinkRemoteActorPacketTarget
|
|
3
|
+
import type { ZLinkRemoteActorPacketTarget } from '../actors';
|
|
4
4
|
import type { ZLinkRemoteActorPacketRelay } from './spot-remote-route-codec';
|
|
5
5
|
import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
6
6
|
interface ZLinkSpotActorPacketRelayDispatchOptions {
|
|
7
7
|
readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
|
|
8
8
|
readonly actorPacketTargetProvider?: (actorId: string) => ZLinkRemoteActorPacketTarget | undefined;
|
|
9
|
-
readonly bindRemoteSession?: (actor: ActorRef, sourceNodeRid: RoutingId, sourceSessionRid: RoutingId
|
|
9
|
+
readonly bindRemoteSession?: (actor: ActorRef, sourceNodeRid: RoutingId, sourceSessionRid: RoutingId) => void;
|
|
10
10
|
readonly flowEnabled?: () => boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare class ZLinkSpotActorPacketRelayDispatch {
|
|
@@ -44,13 +44,7 @@ class ZLinkSpotActorPacketRelayDispatch {
|
|
|
44
44
|
if (!(0, routing_id_1.routingIdsEqual)(sourceNodeRid, declaredSourceNodeRid)) {
|
|
45
45
|
throw new Error('Remote actor session binding source did not match the declared session node.');
|
|
46
46
|
}
|
|
47
|
-
this.options.bindRemoteSession(actorRef, declaredSourceNodeRid, binding.sessionRid
|
|
48
|
-
? undefined
|
|
49
|
-
: {
|
|
50
|
-
...remoteBoundSessionTarget,
|
|
51
|
-
sessionNodeRid: declaredSourceNodeRid,
|
|
52
|
-
sessionRid: binding.sessionRid
|
|
53
|
-
});
|
|
47
|
+
this.options.bindRemoteSession(actorRef, declaredSourceNodeRid, binding.sessionRid);
|
|
54
48
|
if ((0, spot_route_replies_1.hasReplyToken)(received.replyToken)) {
|
|
55
49
|
(0, spot_route_replies_1.submitSpotRouteBridgeReply)(received, actorPacketRelay.envelope, {
|
|
56
50
|
ok: true,
|
|
@@ -6,7 +6,7 @@ import { type ZLinkSpotTimerRegistry } from './spot-timer';
|
|
|
6
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
7
7
|
interface ZLinkEntrySpotContextOptions {
|
|
8
8
|
readonly spotId: SpotId;
|
|
9
|
-
readonly objectGeneration:
|
|
9
|
+
readonly objectGeneration: bigint;
|
|
10
10
|
readonly nodeRid: RoutingId;
|
|
11
11
|
readonly handlers: ZLinkSpotHandlerRegistry;
|
|
12
12
|
readonly outbound: ZLinkSpotOutbound;
|
|
@@ -22,7 +22,7 @@ interface ZLinkEntrySpotContextOptions {
|
|
|
22
22
|
interface ZLinkSpotContextOptions {
|
|
23
23
|
readonly meshName: string;
|
|
24
24
|
readonly spotId: SpotId;
|
|
25
|
-
readonly objectGeneration:
|
|
25
|
+
readonly objectGeneration: bigint;
|
|
26
26
|
readonly handlers: ZLinkSpotHandlerRegistry;
|
|
27
27
|
readonly outbound: ZLinkSpotOutbound;
|
|
28
28
|
readonly timers: ZLinkSpotTimerRegistry;
|
|
@@ -29,7 +29,6 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
29
29
|
readonly spotPublisherClient?: ZLinkSpotPublisherClient;
|
|
30
30
|
readonly routedTransport?: ZLinkSpotRoutedTransport;
|
|
31
31
|
readonly spotRouterChannelIdForMesh?: (meshName: string) => string;
|
|
32
|
-
readonly channelMeshNameForChannel?: (channelName: string) => string | undefined;
|
|
33
32
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
34
33
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
35
34
|
readonly runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
|
|
@@ -40,7 +39,7 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
40
39
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
41
40
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
42
41
|
readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
43
|
-
readonly detachedTaskRunner
|
|
42
|
+
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
44
43
|
}
|
|
45
44
|
export declare class ZLinkEntrySpotActivation {
|
|
46
45
|
private readonly options;
|
|
@@ -89,6 +88,7 @@ export declare class ZLinkEntrySpotActivation {
|
|
|
89
88
|
* actor-manager transaction in its admission callback.
|
|
90
89
|
*/
|
|
91
90
|
commitServiceActorJoin(actor: ZLinkActor, handoffBacklog?: readonly ZLinkActorHandoffPacket[], signal?: AbortSignal): Promise<void>;
|
|
91
|
+
executeActor<T>(actorId: string, operation: () => Promise<T>): Promise<T>;
|
|
92
92
|
/**
|
|
93
93
|
* Entry Spot membership does not have an application admission callback.
|
|
94
94
|
* The shared core round-trip therefore accepts a valid returning Actor and
|
|
@@ -40,6 +40,9 @@ class ZLinkEntrySpotActivation {
|
|
|
40
40
|
context;
|
|
41
41
|
constructor(options) {
|
|
42
42
|
this.options = options;
|
|
43
|
+
if (options.detachedTaskRunner === undefined) {
|
|
44
|
+
throw new configuration_1.ZLinkConfigurationException('Entry Spot activation requires a detached task runner.');
|
|
45
|
+
}
|
|
43
46
|
this.serial = new spot_serial_turn_executor_1.ZLinkSpotSerialTurnExecutor(false, options.nativeSpot.routingId);
|
|
44
47
|
this.spotSerialExecutor = new spot_serial_executor_1.ZLinkSpotSerialExecutor(this.serial, contracts_1.ZLinkUserSpotExecutionMode.PerActor, options.nativeSpot.routingId);
|
|
45
48
|
// Entry Spot lifecycle, timers and detached continuations use this serial
|
|
@@ -57,7 +60,7 @@ class ZLinkEntrySpotActivation {
|
|
|
57
60
|
this.workerRuntime = options.workerRuntime ?? new workers_1.ZLinkWorkerRuntime();
|
|
58
61
|
this.context = (0, spot_context_1.createEntrySpotContext)({
|
|
59
62
|
spotId: String(options.nativeSpot.routingId),
|
|
60
|
-
objectGeneration:
|
|
63
|
+
objectGeneration: entrySpotGeneration(options.nativeSpot),
|
|
61
64
|
nodeRid: options.nodeRid,
|
|
62
65
|
handlers: this.handlers,
|
|
63
66
|
outbound: this.outbound,
|
|
@@ -97,7 +100,6 @@ class ZLinkEntrySpotActivation {
|
|
|
97
100
|
registry: this.actorHandlers,
|
|
98
101
|
resolveActor: (targetActorId) => this.options.entryActorRuntime?.resolveActor(targetActorId),
|
|
99
102
|
routeBeforeLocal: (target) => this.options.entryActorRuntime?.routePacket(target.actorId, target.parts, target.returnResponse, target.remoteBoundSessionTarget, target.fallbackActorRef),
|
|
100
|
-
onRemoteBoundSessionTarget: (targetActorId, target) => this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
|
|
101
103
|
onDisconnectActor: (actor) => this.notifyDisconnectActor(actor),
|
|
102
104
|
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(this.options.boundSessionRuntime),
|
|
103
105
|
actorErrorSender: this.options.boundSessionRuntime?.sendActorError.bind(this.options.boundSessionRuntime),
|
|
@@ -179,7 +181,7 @@ class ZLinkEntrySpotActivation {
|
|
|
179
181
|
await cleanup(() => this.actorDispatch?.dispose());
|
|
180
182
|
await cleanup(() => this.timers.dispose());
|
|
181
183
|
await cleanup(() => this.spotSerialExecutor.close());
|
|
182
|
-
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(this.entrySpot));
|
|
184
|
+
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(this.entrySpot, this.options.detachedTaskRunner));
|
|
183
185
|
await cleanup(() => this.options.nativeSpot.dispose());
|
|
184
186
|
if (this.initialized) {
|
|
185
187
|
this.lifecycleMetrics.closed('entry');
|
|
@@ -215,6 +217,9 @@ class ZLinkEntrySpotActivation {
|
|
|
215
217
|
await this.replayActorBacklog(actor, handoffBacklog);
|
|
216
218
|
}
|
|
217
219
|
}
|
|
220
|
+
executeActor(actorId, operation) {
|
|
221
|
+
return this.spotSerialExecutor.executeActor(actorId, operation);
|
|
222
|
+
}
|
|
218
223
|
/**
|
|
219
224
|
* Entry Spot membership does not have an application admission callback.
|
|
220
225
|
* The shared core round-trip therefore accepts a valid returning Actor and
|
|
@@ -235,7 +240,6 @@ class ZLinkEntrySpotActivation {
|
|
|
235
240
|
kind: 'enabled',
|
|
236
241
|
runtime: this.options.actorTransferRuntime
|
|
237
242
|
},
|
|
238
|
-
commitNativeActor: (actor) => this.commitEntryActorTransaction(actor),
|
|
239
243
|
commitTransferredActor: async (actor, backlog) => {
|
|
240
244
|
await this.commitEntryActorTransaction(actor);
|
|
241
245
|
return await this.replayActorBacklog(actor, backlog);
|
|
@@ -243,19 +247,10 @@ class ZLinkEntrySpotActivation {
|
|
|
243
247
|
},
|
|
244
248
|
packets: {
|
|
245
249
|
handle: (delivery) => this.dispatchActorPacket(delivery),
|
|
246
|
-
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid
|
|
250
|
+
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
|
|
247
251
|
if ((0, routing_id_1.routingIdsEqual)(sourceNodeRid, this.options.nativeNode.routingId)) {
|
|
248
252
|
return;
|
|
249
253
|
}
|
|
250
|
-
const target = declaredTarget ??
|
|
251
|
-
this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(sourceNodeRid, sourceSessionRid);
|
|
252
|
-
if (target !== undefined) {
|
|
253
|
-
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(actor.actorId, {
|
|
254
|
-
...target,
|
|
255
|
-
sessionNodeRid: sourceNodeRid,
|
|
256
|
-
sessionRid: sourceSessionRid
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
254
|
this.options.nativeNode.bindRemoteActorSession(actor, sourceNodeRid, sourceSessionRid);
|
|
260
255
|
},
|
|
261
256
|
replyNoBind: (info, parts, result) => this.replyActorNoBind(info, parts, result)
|
|
@@ -327,12 +322,6 @@ function notifyEntryActorJoined(entrySpot, actor) {
|
|
|
327
322
|
const callback = entrySpot.onJoinedActor;
|
|
328
323
|
return callback === undefined ? Promise.resolve() : callback.call(entrySpot, actor);
|
|
329
324
|
}
|
|
330
|
-
function toContextGeneration(generation) {
|
|
331
|
-
if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
332
|
-
throw new configuration_1.ZLinkConfigurationException(`Entry Spot object generation '${generation}' cannot be represented by the Node.js public context.`);
|
|
333
|
-
}
|
|
334
|
-
return Number(generation);
|
|
335
|
-
}
|
|
336
325
|
function entrySpotGeneration(spot) {
|
|
337
326
|
return (spot.lifecycleGeneration ??
|
|
338
327
|
spot.status?.().lifecycleGeneration ??
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotLifecycleMetrics = void 0;
|
|
4
|
+
const runtime_metrics_1 = require("../diagnostics/runtime-metrics");
|
|
4
5
|
class ZLinkSpotLifecycleMetrics {
|
|
5
6
|
metrics;
|
|
6
7
|
constructor(metrics) {
|
|
7
8
|
this.metrics = metrics;
|
|
8
9
|
}
|
|
9
10
|
opened(kind) {
|
|
10
|
-
this.metrics?.change(
|
|
11
|
+
this.metrics?.change(runtime_metrics_1.METRIC_NAMES.SpotCount, 1, { kind });
|
|
11
12
|
}
|
|
12
13
|
closed(kind) {
|
|
13
|
-
this.metrics?.change(
|
|
14
|
+
this.metrics?.change(runtime_metrics_1.METRIC_NAMES.SpotCount, -1, { kind });
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
exports.ZLinkSpotLifecycleMetrics = ZLinkSpotLifecycleMetrics;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { type RoutingId, type SpotId, type SpotRef, type ZLinkSpot, type ZLinkSpotCreateCall, type ZLinkSpotGetOrCreateCall, type ZLinkSpotManager } from '../../contracts';
|
|
2
|
-
import type { ZLinkMessageSerializer } from '../../contracts';
|
|
1
|
+
import { type ZLinkMessageSerializer, type RoutingId, type SpotId, type SpotRef, type ZLinkSpot, type ZLinkSpotCreateCall, type ZLinkSpotGetOrCreateCall, type ZLinkSpotManager } from '../../contracts';
|
|
3
2
|
import type { ZLinkObjectFactoryRegistration } from '../../contracts/Configuration/RegistrationTypes';
|
|
4
|
-
import type { ZLinkUserSpotCreationCoordinator } from '../host/user-spot-creation-coordinator';
|
|
5
|
-
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
6
|
-
import type { DefaultZLinkSpotManager } from './index';
|
|
7
|
-
import type { ServiceUserSpotCloseRecord } from '../foundation/service-stateful-wire-codec';
|
|
8
3
|
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
4
|
+
import type { ServiceUserSpotCloseRecord } from '../foundation/service-stateful-wire-codec';
|
|
5
|
+
import type { ZLinkUserSpotCreationCoordinator } from '../host/user-spot-creation-coordinator';
|
|
9
6
|
import type { ZLinkAuthoritySnapshot } from '../locations/internal-location-contracts';
|
|
7
|
+
import type { DefaultZLinkSpotManager } from './index';
|
|
8
|
+
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
10
9
|
export interface ZLinkPublicSpotManagerOptions {
|
|
11
10
|
readonly local: DefaultZLinkSpotManager;
|
|
12
11
|
readonly coordinator: ZLinkUserSpotCreationCoordinator;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkPublicSpotManager = void 0;
|
|
4
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
5
4
|
const node_crypto_1 = require("node:crypto");
|
|
6
5
|
const contracts_1 = require("../../contracts");
|
|
6
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
7
7
|
const configuration_1 = require("../configuration");
|
|
8
|
-
const creation_payload_codec_1 = require("../messaging/creation-payload-codec");
|
|
9
8
|
const execution_1 = require("../execution");
|
|
9
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
10
|
+
const creation_payload_codec_1 = require("../messaging/creation-payload-codec");
|
|
10
11
|
class ZLinkPublicSpotManager {
|
|
11
12
|
options;
|
|
12
13
|
constructor(options) {
|
|
@@ -208,8 +209,8 @@ function selectFactory(factories, stableType, selectedMesh) {
|
|
|
208
209
|
}
|
|
209
210
|
function requireText(value, label) {
|
|
210
211
|
const bytes = Buffer.byteLength(value);
|
|
211
|
-
if (bytes < 1 || bytes >
|
|
212
|
-
throw invalidConfiguration(`${label} must contain 1
|
|
212
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES || value.includes('\0')) {
|
|
213
|
+
throw invalidConfiguration(`${label} must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes and no NUL.`);
|
|
213
214
|
}
|
|
214
215
|
return value;
|
|
215
216
|
}
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSpotNodeLocationAutoConnectContext = createSpotNodeLocationAutoConnectContext;
|
|
4
4
|
exports.spotNodeAutoConnectCapability = spotNodeAutoConnectCapability;
|
|
5
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
5
6
|
const Values_1 = require("../../contracts/Locations/Values");
|
|
6
7
|
const contracts_1 = require("../../contracts");
|
|
7
8
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
8
9
|
const state_lane_1 = require("../execution/state-lane");
|
|
9
10
|
const routing_id_1 = require("../routing-id");
|
|
11
|
+
const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
|
|
10
12
|
const locations_1 = require("../locations");
|
|
11
13
|
function createSpotNodeLocationAutoConnectContext(runtime, stores, options, events) {
|
|
12
14
|
const leaseTracker = new locations_1.ZLinkOwnerLeaseTracker({
|
|
@@ -67,7 +69,7 @@ function meshDescriptorPeerResolver(runtime) {
|
|
|
67
69
|
nodeRid: descriptor.rid,
|
|
68
70
|
role: contracts_1.ZLinkLocationRole.Router,
|
|
69
71
|
endpoint: descriptor.endpoint,
|
|
70
|
-
weight:
|
|
72
|
+
weight: RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT,
|
|
71
73
|
draining: descriptor.state !== contracts_1.ZLinkFrameworkRuntimeState.Serving,
|
|
72
74
|
value: descriptor.descriptorRevision,
|
|
73
75
|
ownerId: descriptor.ownerId,
|
|
@@ -145,7 +147,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
145
147
|
peer.endpoint === target.endpoint &&
|
|
146
148
|
(target.nodeRid === undefined || String(peer.routingId) === String(target.nodeRid)) &&
|
|
147
149
|
peer.lifecycleGeneration === target.lifecycleGeneration &&
|
|
148
|
-
peer.state ===
|
|
150
|
+
peer.state === service_runtime_contracts_1.MeshPeerRuntimeState.Serving);
|
|
149
151
|
}
|
|
150
152
|
replaceNotRequired(targets) {
|
|
151
153
|
this.node.replaceDiscoveredNotRequiredPeers?.(targets
|
|
@@ -170,40 +172,29 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
prepareConnectCore(key) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
const current = this.connectionIntents.get(key);
|
|
176
|
+
if (current !== undefined)
|
|
177
|
+
return current.connectionIntentId === undefined ? current : undefined;
|
|
175
178
|
const intent = {};
|
|
176
179
|
this.connectionIntents.set(key, intent);
|
|
177
180
|
return intent;
|
|
178
181
|
}
|
|
179
182
|
async connectPeer(target, key, intent) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return accepted;
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
// A discovered endpoint can become unavailable between the store read and
|
|
199
|
-
// the socket connect. Leave the target inactive so the next reconciliation
|
|
200
|
-
// can retry without terminating the host's background runtime.
|
|
201
|
-
await this.lane.run(() => {
|
|
202
|
-
if (this.connectionIntents.get(key) === intent)
|
|
203
|
-
this.connectionIntents.delete(key);
|
|
204
|
-
});
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
183
|
+
const connectionIntentId = await this.node.connectPeer({
|
|
184
|
+
endpoint: target.endpoint,
|
|
185
|
+
expectedRid: target.nodeRid === undefined ? undefined : (0, routing_id_1.toBackendRoutingId)(target.nodeRid),
|
|
186
|
+
expectedSecurityIdentity: toAdmissionSecurityIdentity(target.metadata?.securityIdentity),
|
|
187
|
+
expectedLifecycleGeneration: target.lifecycleGeneration
|
|
188
|
+
});
|
|
189
|
+
const accepted = await this.lane.run(() => {
|
|
190
|
+
if (this.connectionIntents.get(key) !== intent)
|
|
191
|
+
return false;
|
|
192
|
+
intent.connectionIntentId = connectionIntentId;
|
|
193
|
+
return true;
|
|
194
|
+
});
|
|
195
|
+
if (!accepted)
|
|
196
|
+
this.node.removePeerConnection(connectionIntentId);
|
|
197
|
+
return accepted;
|
|
207
198
|
}
|
|
208
199
|
disconnectPeer(target) {
|
|
209
200
|
const key = connectionKey(target);
|