@zlink-systems/framework 0.25.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/Channels/IZLinkFanoutClient.d.ts +0 -6
- 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/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -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 +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- 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 +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- 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 +85 -123
- 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 +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- 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-contracts.d.ts +4 -2
- 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/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- 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 +7 -1
- package/dist/runtime/admission.js +11 -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 +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- 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-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -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 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- 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 -18
- 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.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- 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 +133 -81
- 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 +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- 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/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- 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 +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- 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.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -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 +23 -8
- 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-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- 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 -19
- 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 +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- 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 +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- 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 +19 -14
- package/dist/runtime/host/index.js +234 -175
- 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 +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- 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 +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- 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 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- 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 +79 -27
- 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 +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- 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 +44 -30
- 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 +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- 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 +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- 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 +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- 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 +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- 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 +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- 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 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- 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 +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- 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 +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- 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/session-serial-executor.js +2 -2
- 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/Channels/IZLinkFanoutClient.ts +0 -7
- 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/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- 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 +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- 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 +15 -36
- 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-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- 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 +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- 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 -31
- 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 +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- 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 +175 -106
- 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 +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- 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/listener-records.ts +21 -0
- 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 +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -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 +30 -19
- 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-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- 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 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- 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 +266 -418
- 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 +408 -312
- 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 +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- 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 +1161 -904
- 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 +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- 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 +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- 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 +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- 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 +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- 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 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- 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 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- 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/session-serial-executor.ts +2 -2
- 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/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- 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/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { randomBytes } from 'node:crypto';
|
|
2
|
-
import { setImmediate as yieldToIO } from 'node:timers/promises';
|
|
3
1
|
import {
|
|
4
2
|
decodeStreamWireFrame,
|
|
5
3
|
decodeStreamWireHeader,
|
|
6
4
|
encodeStreamWireFrame,
|
|
7
5
|
encodeStreamWireHeader
|
|
8
6
|
} from '@zlink-systems/stream-wire';
|
|
9
|
-
import { disconnectStreamPeer } from './node-socket-backend-adapter';
|
|
10
|
-
import { ZLinkFrameworkException } from '../../../contracts';
|
|
11
|
-
import { internalFrameworkWireReply } from '../../framework-errors-internal';
|
|
12
7
|
import {
|
|
13
|
-
Message,
|
|
14
8
|
RoutingId as BindingRoutingId,
|
|
9
|
+
ConfigError,
|
|
10
|
+
ConfigResult,
|
|
11
|
+
Message,
|
|
15
12
|
RequestResult,
|
|
16
13
|
SubmitError,
|
|
17
14
|
SubmitResult,
|
|
@@ -19,51 +16,64 @@ import {
|
|
|
19
16
|
type StreamSocket,
|
|
20
17
|
type SubmitResult as SubmitResultValue
|
|
21
18
|
} from '@zlink-systems/zlink';
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
} from '../runtime-values';
|
|
27
|
-
import { ZLinkBufferMessage } from '../runtime-message';
|
|
19
|
+
import { randomBytes } from 'node:crypto';
|
|
20
|
+
import { setImmediate as yieldToIO } from 'node:timers/promises';
|
|
21
|
+
import { type RoutingId, ZLinkFrameworkException } from '../../../contracts';
|
|
22
|
+
|
|
28
23
|
import type { Message as FrameworkMessage } from '../../../contracts/Common/Message';
|
|
29
|
-
import
|
|
30
|
-
import
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
MeshPublisher,
|
|
34
|
-
ReadyBatch,
|
|
35
|
-
ReadyRecord,
|
|
36
|
-
ReceiveBatch,
|
|
37
|
-
ReceiveRecord,
|
|
38
|
-
ServiceSpot,
|
|
39
|
-
StreamSessionActorAuthorityFence,
|
|
40
|
-
StreamSessionService
|
|
41
|
-
} from '../../foundation/service-runtime-contracts';
|
|
24
|
+
import { ZLinkConfigurationException } from '../../../contracts/Configuration/ConfigurationException';
|
|
25
|
+
import { buildAdvertisedEndpoint } from '../../../contracts/Configuration/EndpointNotation';
|
|
26
|
+
import { DEFAULT_ACTIVATION_CONCURRENCY_LIMIT } from '../../../contracts/Configuration/InternalDefaults';
|
|
27
|
+
import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../../contracts/Configuration/Registration';
|
|
42
28
|
import {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
29
|
+
isValidPositiveCapacity,
|
|
30
|
+
isValidPublicWeight,
|
|
31
|
+
ZLINK_DEFAULT_PUBLIC_WEIGHT,
|
|
32
|
+
ZLINK_MAX_CAPACITY,
|
|
33
|
+
ZLINK_MAX_PUBLIC_WEIGHT
|
|
34
|
+
} from '../../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
35
|
+
import { shouldCompactBackingArray } from '../../admission';
|
|
36
|
+
import type { ApplicationJobQueuePort } from '../../application-jobs/contracts';
|
|
37
|
+
import type { ZLinkDispatchErrorReporter } from '../../channels/dispatch-error-reporter';
|
|
38
|
+
import { ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE } from '../../foundation/operation-identity';
|
|
48
39
|
import {
|
|
49
40
|
OperationCancelledError,
|
|
50
41
|
OperationTimeoutError
|
|
51
42
|
} from '../../foundation/operation-registry';
|
|
52
43
|
import {
|
|
53
44
|
RawServiceMeshRuntime,
|
|
45
|
+
RAW_MESH_RECEIVE_TIME_BUDGET_MS,
|
|
54
46
|
type RawServiceRequestResult
|
|
55
47
|
} from '../../foundation/raw-service-mesh-runtime';
|
|
48
|
+
import type { ServiceInstanceActivationRecoveryEnvelope } from '../../foundation/service-instance-activation-recovery-codec';
|
|
49
|
+
import type {
|
|
50
|
+
ServiceMailboxClaim,
|
|
51
|
+
ServiceMailboxDomain,
|
|
52
|
+
ServiceMailboxRecord
|
|
53
|
+
} from '../../foundation/service-mailbox';
|
|
54
|
+
import { encodeServiceMetadataFrame } from '../../foundation/service-metadata-codec';
|
|
56
55
|
import {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
type
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
type MeshOperationId,
|
|
57
|
+
type MeshPeerEntry,
|
|
58
|
+
type MeshPublisher,
|
|
59
|
+
type ReadyBatch,
|
|
60
|
+
type ReadyRecord,
|
|
61
|
+
type ReceiveBatch,
|
|
62
|
+
type ReceiveRecord,
|
|
63
|
+
type ServiceSpot,
|
|
64
|
+
type StreamSessionActorAuthorityFence,
|
|
65
|
+
type StreamSessionService,
|
|
66
|
+
MeshNodeRuntimeState,
|
|
67
|
+
MeshPeerRuntimeState,
|
|
68
|
+
OperationKind,
|
|
69
|
+
ReadyDomain,
|
|
70
|
+
ReadyOwnerKind,
|
|
71
|
+
ReceiveKind,
|
|
72
|
+
StreamSessionRuntimeState
|
|
73
|
+
} from '../../foundation/service-runtime-contracts';
|
|
74
|
+
|
|
75
|
+
import { serviceSessionBindingIngressPortIfRegistered } from '../../foundation/service-session-binding-ingress-port';
|
|
76
|
+
import type { ServiceActorRef, ServiceSpotState } from '../../foundation/service-stateful-registry';
|
|
67
77
|
import {
|
|
68
78
|
ServiceStatefulRuntime,
|
|
69
79
|
statefulMailboxData,
|
|
@@ -71,14 +81,12 @@ import {
|
|
|
71
81
|
type ServiceInstanceApplicationLifecycle,
|
|
72
82
|
type ServicePendingInstanceActivation,
|
|
73
83
|
type ServiceSpotMessageFollowSeal,
|
|
74
|
-
type ServiceUserSpotOperationHandler,
|
|
75
|
-
type ServiceUserSpotOperationResult,
|
|
76
84
|
type ServiceStatefulMailboxData,
|
|
77
85
|
type ServiceStatefulPendingOperation,
|
|
78
|
-
type ServiceStatefulResult
|
|
86
|
+
type ServiceStatefulResult,
|
|
87
|
+
type ServiceUserSpotOperationHandler,
|
|
88
|
+
type ServiceUserSpotOperationResult
|
|
79
89
|
} from '../../foundation/service-stateful-runtime';
|
|
80
|
-
import type { ServiceActorRef, ServiceSpotState } from '../../foundation/service-stateful-registry';
|
|
81
|
-
import { serviceSessionBindingIngressPortIfRegistered } from '../../foundation/service-session-binding-ingress-port';
|
|
82
90
|
import type {
|
|
83
91
|
ServiceActorCreateRecord,
|
|
84
92
|
ServiceDirectSpotRouteFence,
|
|
@@ -89,36 +97,55 @@ import type {
|
|
|
89
97
|
ServiceUserSpotCloseRecord,
|
|
90
98
|
ServiceUserSpotCreateRecord
|
|
91
99
|
} from '../../foundation/service-stateful-wire-codec';
|
|
92
|
-
import { encodeServiceMetadataFrame } from '../../foundation/service-metadata-codec';
|
|
93
|
-
import type { ServiceInstanceActivationRecoveryEnvelope } from '../../foundation/service-instance-activation-recovery-codec';
|
|
94
|
-
import type {
|
|
95
|
-
ServiceMailboxClaim,
|
|
96
|
-
ServiceMailboxDomain,
|
|
97
|
-
ServiceMailboxRecord
|
|
98
|
-
} from '../../foundation/service-mailbox';
|
|
99
100
|
import type {
|
|
100
101
|
ServiceChannelDescriptor,
|
|
101
102
|
ServiceNodeDescriptor
|
|
102
103
|
} from '../../foundation/service-topology-registry';
|
|
103
|
-
import
|
|
104
|
-
import {
|
|
105
|
-
|
|
104
|
+
import { SERVICE_WIRE_COMMAND_OFFSET } from '../../foundation/service-wire-binary-primitives';
|
|
105
|
+
import {
|
|
106
|
+
SERVICE_FRAMEWORK_MULTIPART_CONTENT_TYPE,
|
|
107
|
+
SERVICE_FRAMEWORK_MULTIPART_PACKET_NAME,
|
|
108
|
+
SERVICE_WIRE_REQUIRED_CAPABILITY,
|
|
109
|
+
ServiceWireCommand,
|
|
110
|
+
ServiceWireFrameworkErrorCode
|
|
111
|
+
} from '../../foundation/service-wire-constants.generated';
|
|
112
|
+
import {
|
|
113
|
+
APPLICATION_PAYLOAD_MINIMUM_FIELD_BYTES,
|
|
114
|
+
APPLICATION_PAYLOAD_VERSION,
|
|
115
|
+
decodeApplicationPayloadView,
|
|
116
|
+
encodeMultipartApplicationPayload,
|
|
117
|
+
ServiceWireProtocolError,
|
|
118
|
+
type ServiceApplicationPayload
|
|
119
|
+
} from '../../foundation/service-wire-m6a-codec';
|
|
120
|
+
import { submitToRequestResult } from '../../messaging/submission-result';
|
|
121
|
+
import { internalFrameworkWireReply } from '../../framework-errors-internal';
|
|
106
122
|
import type {
|
|
107
123
|
ZLinkBackendActorRef,
|
|
108
|
-
|
|
109
|
-
ZLinkBackendObjectPlacement
|
|
110
|
-
ZLinkBackendMeshNode
|
|
124
|
+
ZLinkBackendMeshNode,
|
|
125
|
+
ZLinkBackendObjectPlacement
|
|
111
126
|
} from '../contracts';
|
|
112
127
|
import type { ZLinkRawBindingPort } from '../raw-binding-port';
|
|
113
|
-
import
|
|
128
|
+
import { ZLinkBufferMessage } from '../runtime-message';
|
|
129
|
+
import {
|
|
130
|
+
isZLinkBackendResultError,
|
|
131
|
+
ZLinkBackendResultError,
|
|
132
|
+
type ZLinkBackendMessageLike as MessageLike
|
|
133
|
+
} from '../runtime-values';
|
|
134
|
+
import { translateBindingResultError } from './node-backend-adapter-support';
|
|
135
|
+
import { disconnectStreamPeer } from './node-socket-backend-adapter';
|
|
136
|
+
const DEFAULT_NATIVE_ACTIVE_CAPACITY = 10_000;
|
|
137
|
+
const UNSTARTED_DIAGNOSTIC_ENDPOINT = 'inproc://not-started';
|
|
114
138
|
|
|
115
139
|
const MULTIPART_PACKET_NAME = SERVICE_FRAMEWORK_MULTIPART_PACKET_NAME;
|
|
116
140
|
const MULTIPART_CONTENT_TYPE = SERVICE_FRAMEWORK_MULTIPART_CONTENT_TYPE;
|
|
117
141
|
const FATAL_UTF8 = new TextDecoder('utf-8', { fatal: true });
|
|
118
142
|
const MAX_DRAIN_RECORDS = 64;
|
|
119
|
-
// Preserve the existing
|
|
143
|
+
// Preserve the existing route observation/admission/liveness cadence. Only the binding
|
|
120
144
|
// readable handler admits receive work; this timer never probes the socket.
|
|
121
145
|
const MESH_BACKEND_MAINTENANCE_INTERVAL_MS = 1;
|
|
146
|
+
// Spec 08 §4.2 bounds the combined turn. Raw gets one equal share; stateful
|
|
147
|
+
// can use the remaining turn, including time the raw registry did not consume.
|
|
148
|
+
const MESH_BACKEND_RAW_MAINTENANCE_SHARE = 1 / 2;
|
|
122
149
|
/**
|
|
123
150
|
* Conservative Actor Join admission cap for relocation state chunks (spec 15
|
|
124
151
|
* §4.2): a stable lower bound safe on any deployment, never lowered on
|
|
@@ -155,21 +182,32 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
155
182
|
private readyHandler?: (domains: number) => number;
|
|
156
183
|
private maintenanceTimer?: NodeJS.Timeout;
|
|
157
184
|
private pumping = false;
|
|
158
|
-
private readable =
|
|
159
|
-
private readonly onReadable = (): void => {
|
|
160
|
-
this.readable
|
|
185
|
+
private readable = 0;
|
|
186
|
+
private readonly onReadable = (receiveReady: boolean, routeReady: boolean): void => {
|
|
187
|
+
if (receiveReady) this.readable |= 1;
|
|
188
|
+
if (routeReady) this.readable |= 2;
|
|
161
189
|
if (!this.closed && !this.pumping) void this.pump();
|
|
162
190
|
};
|
|
163
191
|
private readonly onMaintenance = (): void => {
|
|
164
192
|
this.maintenanceTimer = undefined;
|
|
193
|
+
if (this.closed) return;
|
|
194
|
+
const nowMs = performance.now();
|
|
195
|
+
const turnDeadlineMs = nowMs + RAW_MESH_RECEIVE_TIME_BUDGET_MS;
|
|
196
|
+
this.runtime?.expireOperations(
|
|
197
|
+
nowMs,
|
|
198
|
+
nowMs + RAW_MESH_RECEIVE_TIME_BUDGET_MS * MESH_BACKEND_RAW_MAINTENANCE_SHARE
|
|
199
|
+
);
|
|
200
|
+
this.stateful?.expireOperations(nowMs, turnDeadlineMs);
|
|
201
|
+
this.scheduleMaintenance();
|
|
165
202
|
void this.pump();
|
|
166
203
|
};
|
|
204
|
+
private readonly onPendingOperationsChanged = (): void => this.scheduleMaintenance();
|
|
167
205
|
private nextPeerIntent = 1n;
|
|
168
206
|
private closed = false;
|
|
169
207
|
private objectRole: ServiceNodeDescriptor['objectRole'] = 'none';
|
|
170
|
-
private placementWeight =
|
|
171
|
-
private activeCapacityLimit =
|
|
172
|
-
private pendingCapacityLimit =
|
|
208
|
+
private placementWeight = ZLINK_DEFAULT_PUBLIC_WEIGHT;
|
|
209
|
+
private activeCapacityLimit: number = DEFAULT_NATIVE_ACTIVE_CAPACITY;
|
|
210
|
+
private pendingCapacityLimit: number = DEFAULT_ACTIVATION_CONCURRENCY_LIMIT;
|
|
173
211
|
private objectCapabilities: readonly string[] = [];
|
|
174
212
|
private maintenanceWave?: string;
|
|
175
213
|
private mailboxRecordDropped?: (record: {
|
|
@@ -349,6 +387,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
349
387
|
throw new Error('MeshNode bind endpoint is not configured.');
|
|
350
388
|
const descriptor = this.createDescriptor();
|
|
351
389
|
const runtime = new RawServiceMeshRuntime({
|
|
390
|
+
onPendingOperationsChanged: this.onPendingOperationsChanged,
|
|
352
391
|
descriptor,
|
|
353
392
|
resolveAdvertisedEndpoint: (boundEndpoint) => this.resolveAdvertisedEndpoint(boundEndpoint),
|
|
354
393
|
bindingPort: this.bindingPort,
|
|
@@ -392,7 +431,8 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
392
431
|
this.stateful = new ServiceStatefulRuntime(
|
|
393
432
|
runtime,
|
|
394
433
|
descriptor.nodeRoutingId,
|
|
395
|
-
descriptor.lifecycleGeneration
|
|
434
|
+
descriptor.lifecycleGeneration,
|
|
435
|
+
this.onPendingOperationsChanged
|
|
396
436
|
);
|
|
397
437
|
if (this.dispatchErrors !== undefined) {
|
|
398
438
|
this.stateful.setDispatchErrorReporter(this.dispatchErrors, this.meshName);
|
|
@@ -441,7 +481,6 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
441
481
|
|
|
442
482
|
close(): void {
|
|
443
483
|
if (this.closed) return;
|
|
444
|
-
this.closed = true;
|
|
445
484
|
if (this.maintenanceTimer !== undefined) clearTimeout(this.maintenanceTimer);
|
|
446
485
|
this.maintenanceTimer = undefined;
|
|
447
486
|
this.stateful?.close();
|
|
@@ -449,6 +488,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
449
488
|
this.runtime?.close();
|
|
450
489
|
this.runtime = undefined;
|
|
451
490
|
this.clearCompletions();
|
|
491
|
+
this.closed = true;
|
|
452
492
|
}
|
|
453
493
|
|
|
454
494
|
addChannelName(name: string): void {
|
|
@@ -508,7 +548,6 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
508
548
|
lifecycleGeneration: options.expectedLifecycleGeneration
|
|
509
549
|
})
|
|
510
550
|
});
|
|
511
|
-
if (nodeRoutingId !== undefined) await runtime.announcePeer(nodeRoutingId);
|
|
512
551
|
return intent;
|
|
513
552
|
}
|
|
514
553
|
|
|
@@ -644,7 +683,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
644
683
|
return await this.requireRuntime().requestService(
|
|
645
684
|
String(targetRid),
|
|
646
685
|
frames.map((frame) => Buffer.from(frame)),
|
|
647
|
-
options?.timeoutMs ??
|
|
686
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
648
687
|
);
|
|
649
688
|
}
|
|
650
689
|
|
|
@@ -656,7 +695,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
656
695
|
const pending = this.requireRuntime().requestToNode(
|
|
657
696
|
String(targetRid),
|
|
658
697
|
encodeMultipartApplicationFrame(parts),
|
|
659
|
-
options?.timeoutMs ??
|
|
698
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
660
699
|
);
|
|
661
700
|
return this.observeCompletion(pending.id, OperationKind.NodeRequest, pending.promise);
|
|
662
701
|
}
|
|
@@ -676,7 +715,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
676
715
|
const pending = this.requireRuntime().requestToChannel(
|
|
677
716
|
channelName,
|
|
678
717
|
encodeMultipartApplicationFrame(parts),
|
|
679
|
-
options?.timeoutMs ??
|
|
718
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
680
719
|
);
|
|
681
720
|
return this.observeCompletion(pending.id, OperationKind.ChannelRequest, pending.promise);
|
|
682
721
|
}
|
|
@@ -725,7 +764,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
725
764
|
source: 1,
|
|
726
765
|
state:
|
|
727
766
|
this.runtime?.isPeerRouteReady(peer.descriptor.nodeRoutingId) === false
|
|
728
|
-
?
|
|
767
|
+
? MeshPeerRuntimeState.Connecting
|
|
729
768
|
: peerStateCode(peer.descriptor.state),
|
|
730
769
|
routingId: peer.descriptor.nodeRoutingId as RoutingId,
|
|
731
770
|
lifecycleGeneration: peer.descriptor.lifecycleGeneration,
|
|
@@ -739,7 +778,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
739
778
|
connectionIntentId:
|
|
740
779
|
findIntent(descriptor.nodeRoutingId, descriptor.advertisedEndpoint)?.id ?? 0n,
|
|
741
780
|
source: 1,
|
|
742
|
-
state:
|
|
781
|
+
state: MeshPeerRuntimeState.NotRequired,
|
|
743
782
|
routingId: descriptor.nodeRoutingId as RoutingId,
|
|
744
783
|
lifecycleGeneration: descriptor.lifecycleGeneration,
|
|
745
784
|
descriptorRevision: descriptor.descriptorRevision,
|
|
@@ -929,17 +968,19 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
929
968
|
stableType: string,
|
|
930
969
|
generation: bigint,
|
|
931
970
|
authorityOwnerGeneration: bigint,
|
|
932
|
-
spotId: string,
|
|
971
|
+
spotId: string | undefined,
|
|
933
972
|
spotGeneration: bigint,
|
|
934
973
|
membershipEpoch: bigint
|
|
935
974
|
): ZLinkBackendActorRef {
|
|
936
|
-
|
|
975
|
+
const stateful = this.requireStateful();
|
|
976
|
+
const entry = spotId === undefined ? stateful.entrySpot().ref : undefined;
|
|
977
|
+
return stateful.restoreActorAuthority(
|
|
937
978
|
actorId,
|
|
938
979
|
stableType,
|
|
939
980
|
generation,
|
|
940
981
|
authorityOwnerGeneration,
|
|
941
|
-
spotId
|
|
942
|
-
spotGeneration,
|
|
982
|
+
entry?.spotId ?? spotId!,
|
|
983
|
+
entry?.generation ?? spotGeneration,
|
|
943
984
|
membershipEpoch
|
|
944
985
|
).ref;
|
|
945
986
|
}
|
|
@@ -1115,13 +1156,15 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1115
1156
|
route: ServiceInstanceRouteFence,
|
|
1116
1157
|
parts: MessageLike | readonly MessageLike[],
|
|
1117
1158
|
sourceSpotId?: string,
|
|
1118
|
-
metadata?: ReadonlyMap<string, string
|
|
1159
|
+
metadata?: ReadonlyMap<string, string>,
|
|
1160
|
+
instanceIntent = false
|
|
1119
1161
|
): Promise<SubmitResult> {
|
|
1120
1162
|
const result = await this.requireStateful().sendToInstanceSpot(
|
|
1121
1163
|
route,
|
|
1122
1164
|
encodeMultipart(parts),
|
|
1123
1165
|
sourceSpotId,
|
|
1124
|
-
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata)
|
|
1166
|
+
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata),
|
|
1167
|
+
instanceIntent
|
|
1125
1168
|
);
|
|
1126
1169
|
return result as SubmitResult;
|
|
1127
1170
|
}
|
|
@@ -1129,9 +1172,10 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1129
1172
|
requestInstanceSpot(
|
|
1130
1173
|
route: ServiceInstanceRouteFence,
|
|
1131
1174
|
parts: MessageLike | readonly MessageLike[],
|
|
1132
|
-
timeoutMs =
|
|
1175
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1133
1176
|
sourceSpotId?: string,
|
|
1134
|
-
metadata?: ReadonlyMap<string, string
|
|
1177
|
+
metadata?: ReadonlyMap<string, string>,
|
|
1178
|
+
instanceIntent = false
|
|
1135
1179
|
): MeshOperationId {
|
|
1136
1180
|
return this.observeStateful(
|
|
1137
1181
|
OperationKind.InstanceSpotRequest,
|
|
@@ -1140,7 +1184,8 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1140
1184
|
encodeMultipart(parts),
|
|
1141
1185
|
timeoutMs,
|
|
1142
1186
|
sourceSpotId,
|
|
1143
|
-
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata)
|
|
1187
|
+
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata),
|
|
1188
|
+
instanceIntent
|
|
1144
1189
|
)
|
|
1145
1190
|
);
|
|
1146
1191
|
}
|
|
@@ -1148,7 +1193,9 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1148
1193
|
actorLookup(actorId: string) {
|
|
1149
1194
|
const actor = this.requireStateful().actor(actorId);
|
|
1150
1195
|
if (actor === undefined) {
|
|
1151
|
-
|
|
1196
|
+
const error = new ConfigError(ConfigResult.NotFound);
|
|
1197
|
+
error.message = `Actor '${actorId}' was not found.`;
|
|
1198
|
+
throw error;
|
|
1152
1199
|
}
|
|
1153
1200
|
return {
|
|
1154
1201
|
actor: actor.ref,
|
|
@@ -1158,14 +1205,21 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1158
1205
|
};
|
|
1159
1206
|
}
|
|
1160
1207
|
|
|
1161
|
-
lookupRemoteActor(
|
|
1208
|
+
lookupRemoteActor(
|
|
1209
|
+
targetNodeRid: unknown,
|
|
1210
|
+
actorId: string,
|
|
1211
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1212
|
+
): MeshOperationId {
|
|
1162
1213
|
return this.observeStateful(
|
|
1163
1214
|
OperationKind.ActorLookup,
|
|
1164
1215
|
this.requireStateful().lookupRemoteActor(String(targetNodeRid), actorId, timeoutMs)
|
|
1165
1216
|
);
|
|
1166
1217
|
}
|
|
1167
1218
|
|
|
1168
|
-
destroyActor(
|
|
1219
|
+
destroyActor(
|
|
1220
|
+
actor: ZLinkBackendActorRef,
|
|
1221
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1222
|
+
): MeshOperationId {
|
|
1169
1223
|
return this.observeStateful(
|
|
1170
1224
|
OperationKind.ActorDestroy,
|
|
1171
1225
|
this.requireStateful().destroyActor(actor, timeoutMs)
|
|
@@ -1178,7 +1232,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1178
1232
|
targetSpotId: unknown,
|
|
1179
1233
|
targetSpotGeneration: bigint,
|
|
1180
1234
|
request: ServiceApplicationPayload,
|
|
1181
|
-
timeoutMs =
|
|
1235
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1182
1236
|
): MeshOperationId {
|
|
1183
1237
|
return this.observeStateful(
|
|
1184
1238
|
OperationKind.ActorJoin,
|
|
@@ -1205,7 +1259,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1205
1259
|
readonly ownerLeaseGeneration: bigint;
|
|
1206
1260
|
},
|
|
1207
1261
|
local: { readonly phase: 'admission'; readonly transferId: string },
|
|
1208
|
-
timeoutMs =
|
|
1262
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1209
1263
|
): MeshOperationId {
|
|
1210
1264
|
return this.observeStateful(
|
|
1211
1265
|
OperationKind.ActorJoin,
|
|
@@ -1226,7 +1280,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1226
1280
|
actor: ZLinkBackendActorRef,
|
|
1227
1281
|
targetNodeRid: unknown,
|
|
1228
1282
|
request: ServiceApplicationPayload,
|
|
1229
|
-
timeoutMs =
|
|
1283
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1230
1284
|
): MeshOperationId {
|
|
1231
1285
|
const target = String(targetNodeRid);
|
|
1232
1286
|
return this.observeStateful(
|
|
@@ -1245,7 +1299,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1245
1299
|
readonly ownerLeaseGeneration: bigint;
|
|
1246
1300
|
},
|
|
1247
1301
|
local: { readonly phase: 'admission'; readonly transferId: string },
|
|
1248
|
-
timeoutMs =
|
|
1302
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1249
1303
|
): MeshOperationId {
|
|
1250
1304
|
const target = String(targetNodeRid);
|
|
1251
1305
|
return this.observeStateful(
|
|
@@ -1285,7 +1339,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1285
1339
|
this.peerGeneration(String(actor.nodeRid)),
|
|
1286
1340
|
actor.generation,
|
|
1287
1341
|
encodeMultipart(parts),
|
|
1288
|
-
options?.timeoutMs ??
|
|
1342
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
1289
1343
|
)
|
|
1290
1344
|
);
|
|
1291
1345
|
}
|
|
@@ -1317,7 +1371,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1317
1371
|
this.peerGeneration(String(target.nodeRid)),
|
|
1318
1372
|
target.generation,
|
|
1319
1373
|
encodeMultipart(parts),
|
|
1320
|
-
options?.timeoutMs ??
|
|
1374
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1321
1375
|
source
|
|
1322
1376
|
)
|
|
1323
1377
|
);
|
|
@@ -1327,21 +1381,19 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1327
1381
|
actor: ZLinkBackendActorRef,
|
|
1328
1382
|
expectedBindingGeneration: bigint,
|
|
1329
1383
|
parts: MessageLike | readonly MessageLike[],
|
|
1330
|
-
_flags?: number
|
|
1331
|
-
actorFence?: ZLinkBackendActorSessionSendFence
|
|
1384
|
+
_flags?: number
|
|
1332
1385
|
): Promise<SubmitResultValue> {
|
|
1333
1386
|
return (await this.requireStateful().sendBoundSession(
|
|
1334
1387
|
actor,
|
|
1335
1388
|
expectedBindingGeneration,
|
|
1336
|
-
encodeMultipart(parts)
|
|
1337
|
-
actorFence
|
|
1389
|
+
encodeMultipart(parts)
|
|
1338
1390
|
)) as SubmitResultValue;
|
|
1339
1391
|
}
|
|
1340
1392
|
|
|
1341
1393
|
closeActorBoundSession(
|
|
1342
1394
|
actor: ZLinkBackendActorRef,
|
|
1343
1395
|
expectedBindingGeneration: bigint,
|
|
1344
|
-
timeoutMs =
|
|
1396
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1345
1397
|
): MeshOperationId {
|
|
1346
1398
|
const binding = this.requireStateful().registry.binding(actor);
|
|
1347
1399
|
if (binding === undefined) {
|
|
@@ -1361,7 +1413,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1361
1413
|
leaveActor(
|
|
1362
1414
|
actor: ZLinkBackendActorRef,
|
|
1363
1415
|
expectedMembershipEpoch: bigint,
|
|
1364
|
-
timeoutMs =
|
|
1416
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1365
1417
|
): MeshOperationId {
|
|
1366
1418
|
return this.observeStateful(
|
|
1367
1419
|
OperationKind.ActorLeave,
|
|
@@ -1445,7 +1497,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1445
1497
|
nodeRoutingId: this.routingId,
|
|
1446
1498
|
lifecycleGeneration: this.lifecycleGeneration,
|
|
1447
1499
|
descriptorRevision: 1n,
|
|
1448
|
-
advertisedEndpoint: this.bindEndpoint ??
|
|
1500
|
+
advertisedEndpoint: this.bindEndpoint ?? UNSTARTED_DIAGNOSTIC_ENDPOINT,
|
|
1449
1501
|
channels,
|
|
1450
1502
|
state: 'preparing',
|
|
1451
1503
|
// Plaintext RouteMesh peers use the shared default admission identity.
|
|
@@ -1473,27 +1525,33 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1473
1525
|
}
|
|
1474
1526
|
|
|
1475
1527
|
private scheduleMaintenance(): void {
|
|
1476
|
-
if (this.closed
|
|
1477
|
-
this.maintenanceTimer
|
|
1528
|
+
if (this.closed) return;
|
|
1529
|
+
this.maintenanceTimer ??= setTimeout(this.onMaintenance, MESH_BACKEND_MAINTENANCE_INTERVAL_MS);
|
|
1530
|
+
const pending =
|
|
1531
|
+
(this.runtime?.pendingOperationCount ?? 0) + (this.stateful?.pendingOperationCount ?? 0) > 0;
|
|
1532
|
+
if (pending === this.maintenanceTimer.hasRef()) return;
|
|
1533
|
+
if (pending) {
|
|
1534
|
+
this.maintenanceTimer.ref();
|
|
1535
|
+
} else {
|
|
1536
|
+
this.maintenanceTimer.unref();
|
|
1537
|
+
}
|
|
1478
1538
|
}
|
|
1479
1539
|
|
|
1480
1540
|
private async pump(): Promise<void> {
|
|
1481
1541
|
if (this.isClosed() || this.pumping) return;
|
|
1482
1542
|
this.pumping = true;
|
|
1483
|
-
if (this.maintenanceTimer !== undefined) clearTimeout(this.maintenanceTimer);
|
|
1484
|
-
this.maintenanceTimer = undefined;
|
|
1485
1543
|
try {
|
|
1486
1544
|
do {
|
|
1487
|
-
const
|
|
1488
|
-
this.readable =
|
|
1489
|
-
const more = await this.requireRuntime().pumpBatch(
|
|
1545
|
+
const ready = this.readable;
|
|
1546
|
+
this.readable = 0;
|
|
1547
|
+
const more = await this.requireRuntime().pumpBatch((ready & 1) !== 0, (ready & 2) !== 0);
|
|
1490
1548
|
if (more) {
|
|
1491
1549
|
// Yield only after actual progress, retaining readiness across the
|
|
1492
1550
|
// existing batch limits until receive reports no data.
|
|
1493
|
-
this.readable
|
|
1551
|
+
this.readable |= 1;
|
|
1494
1552
|
await yieldToIO();
|
|
1495
1553
|
}
|
|
1496
|
-
} while (!this.closed && this.readable);
|
|
1554
|
+
} while (!this.closed && this.readable !== 0);
|
|
1497
1555
|
} finally {
|
|
1498
1556
|
this.pumping = false;
|
|
1499
1557
|
this.scheduleMaintenance();
|
|
@@ -1524,7 +1582,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1524
1582
|
const id = { high: 1n, low };
|
|
1525
1583
|
void promise.then(
|
|
1526
1584
|
(result) => this.enqueueCompletion(id, operationKind, result),
|
|
1527
|
-
(error) => this.enqueueCompletion(id, operationKind,
|
|
1585
|
+
(error) => this.enqueueCompletion(id, operationKind, requestFailureResult(error))
|
|
1528
1586
|
);
|
|
1529
1587
|
return id;
|
|
1530
1588
|
}
|
|
@@ -1533,10 +1591,10 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1533
1591
|
operationKind: number,
|
|
1534
1592
|
pending: ServiceStatefulPendingOperation
|
|
1535
1593
|
): MeshOperationId {
|
|
1536
|
-
const id = { high:
|
|
1594
|
+
const id = { high: ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE, low: pending.id };
|
|
1537
1595
|
void pending.promise.then(
|
|
1538
1596
|
(result) => this.enqueueCompletion(id, operationKind, result),
|
|
1539
|
-
(error) => this.enqueueCompletion(id, operationKind,
|
|
1597
|
+
(error) => this.enqueueCompletion(id, operationKind, requestFailureResult(error))
|
|
1540
1598
|
);
|
|
1541
1599
|
return id;
|
|
1542
1600
|
}
|
|
@@ -1584,7 +1642,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1584
1642
|
this.completionCount -= 1;
|
|
1585
1643
|
if (this.completionCount === 0) {
|
|
1586
1644
|
this.clearCompletions();
|
|
1587
|
-
} else if (this.completionHead
|
|
1645
|
+
} else if (shouldCompactBackingArray(this.completionHead, this.completions.length)) {
|
|
1588
1646
|
this.completions.splice(0, this.completionHead);
|
|
1589
1647
|
this.completionHead = 0;
|
|
1590
1648
|
}
|
|
@@ -1740,7 +1798,7 @@ class RawServiceSpot implements ServiceSpot {
|
|
|
1740
1798
|
this.state,
|
|
1741
1799
|
routeFence,
|
|
1742
1800
|
parts,
|
|
1743
|
-
options?.timeoutMs ??
|
|
1801
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
1744
1802
|
);
|
|
1745
1803
|
}
|
|
1746
1804
|
|
|
@@ -1816,7 +1874,7 @@ function entrySpotFenceVersion(generation: bigint): string {
|
|
|
1816
1874
|
}
|
|
1817
1875
|
|
|
1818
1876
|
class RawStreamSessionService implements StreamSessionService {
|
|
1819
|
-
private state =
|
|
1877
|
+
private state: StreamSessionRuntimeState = StreamSessionRuntimeState.Created;
|
|
1820
1878
|
private closed = false;
|
|
1821
1879
|
private readonly sessionTargets = new Map<string, RoutingId>();
|
|
1822
1880
|
|
|
@@ -1831,7 +1889,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1831
1889
|
|
|
1832
1890
|
start(): void {
|
|
1833
1891
|
if (this.closed) throw new Error('STREAM session service is closed.');
|
|
1834
|
-
this.state =
|
|
1892
|
+
this.state = StreamSessionRuntimeState.Started;
|
|
1835
1893
|
}
|
|
1836
1894
|
|
|
1837
1895
|
shutdown(_timeoutMs: number): RequestResultValue {
|
|
@@ -1842,7 +1900,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1842
1900
|
close(): void {
|
|
1843
1901
|
if (this.closed) return;
|
|
1844
1902
|
this.closed = true;
|
|
1845
|
-
this.state =
|
|
1903
|
+
this.state = StreamSessionRuntimeState.Closed;
|
|
1846
1904
|
this.sessionTargets.clear();
|
|
1847
1905
|
}
|
|
1848
1906
|
|
|
@@ -1859,7 +1917,11 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1859
1917
|
};
|
|
1860
1918
|
}
|
|
1861
1919
|
|
|
1862
|
-
lookupActor(
|
|
1920
|
+
lookupActor(
|
|
1921
|
+
targetNodeRid: RoutingId,
|
|
1922
|
+
actorId: string,
|
|
1923
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1924
|
+
): MeshOperationId {
|
|
1863
1925
|
this.requireStarted();
|
|
1864
1926
|
return this.observe(
|
|
1865
1927
|
OperationKind.ActorLookup,
|
|
@@ -1870,7 +1932,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1870
1932
|
bindActor(
|
|
1871
1933
|
sessionRid: RoutingId,
|
|
1872
1934
|
actor: ServiceActorRef,
|
|
1873
|
-
timeoutMs =
|
|
1935
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1874
1936
|
onBindingReplaced?: (
|
|
1875
1937
|
actorId: string,
|
|
1876
1938
|
retiredSession: ServiceRetiredBoundSessionRouteFence,
|
|
@@ -1890,7 +1952,6 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1890
1952
|
(targetSessionRid, payloadFrame) =>
|
|
1891
1953
|
this.deliver(targetSessionRid, actor.actorId, payloadFrame),
|
|
1892
1954
|
onBindingReplaced,
|
|
1893
|
-
serviceSessionBindingIngressPortIfRegistered(this),
|
|
1894
1955
|
actorAuthority
|
|
1895
1956
|
)
|
|
1896
1957
|
);
|
|
@@ -1900,7 +1961,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1900
1961
|
sessionRid: RoutingId,
|
|
1901
1962
|
actor: ServiceActorRef,
|
|
1902
1963
|
expectedBindingGeneration: bigint,
|
|
1903
|
-
timeoutMs =
|
|
1964
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1904
1965
|
): MeshOperationId {
|
|
1905
1966
|
this.requireStarted();
|
|
1906
1967
|
return this.observe(
|
|
@@ -1973,7 +2034,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1973
2034
|
}
|
|
1974
2035
|
|
|
1975
2036
|
private requireStarted(): void {
|
|
1976
|
-
if (this.state !==
|
|
2037
|
+
if (this.state !== StreamSessionRuntimeState.Started || this.closed) {
|
|
1977
2038
|
throw new Error('STREAM session service is not started.');
|
|
1978
2039
|
}
|
|
1979
2040
|
}
|
|
@@ -2215,7 +2276,7 @@ function decodeMultipartRecord(
|
|
|
2215
2276
|
};
|
|
2216
2277
|
}
|
|
2217
2278
|
const header = record.parts[0]!;
|
|
2218
|
-
const command = header[
|
|
2279
|
+
const command = header[SERVICE_WIRE_COMMAND_OFFSET]!;
|
|
2219
2280
|
const payloadFrame = record.parts[1]!;
|
|
2220
2281
|
const application = decodeApplicationEnvelope(payloadFrame);
|
|
2221
2282
|
const channelName = record.owner.startsWith('channel:')
|
|
@@ -2226,11 +2287,11 @@ function decodeMultipartRecord(
|
|
|
2226
2287
|
? { high: 0n, low: 0n }
|
|
2227
2288
|
: { high: 1n, low: record.correlation };
|
|
2228
2289
|
const kind =
|
|
2229
|
-
command ===
|
|
2290
|
+
command === ServiceWireCommand.nodeSend
|
|
2230
2291
|
? ReceiveKind.NodeSend
|
|
2231
|
-
: command ===
|
|
2292
|
+
: command === ServiceWireCommand.nodeRequest
|
|
2232
2293
|
? ReceiveKind.NodeRequest
|
|
2233
|
-
: command ===
|
|
2294
|
+
: command === ServiceWireCommand.channelSend
|
|
2234
2295
|
? ReceiveKind.ChannelSend
|
|
2235
2296
|
: ReceiveKind.ChannelRequest;
|
|
2236
2297
|
const operationKind =
|
|
@@ -2287,7 +2348,7 @@ function decodeStatefulRecord(
|
|
|
2287
2348
|
const operationId =
|
|
2288
2349
|
record.correlation === undefined
|
|
2289
2350
|
? { high: 0n, low: 0n }
|
|
2290
|
-
: { high:
|
|
2351
|
+
: { high: ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE, low: record.correlation };
|
|
2291
2352
|
const ingressLifecycle = receiveIngressLifecycle(record);
|
|
2292
2353
|
return {
|
|
2293
2354
|
kind: stateful.receiveKind,
|
|
@@ -2319,12 +2380,18 @@ function decodeStatefulRecord(
|
|
|
2319
2380
|
: decodeMultipart(application.payload),
|
|
2320
2381
|
...(stateful.isPending === undefined ? {} : { isPending: stateful.isPending }),
|
|
2321
2382
|
...(stateful.deadlineUnixMs === undefined ? {} : { deadlineUnixMs: stateful.deadlineUnixMs }),
|
|
2383
|
+
...(stateful.activationRecord === undefined
|
|
2384
|
+
? {}
|
|
2385
|
+
: { activationRecord: stateful.activationRecord }),
|
|
2322
2386
|
...(stateful.messageFollowOrigin === undefined
|
|
2323
2387
|
? {}
|
|
2324
2388
|
: { messageFollowOrigin: stateful.messageFollowOrigin }),
|
|
2325
2389
|
...(stateful.onTerminalCompletion === undefined
|
|
2326
2390
|
? {}
|
|
2327
2391
|
: { onTerminalCompletion: stateful.onTerminalCompletion }),
|
|
2392
|
+
...(stateful.onHandlerTurnStarted === undefined
|
|
2393
|
+
? {}
|
|
2394
|
+
: { onHandlerTurnStarted: stateful.onHandlerTurnStarted }),
|
|
2328
2395
|
reply(parts) {
|
|
2329
2396
|
if (stateful.reply === undefined) return SubmitResult.InvalidState;
|
|
2330
2397
|
return stateful.reply(RequestResult.Ok, 0, encodeMultipart(parts))
|
|
@@ -2430,38 +2497,45 @@ function readyDomain(domain: ServiceMailboxDomain): number {
|
|
|
2430
2497
|
}
|
|
2431
2498
|
|
|
2432
2499
|
/**
|
|
2433
|
-
*
|
|
2434
|
-
* terminal.
|
|
2435
|
-
*
|
|
2436
|
-
*
|
|
2437
|
-
*
|
|
2500
|
+
* The one classification of a failed node/channel/stateful request into its
|
|
2501
|
+
* completion terminal. A binding REQUEST result is Core's decision and is kept
|
|
2502
|
+
* as is; a submit failure is classified from its submission or completion phase.
|
|
2503
|
+
* A reply that could not be decoded is a protocol
|
|
2504
|
+
* failure (spec 32-framework-error-model:91-92). The failure code is a wire
|
|
2505
|
+
* code, so a Core result carries 0.
|
|
2438
2506
|
*/
|
|
2439
|
-
export function
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
if (error instanceof ZLinkFrameworkException) {
|
|
2450
|
-
return internalFrameworkWireReply(error);
|
|
2451
|
-
}
|
|
2452
|
-
if (error instanceof OperationTimeoutError) {
|
|
2453
|
-
return { terminalResult: RequestResult.TimedOut, failureCode: 0 };
|
|
2507
|
+
export function requestFailureResult(error: unknown): RawServiceRequestResult {
|
|
2508
|
+
const failure = translateBindingResultError(error);
|
|
2509
|
+
if (isZLinkBackendResultError(failure)) {
|
|
2510
|
+
return {
|
|
2511
|
+
terminalResult:
|
|
2512
|
+
failure.operation === 'request'
|
|
2513
|
+
? failure.result
|
|
2514
|
+
: submitToRequestResult(failure.result, failure.phase),
|
|
2515
|
+
failureCode: 0
|
|
2516
|
+
};
|
|
2454
2517
|
}
|
|
2455
|
-
|
|
2518
|
+
// requestProtocolError(16): the schema terminal-failure-integrity rule
|
|
2519
|
+
// forbids a typed terminal (104) with failure none.
|
|
2520
|
+
if (failure instanceof ServiceWireProtocolError) {
|
|
2456
2521
|
return {
|
|
2457
|
-
terminalResult:
|
|
2458
|
-
failureCode:
|
|
2522
|
+
terminalResult: RequestResult.ProtocolError,
|
|
2523
|
+
failureCode: ServiceWireFrameworkErrorCode.requestProtocolError
|
|
2459
2524
|
};
|
|
2460
2525
|
}
|
|
2461
|
-
if (
|
|
2526
|
+
if (failure instanceof ZLinkFrameworkException) {
|
|
2527
|
+
return internalFrameworkWireReply(failure);
|
|
2528
|
+
}
|
|
2529
|
+
if (failure instanceof OperationTimeoutError) {
|
|
2530
|
+
return { terminalResult: RequestResult.TimedOut, failureCode: 0 };
|
|
2531
|
+
}
|
|
2532
|
+
if (failure instanceof OperationCancelledError) {
|
|
2462
2533
|
return { terminalResult: RequestResult.NotConnected, failureCode: 0 };
|
|
2463
2534
|
}
|
|
2464
|
-
return {
|
|
2535
|
+
return {
|
|
2536
|
+
terminalResult: RequestResult.InternalError,
|
|
2537
|
+
failureCode: ServiceWireFrameworkErrorCode.requestFailed
|
|
2538
|
+
};
|
|
2465
2539
|
}
|
|
2466
2540
|
|
|
2467
2541
|
function encodeMultipart(parts: MessageLike | readonly MessageLike[]) {
|
|
@@ -2500,7 +2574,10 @@ function encodeMultipartApplicationFrame(parts: MessageLike | readonly MessageLi
|
|
|
2500
2574
|
|
|
2501
2575
|
function decodeApplicationEnvelope(frame: Uint8Array) {
|
|
2502
2576
|
const bytes = Buffer.from(frame.buffer, frame.byteOffset, frame.byteLength);
|
|
2503
|
-
if (
|
|
2577
|
+
if (
|
|
2578
|
+
bytes.length < APPLICATION_PAYLOAD_MINIMUM_FIELD_BYTES ||
|
|
2579
|
+
bytes[0] !== APPLICATION_PAYLOAD_VERSION
|
|
2580
|
+
) {
|
|
2504
2581
|
throw new ServiceWireProtocolError('Invalid application envelope.');
|
|
2505
2582
|
}
|
|
2506
2583
|
const bodyLength = bytes.readUInt32BE(1);
|
|
@@ -2598,22 +2675,35 @@ function requireRawReadyBatch(batch: ReadyBatch): RawReadyBatch {
|
|
|
2598
2675
|
return batch;
|
|
2599
2676
|
}
|
|
2600
2677
|
|
|
2601
|
-
function stateCode(state: ServiceNodeDescriptor['state']):
|
|
2602
|
-
|
|
2678
|
+
function stateCode(state: ServiceNodeDescriptor['state']): MeshNodeRuntimeState {
|
|
2679
|
+
switch (state) {
|
|
2680
|
+
case 'preparing':
|
|
2681
|
+
return MeshNodeRuntimeState.Preparing;
|
|
2682
|
+
case 'serving':
|
|
2683
|
+
return MeshNodeRuntimeState.Serving;
|
|
2684
|
+
case 'retiring':
|
|
2685
|
+
return MeshNodeRuntimeState.Retiring;
|
|
2686
|
+
case 'draining':
|
|
2687
|
+
return MeshNodeRuntimeState.Draining;
|
|
2688
|
+
case 'stopped':
|
|
2689
|
+
return MeshNodeRuntimeState.Stopped;
|
|
2690
|
+
case 'error':
|
|
2691
|
+
return MeshNodeRuntimeState.Error;
|
|
2692
|
+
}
|
|
2603
2693
|
}
|
|
2604
2694
|
|
|
2605
2695
|
function peerStateCode(state: ServiceNodeDescriptor['state']): number {
|
|
2606
2696
|
switch (state) {
|
|
2607
2697
|
case 'preparing':
|
|
2608
|
-
return
|
|
2698
|
+
return MeshPeerRuntimeState.Preparing;
|
|
2609
2699
|
case 'serving':
|
|
2610
2700
|
case 'retiring':
|
|
2611
|
-
return
|
|
2701
|
+
return MeshPeerRuntimeState.Serving;
|
|
2612
2702
|
case 'draining':
|
|
2613
|
-
return
|
|
2703
|
+
return MeshPeerRuntimeState.Draining;
|
|
2614
2704
|
case 'stopped':
|
|
2615
2705
|
case 'error':
|
|
2616
|
-
return
|
|
2706
|
+
return MeshPeerRuntimeState.Closed;
|
|
2617
2707
|
}
|
|
2618
2708
|
}
|
|
2619
2709
|
|
|
@@ -2626,15 +2716,15 @@ function createLifecycleGeneration(): bigint {
|
|
|
2626
2716
|
}
|
|
2627
2717
|
|
|
2628
2718
|
function requirePositivePlacementValue(value: number, name: string): number {
|
|
2629
|
-
if (!
|
|
2630
|
-
throw new RangeError(`${name} must be an integer in 1
|
|
2719
|
+
if (!isValidPositiveCapacity(value)) {
|
|
2720
|
+
throw new RangeError(`${name} must be an integer in 1..${ZLINK_MAX_CAPACITY}.`);
|
|
2631
2721
|
}
|
|
2632
2722
|
return value;
|
|
2633
2723
|
}
|
|
2634
2724
|
|
|
2635
2725
|
function requirePublicWeight(value: number, name: string): number {
|
|
2636
|
-
if (!
|
|
2637
|
-
throw new RangeError(`${name} must be an integer in 0
|
|
2726
|
+
if (!isValidPublicWeight(value)) {
|
|
2727
|
+
throw new RangeError(`${name} must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`);
|
|
2638
2728
|
}
|
|
2639
2729
|
return value;
|
|
2640
2730
|
}
|