@zlink-systems/framework 0.21.0 → 0.23.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/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/contracts/index.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +46 -42
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +245 -228
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +209 -220
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +2 -2
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +142 -134
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +77 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +218 -206
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +107 -79
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +595 -564
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -4,6 +4,7 @@ exports.ZLinkNodeRawMeshBackend = void 0;
|
|
|
4
4
|
exports.genericOperationFailure = genericOperationFailure;
|
|
5
5
|
const node_crypto_1 = require("node:crypto");
|
|
6
6
|
const promises_1 = require("node:timers/promises");
|
|
7
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
7
8
|
const node_socket_backend_adapter_1 = require("./node-socket-backend-adapter");
|
|
8
9
|
const contracts_1 = require("../../../contracts");
|
|
9
10
|
const framework_errors_internal_1 = require("../../framework-errors-internal");
|
|
@@ -80,6 +81,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
80
81
|
mailboxRecordDropped;
|
|
81
82
|
protocolError;
|
|
82
83
|
messageFollowHandler;
|
|
84
|
+
dispatchErrors;
|
|
83
85
|
peerDisconnectedHandlers = new Set();
|
|
84
86
|
constructor(meshName, routingId, bindingPort, applicationJobQueue, applicationJobReceiveFlowFailureSink, peerAdmissionSealed) {
|
|
85
87
|
this.meshName = meshName;
|
|
@@ -108,6 +110,10 @@ class ZLinkNodeRawMeshBackend {
|
|
|
108
110
|
this.mailboxRecordDropped = handler;
|
|
109
111
|
this.stateful?.setMailboxDropHandler(handler);
|
|
110
112
|
}
|
|
113
|
+
setDispatchErrorReporter(reporter) {
|
|
114
|
+
this.dispatchErrors = reporter;
|
|
115
|
+
this.stateful?.setDispatchErrorReporter(reporter, this.meshName);
|
|
116
|
+
}
|
|
111
117
|
setProtocolErrorHandler(handler) {
|
|
112
118
|
this.protocolError = handler;
|
|
113
119
|
}
|
|
@@ -117,12 +123,12 @@ class ZLinkNodeRawMeshBackend {
|
|
|
117
123
|
selectObjectPlacement(stableType) {
|
|
118
124
|
const runtime = this.requireRuntime();
|
|
119
125
|
const localNodeRid = runtime.topology.localDescriptor().nodeRoutingId;
|
|
120
|
-
const status = runtime.topology.objectPlacementStatus(stableType, candidate => candidate.nodeRoutingId === localNodeRid
|
|
121
|
-
|
|
126
|
+
const status = runtime.topology.objectPlacementStatus(stableType, (candidate) => candidate.nodeRoutingId === localNodeRid ||
|
|
127
|
+
runtime.isPeerRouteReady(candidate.nodeRoutingId));
|
|
122
128
|
if (status !== 'available')
|
|
123
129
|
return { kind: status };
|
|
124
|
-
const descriptor = runtime.topology.selectObjectPlacement(stableType, candidate => candidate.nodeRoutingId === localNodeRid
|
|
125
|
-
|
|
130
|
+
const descriptor = runtime.topology.selectObjectPlacement(stableType, (candidate) => candidate.nodeRoutingId === localNodeRid ||
|
|
131
|
+
runtime.isPeerRouteReady(candidate.nodeRoutingId));
|
|
126
132
|
return descriptor === undefined
|
|
127
133
|
? { kind: 'unavailable' }
|
|
128
134
|
: {
|
|
@@ -171,7 +177,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
171
177
|
const descriptor = this.createDescriptor();
|
|
172
178
|
const runtime = new raw_service_mesh_runtime_1.RawServiceMeshRuntime({
|
|
173
179
|
descriptor,
|
|
174
|
-
resolveAdvertisedEndpoint: boundEndpoint => this.resolveAdvertisedEndpoint(boundEndpoint),
|
|
180
|
+
resolveAdvertisedEndpoint: (boundEndpoint) => this.resolveAdvertisedEndpoint(boundEndpoint),
|
|
175
181
|
bindingPort: this.bindingPort,
|
|
176
182
|
applicationJobQueue: this.requireApplicationJobQueue(),
|
|
177
183
|
peerAdmissionSealed: this.peerAdmissionSealed,
|
|
@@ -185,17 +191,16 @@ class ZLinkNodeRawMeshBackend {
|
|
|
185
191
|
}),
|
|
186
192
|
onPeerNotRequired: (nodeRoutingId, endpoint) => {
|
|
187
193
|
for (const [intent, peer] of this.peerIntents) {
|
|
188
|
-
if ((peer.nodeRoutingId === undefined
|
|
189
|
-
|
|
190
|
-
&& peer.endpoint === endpoint) {
|
|
194
|
+
if ((peer.nodeRoutingId === undefined || peer.nodeRoutingId === nodeRoutingId) &&
|
|
195
|
+
peer.endpoint === endpoint) {
|
|
191
196
|
this.peerIntents.delete(intent);
|
|
192
197
|
}
|
|
193
198
|
}
|
|
194
199
|
},
|
|
195
200
|
onPeerDisconnected: (nodeRoutingId, endpoint) => {
|
|
196
201
|
for (const [intentId, peer] of this.peerIntents) {
|
|
197
|
-
if (peer.endpoint === endpoint
|
|
198
|
-
|
|
202
|
+
if (peer.endpoint === endpoint &&
|
|
203
|
+
(peer.nodeRoutingId === undefined || peer.nodeRoutingId === nodeRoutingId)) {
|
|
199
204
|
this.peerIntents.delete(intentId);
|
|
200
205
|
}
|
|
201
206
|
}
|
|
@@ -205,6 +210,9 @@ class ZLinkNodeRawMeshBackend {
|
|
|
205
210
|
});
|
|
206
211
|
runtime.start();
|
|
207
212
|
this.stateful = new service_stateful_runtime_1.ServiceStatefulRuntime(runtime, descriptor.nodeRoutingId, descriptor.lifecycleGeneration);
|
|
213
|
+
if (this.dispatchErrors !== undefined) {
|
|
214
|
+
this.stateful.setDispatchErrorReporter(this.dispatchErrors, this.meshName);
|
|
215
|
+
}
|
|
208
216
|
if (this.mailboxRecordDropped !== undefined) {
|
|
209
217
|
this.stateful.setMailboxDropHandler(this.mailboxRecordDropped);
|
|
210
218
|
}
|
|
@@ -278,23 +286,22 @@ class ZLinkNodeRawMeshBackend {
|
|
|
278
286
|
}
|
|
279
287
|
async connectPeer(options) {
|
|
280
288
|
const runtime = this.requireRuntime();
|
|
281
|
-
const nodeRoutingId = options.expectedRid === undefined
|
|
282
|
-
? undefined
|
|
283
|
-
: String(options.expectedRid);
|
|
289
|
+
const nodeRoutingId = options.expectedRid === undefined ? undefined : String(options.expectedRid);
|
|
284
290
|
if (nodeRoutingId === undefined) {
|
|
285
291
|
runtime.connectPeerEndpoint(options.endpoint);
|
|
286
292
|
}
|
|
287
293
|
else {
|
|
288
|
-
runtime.connectPeerByRoutingId(options.endpoint, nodeRoutingId, options.expectedSecurityIdentity
|
|
289
|
-
?? runtime.topology.localDescriptor().securityIdentity, options.expectedLifecycleGeneration);
|
|
294
|
+
runtime.connectPeerByRoutingId(options.endpoint, nodeRoutingId, options.expectedSecurityIdentity ?? runtime.topology.localDescriptor().securityIdentity, options.expectedLifecycleGeneration);
|
|
290
295
|
}
|
|
291
296
|
const intent = this.nextPeerIntent++;
|
|
292
297
|
this.peerIntents.set(intent, {
|
|
293
298
|
endpoint: options.endpoint,
|
|
294
|
-
...(nodeRoutingId === undefined
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
299
|
+
...(nodeRoutingId === undefined
|
|
300
|
+
? {}
|
|
301
|
+
: {
|
|
302
|
+
nodeRoutingId,
|
|
303
|
+
lifecycleGeneration: options.expectedLifecycleGeneration
|
|
304
|
+
})
|
|
298
305
|
});
|
|
299
306
|
if (nodeRoutingId !== undefined)
|
|
300
307
|
await runtime.announcePeer(nodeRoutingId);
|
|
@@ -318,18 +325,16 @@ class ZLinkNodeRawMeshBackend {
|
|
|
318
325
|
disconnectPeer(peerRid, lifecycleGeneration) {
|
|
319
326
|
const nodeRoutingId = String(peerRid);
|
|
320
327
|
const admitted = this.runtime?.topology.peer(nodeRoutingId);
|
|
321
|
-
if (admitted !== undefined
|
|
322
|
-
&& admitted.descriptor.lifecycleGeneration !== lifecycleGeneration) {
|
|
328
|
+
if (admitted !== undefined && admitted.descriptor.lifecycleGeneration !== lifecycleGeneration) {
|
|
323
329
|
return;
|
|
324
330
|
}
|
|
325
331
|
const admittedEndpoint = admitted?.descriptor.advertisedEndpoint;
|
|
326
|
-
const found = [...this.peerIntents.entries()]
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
&& intent.endpoint === admittedEndpoint));
|
|
332
|
+
const found = [...this.peerIntents.entries()].find(([, intent]) => (intent.nodeRoutingId === nodeRoutingId &&
|
|
333
|
+
(intent.lifecycleGeneration === undefined ||
|
|
334
|
+
intent.lifecycleGeneration === lifecycleGeneration)) ||
|
|
335
|
+
(intent.nodeRoutingId === undefined &&
|
|
336
|
+
admittedEndpoint !== undefined &&
|
|
337
|
+
intent.endpoint === admittedEndpoint));
|
|
333
338
|
if (found === undefined) {
|
|
334
339
|
if (admitted !== undefined) {
|
|
335
340
|
this.runtime?.disconnectPeer(admitted.descriptor.advertisedEndpoint, nodeRoutingId, lifecycleGeneration);
|
|
@@ -340,7 +345,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
340
345
|
}
|
|
341
346
|
replaceDiscoveredNotRequiredPeers(peers) {
|
|
342
347
|
const local = this.requireRuntime().topology.localDescriptor();
|
|
343
|
-
this.requireRuntime().replaceDiscoveredNotRequired(peers.map(peer => ({
|
|
348
|
+
this.requireRuntime().replaceDiscoveredNotRequired(peers.map((peer) => ({
|
|
344
349
|
...local,
|
|
345
350
|
nodeRoutingId: peer.nodeRoutingId,
|
|
346
351
|
lifecycleGeneration: peer.lifecycleGeneration,
|
|
@@ -357,29 +362,32 @@ class ZLinkNodeRawMeshBackend {
|
|
|
357
362
|
return this.requireRuntime().isPeerRouteReady(String(targetRid), lifecycleGeneration);
|
|
358
363
|
}
|
|
359
364
|
async sendToNode(targetRid, parts) {
|
|
360
|
-
return await this.requireRuntime().sendToNode(String(targetRid), encodeMultipartApplicationFrame(parts))
|
|
365
|
+
return (await this.requireRuntime().sendToNode(String(targetRid), encodeMultipartApplicationFrame(parts)))
|
|
366
|
+
? zlink_1.SubmitResult.Ok
|
|
367
|
+
: zlink_1.SubmitResult.NotConnected;
|
|
361
368
|
}
|
|
362
369
|
async sendInfrastructureControl(targetRid, record) {
|
|
363
|
-
return await this.requireRuntime().sendService(String(targetRid), (Array.isArray(record) ? record : [record]).map(value => Buffer.from(value)))
|
|
370
|
+
return (await this.requireRuntime().sendService(String(targetRid), (Array.isArray(record) ? record : [record]).map((value) => Buffer.from(value))))
|
|
371
|
+
? zlink_1.SubmitResult.Ok
|
|
372
|
+
: zlink_1.SubmitResult.NotConnected;
|
|
364
373
|
}
|
|
365
374
|
async sendInfrastructureControlFrames(targetRid, frames) {
|
|
366
|
-
return await this.requireRuntime().sendService(String(targetRid), frames.map(frame => Buffer.from(frame)))
|
|
375
|
+
return (await this.requireRuntime().sendService(String(targetRid), frames.map((frame) => Buffer.from(frame))))
|
|
376
|
+
? zlink_1.SubmitResult.Ok
|
|
377
|
+
: zlink_1.SubmitResult.NotConnected;
|
|
367
378
|
}
|
|
368
379
|
async requestInfrastructureControlFrames(targetRid, frames, options) {
|
|
369
|
-
return await this.requireRuntime().requestService(String(targetRid), frames.map(frame => Buffer.from(frame)), options?.timeoutMs ?? 30_000);
|
|
380
|
+
return await this.requireRuntime().requestService(String(targetRid), frames.map((frame) => Buffer.from(frame)), options?.timeoutMs ?? 30_000);
|
|
370
381
|
}
|
|
371
382
|
requestToNode(targetRid, parts, options) {
|
|
372
383
|
const pending = this.requireRuntime().requestToNode(String(targetRid), encodeMultipartApplicationFrame(parts), options?.timeoutMs ?? 30_000);
|
|
373
384
|
return this.observeCompletion(pending.id, service_runtime_contracts_1.OperationKind.NodeRequest, pending.promise);
|
|
374
385
|
}
|
|
375
386
|
async sendToChannel(channelName, parts) {
|
|
376
|
-
return
|
|
387
|
+
return this.requireRuntime().sendToChannel(channelName, encodeMultipartApplicationFrame(parts));
|
|
377
388
|
}
|
|
378
389
|
requestToChannel(channelName, parts, options) {
|
|
379
390
|
const pending = this.requireRuntime().requestToChannel(channelName, encodeMultipartApplicationFrame(parts), options?.timeoutMs ?? 30_000);
|
|
380
|
-
if (pending === undefined) {
|
|
381
|
-
return this.enqueueImmediateFailure(service_runtime_contracts_1.OperationKind.ChannelRequest, zlink_1.RequestResult.NotFound);
|
|
382
|
-
}
|
|
383
391
|
return this.observeCompletion(pending.id, service_runtime_contracts_1.OperationKind.ChannelRequest, pending.promise);
|
|
384
392
|
}
|
|
385
393
|
status() {
|
|
@@ -395,11 +403,11 @@ class ZLinkNodeRawMeshBackend {
|
|
|
395
403
|
channelCount: descriptor.channels.length,
|
|
396
404
|
configuredPeerCount: this.peerIntents.size,
|
|
397
405
|
admittedPeerCount: peers.length,
|
|
398
|
-
drainingPeerCount: peers.filter(peer => peer.descriptor.state === 'draining').length,
|
|
406
|
+
drainingPeerCount: peers.filter((peer) => peer.descriptor.state === 'draining').length,
|
|
399
407
|
pendingApplicationMessages: BigInt(this.runtime?.mailbox.pendingMessages('application') ?? 0),
|
|
400
408
|
pendingInfrastructureMessages: BigInt((this.runtime?.mailbox.pendingMessages('infrastructure') ?? 0) + this.completionCount),
|
|
401
|
-
pendingBytes: BigInt((this.runtime?.mailbox.pendingBytes('application') ?? 0)
|
|
402
|
-
|
|
409
|
+
pendingBytes: BigInt((this.runtime?.mailbox.pendingBytes('application') ?? 0) +
|
|
410
|
+
(this.runtime?.mailbox.pendingBytes('infrastructure') ?? 0)),
|
|
403
411
|
lastError: 0,
|
|
404
412
|
lastChangedMs: BigInt(Math.trunc(performance.now()))
|
|
405
413
|
};
|
|
@@ -409,10 +417,9 @@ class ZLinkNodeRawMeshBackend {
|
|
|
409
417
|
id,
|
|
410
418
|
...intent
|
|
411
419
|
}));
|
|
412
|
-
const findIntent = (nodeRoutingId, endpoint) => intents.find(intent => intent.nodeRoutingId === nodeRoutingId
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
const admitted = (this.runtime?.topology.peers() ?? []).map(peer => ({
|
|
420
|
+
const findIntent = (nodeRoutingId, endpoint) => intents.find((intent) => intent.nodeRoutingId === nodeRoutingId ||
|
|
421
|
+
(intent.nodeRoutingId === undefined && intent.endpoint === endpoint));
|
|
422
|
+
const admitted = (this.runtime?.topology.peers() ?? []).map((peer) => ({
|
|
416
423
|
connectionIntentId: findIntent(peer.descriptor.nodeRoutingId, peer.descriptor.advertisedEndpoint)?.id ?? 0n,
|
|
417
424
|
source: 1,
|
|
418
425
|
state: this.runtime?.isPeerRouteReady(peer.descriptor.nodeRoutingId) === false
|
|
@@ -426,7 +433,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
426
433
|
lastError: 0,
|
|
427
434
|
lastChangedMs: BigInt(Math.trunc(performance.now()))
|
|
428
435
|
}));
|
|
429
|
-
const notRequired = (this.runtime?.topology.notRequiredPeers() ?? []).map(descriptor => ({
|
|
436
|
+
const notRequired = (this.runtime?.topology.notRequiredPeers() ?? []).map((descriptor) => ({
|
|
430
437
|
connectionIntentId: findIntent(descriptor.nodeRoutingId, descriptor.advertisedEndpoint)?.id ?? 0n,
|
|
431
438
|
source: 1,
|
|
432
439
|
state: 6,
|
|
@@ -439,13 +446,12 @@ class ZLinkNodeRawMeshBackend {
|
|
|
439
446
|
lastChangedMs: BigInt(Math.trunc(performance.now()))
|
|
440
447
|
}));
|
|
441
448
|
const projected = new Set([
|
|
442
|
-
...admitted.map(peer => peer.connectionIntentId),
|
|
443
|
-
...notRequired.map(peer => peer.connectionIntentId)
|
|
449
|
+
...admitted.map((peer) => peer.connectionIntentId),
|
|
450
|
+
...notRequired.map((peer) => peer.connectionIntentId)
|
|
444
451
|
]);
|
|
445
452
|
const disconnected = intents
|
|
446
|
-
.filter(intent => intent.nodeRoutingId !== undefined
|
|
447
|
-
|
|
448
|
-
.map(intent => {
|
|
453
|
+
.filter((intent) => intent.nodeRoutingId !== undefined && !projected.has(intent.id))
|
|
454
|
+
.map((intent) => {
|
|
449
455
|
const descriptor = this.runtime?.topology.knownDescriptor(intent.nodeRoutingId);
|
|
450
456
|
return {
|
|
451
457
|
connectionIntentId: intent.id,
|
|
@@ -462,8 +468,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
462
468
|
lastChangedMs: BigInt(Math.trunc(performance.now()))
|
|
463
469
|
};
|
|
464
470
|
});
|
|
465
|
-
return [...admitted, ...notRequired, ...disconnected]
|
|
466
|
-
.sort((left, right) => String(left.routingId).localeCompare(String(right.routingId)));
|
|
471
|
+
return [...admitted, ...notRequired, ...disconnected].sort((left, right) => String(left.routingId).localeCompare(String(right.routingId)));
|
|
467
472
|
}
|
|
468
473
|
peerChannels(peerRid, lifecycleGeneration) {
|
|
469
474
|
const descriptor = this.runtime?.topology.knownDescriptor(String(peerRid));
|
|
@@ -471,8 +476,8 @@ class ZLinkNodeRawMeshBackend {
|
|
|
471
476
|
return { names: [], weights: [] };
|
|
472
477
|
}
|
|
473
478
|
return {
|
|
474
|
-
names: descriptor.channels.map(channel => channel.name),
|
|
475
|
-
weights: descriptor.channels.map(channel => channel.weight)
|
|
479
|
+
names: descriptor.channels.map((channel) => channel.name),
|
|
480
|
+
weights: descriptor.channels.map((channel) => channel.weight)
|
|
476
481
|
};
|
|
477
482
|
}
|
|
478
483
|
createPublisher() {
|
|
@@ -513,11 +518,10 @@ class ZLinkNodeRawMeshBackend {
|
|
|
513
518
|
this.drainMailbox('application', target);
|
|
514
519
|
}
|
|
515
520
|
const runtime = this.runtime;
|
|
516
|
-
const infrastructureResidue = (domains & service_runtime_contracts_1.ReadyDomain.Infrastructure) !== 0
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
&& (runtime?.mailbox.pendingMessages('application') ?? 0) > 0;
|
|
521
|
+
const infrastructureResidue = (domains & service_runtime_contracts_1.ReadyDomain.Infrastructure) !== 0 &&
|
|
522
|
+
(this.completionCount > 0 || (runtime?.mailbox.pendingMessages('infrastructure') ?? 0) > 0);
|
|
523
|
+
const applicationResidue = (domains & service_runtime_contracts_1.ReadyDomain.Application) !== 0 &&
|
|
524
|
+
(runtime?.mailbox.pendingMessages('application') ?? 0) > 0;
|
|
521
525
|
return {
|
|
522
526
|
ok: true,
|
|
523
527
|
// Residue is scoped to the requested lane. The pump drains lanes in
|
|
@@ -676,13 +680,13 @@ class ZLinkNodeRawMeshBackend {
|
|
|
676
680
|
return this.observeStateful(service_runtime_contracts_1.OperationKind.ActorRequest, this.requireStateful().requestToActor(actor, this.peerGeneration(String(actor.nodeRid)), actor.generation, encodeMultipart(parts), options?.timeoutMs ?? 30_000));
|
|
677
681
|
}
|
|
678
682
|
async actorSendToActor(source, target, parts) {
|
|
679
|
-
return await this.requireStateful().sendToActor(target, this.peerGeneration(String(target.nodeRid)), target.generation, encodeMultipart(parts), source);
|
|
683
|
+
return (await this.requireStateful().sendToActor(target, this.peerGeneration(String(target.nodeRid)), target.generation, encodeMultipart(parts), source));
|
|
680
684
|
}
|
|
681
685
|
actorRequestToActor(source, target, parts, options) {
|
|
682
686
|
return this.observeStateful(service_runtime_contracts_1.OperationKind.ActorRequest, this.requireStateful().requestToActor(target, this.peerGeneration(String(target.nodeRid)), target.generation, encodeMultipart(parts), options?.timeoutMs ?? 30_000, source));
|
|
683
687
|
}
|
|
684
688
|
async sendActorBoundSession(actor, expectedBindingGeneration, parts, _flags, actorFence) {
|
|
685
|
-
return await this.requireStateful().sendBoundSession(actor, expectedBindingGeneration, encodeMultipart(parts), actorFence);
|
|
689
|
+
return (await this.requireStateful().sendBoundSession(actor, expectedBindingGeneration, encodeMultipart(parts), actorFence));
|
|
686
690
|
}
|
|
687
691
|
closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs = 30_000) {
|
|
688
692
|
const binding = this.requireStateful().registry.binding(actor);
|
|
@@ -698,7 +702,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
698
702
|
return new RawStreamSessionService(this.requireStateful(), stream, (kind, pending) => this.observeStateful(kind, pending));
|
|
699
703
|
}
|
|
700
704
|
async sendFromSpot(source, target, parts) {
|
|
701
|
-
return await this.requireStateful().sendToSpot(source.ref.spotId, target, encodeMultipart(parts));
|
|
705
|
+
return (await this.requireStateful().sendToSpot(source.ref.spotId, target, encodeMultipart(parts)));
|
|
702
706
|
}
|
|
703
707
|
requestFromSpot(source, target, parts, timeoutMs) {
|
|
704
708
|
return this.observeStateful(service_runtime_contracts_1.OperationKind.SpotRequest, this.requireStateful().requestToSpot(source.ref.spotId, target, encodeMultipart(parts), timeoutMs));
|
|
@@ -734,10 +738,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
734
738
|
securityIdentity: 'default',
|
|
735
739
|
applicationVersion: 0n,
|
|
736
740
|
...(this.maintenanceWave === undefined ? {} : { maintenanceWave: this.maintenanceWave }),
|
|
737
|
-
protocolCapabilities: [
|
|
738
|
-
service_wire_constants_generated_1.SERVICE_WIRE_REQUIRED_CAPABILITY,
|
|
739
|
-
...this.objectCapabilities
|
|
740
|
-
].sort(),
|
|
741
|
+
protocolCapabilities: [service_wire_constants_generated_1.SERVICE_WIRE_REQUIRED_CAPABILITY, ...this.objectCapabilities].sort(),
|
|
741
742
|
objectRole: this.objectRole,
|
|
742
743
|
placementWeight: this.placementWeight,
|
|
743
744
|
activeCapacityLimit: this.activeCapacityLimit,
|
|
@@ -800,12 +801,12 @@ class ZLinkNodeRawMeshBackend {
|
|
|
800
801
|
}
|
|
801
802
|
observeCompletion(low, operationKind, promise) {
|
|
802
803
|
const id = { high: 1n, low };
|
|
803
|
-
void promise.then(result => this.enqueueCompletion(id, operationKind, result), error => this.enqueueCompletion(id, operationKind, genericOperationFailure(error)));
|
|
804
|
+
void promise.then((result) => this.enqueueCompletion(id, operationKind, result), (error) => this.enqueueCompletion(id, operationKind, genericOperationFailure(error)));
|
|
804
805
|
return id;
|
|
805
806
|
}
|
|
806
807
|
observeStateful(operationKind, pending) {
|
|
807
808
|
const id = { high: 2n, low: pending.id };
|
|
808
|
-
void pending.promise.then(result => this.enqueueCompletion(id, operationKind, result), error => this.enqueueCompletion(id, operationKind, statefulOperationFailure(error)));
|
|
809
|
+
void pending.promise.then((result) => this.enqueueCompletion(id, operationKind, result), (error) => this.enqueueCompletion(id, operationKind, statefulOperationFailure(error)));
|
|
809
810
|
return id;
|
|
810
811
|
}
|
|
811
812
|
enqueueImmediateFailure(operationKind, terminalResult) {
|
|
@@ -845,8 +846,7 @@ class ZLinkNodeRawMeshBackend {
|
|
|
845
846
|
if (this.completionCount === 0) {
|
|
846
847
|
this.clearCompletions();
|
|
847
848
|
}
|
|
848
|
-
else if (this.completionHead >= 1024
|
|
849
|
-
&& this.completionHead * 2 >= this.completions.length) {
|
|
849
|
+
else if (this.completionHead >= 1024 && this.completionHead * 2 >= this.completions.length) {
|
|
850
850
|
this.completions.splice(0, this.completionHead);
|
|
851
851
|
this.completionHead = 0;
|
|
852
852
|
}
|
|
@@ -982,10 +982,10 @@ function requireDirectSpotRouteFence(route, targetNodeRid, targetSpotId, targetS
|
|
|
982
982
|
if (route === undefined && entryRoute !== undefined) {
|
|
983
983
|
return entryRoute;
|
|
984
984
|
}
|
|
985
|
-
if (route === undefined
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
985
|
+
if (route === undefined ||
|
|
986
|
+
route.targetNodeRid !== targetNodeRid ||
|
|
987
|
+
route.spot.spotId !== targetSpotId ||
|
|
988
|
+
route.spot.generation !== targetSpotGeneration) {
|
|
989
989
|
throw new TypeError('Direct Spot submission requires the exact resolved authority fence.');
|
|
990
990
|
}
|
|
991
991
|
return route;
|
|
@@ -1026,7 +1026,7 @@ class RawStreamSessionService {
|
|
|
1026
1026
|
return {
|
|
1027
1027
|
state: this.state,
|
|
1028
1028
|
lifecycleGeneration: 1n,
|
|
1029
|
-
sessionCount: BigInt(new Set(bindings.map(value => value.sessionRid)).size),
|
|
1029
|
+
sessionCount: BigInt(new Set(bindings.map((value) => value.sessionRid)).size),
|
|
1030
1030
|
bindingCount: BigInt(bindings.length),
|
|
1031
1031
|
pendingMessageCount: 0n,
|
|
1032
1032
|
pendingByteCount: 0n,
|
|
@@ -1041,7 +1041,7 @@ class RawStreamSessionService {
|
|
|
1041
1041
|
this.requireStarted();
|
|
1042
1042
|
const sessionKey = String(sessionRid);
|
|
1043
1043
|
this.sessionTargets.set(sessionKey, sessionRid);
|
|
1044
|
-
return this.observe(service_runtime_contracts_1.OperationKind.StreamBind, this.stateful.bindSession(sessionKey, actor, timeoutMs, (targetSessionRid, payloadFrame) => this.deliver(targetSessionRid, payloadFrame), onBindingReplaced, (0, service_session_binding_ingress_port_1.serviceSessionBindingIngressPortIfRegistered)(this), actorAuthority));
|
|
1044
|
+
return this.observe(service_runtime_contracts_1.OperationKind.StreamBind, this.stateful.bindSession(sessionKey, actor, timeoutMs, (targetSessionRid, payloadFrame) => this.deliver(targetSessionRid, actor.actorId, payloadFrame), onBindingReplaced, (0, service_session_binding_ingress_port_1.serviceSessionBindingIngressPortIfRegistered)(this), actorAuthority));
|
|
1045
1045
|
}
|
|
1046
1046
|
unbindActor(sessionRid, actor, expectedBindingGeneration, timeoutMs = 30_000) {
|
|
1047
1047
|
this.requireStarted();
|
|
@@ -1052,9 +1052,9 @@ class RawStreamSessionService {
|
|
|
1052
1052
|
}
|
|
1053
1053
|
async sendToActor(sessionRid, actor, parts) {
|
|
1054
1054
|
this.requireStarted();
|
|
1055
|
-
return await this.stateful.sendSessionToActor(String(sessionRid), actor, encodeMultipart(parts));
|
|
1055
|
+
return (await this.stateful.sendSessionToActor(String(sessionRid), actor, encodeMultipart(parts)));
|
|
1056
1056
|
}
|
|
1057
|
-
async deliver(sessionRid, payload) {
|
|
1057
|
+
async deliver(sessionRid, actorId, payload) {
|
|
1058
1058
|
const target = this.sessionTargets.get(sessionRid);
|
|
1059
1059
|
if (target === undefined)
|
|
1060
1060
|
return false;
|
|
@@ -1062,6 +1062,10 @@ class RawStreamSessionService {
|
|
|
1062
1062
|
const parts = decodeMultipartBuffers((0, service_wire_m6a_codec_1.decodeApplicationPayloadView)(payload).payload);
|
|
1063
1063
|
if (parts.length === 0)
|
|
1064
1064
|
return false;
|
|
1065
|
+
const actorSlot = await (0, service_session_binding_ingress_port_1.serviceSessionBindingIngressPortIfRegistered)(this)?.actorSlot(actorId, sessionRid);
|
|
1066
|
+
if (actorSlot === undefined)
|
|
1067
|
+
return false;
|
|
1068
|
+
parts[0] = Buffer.from(streamFrameWithActorSlot(parts[0], actorSlot));
|
|
1065
1069
|
let submit = operation.message(parts[0]);
|
|
1066
1070
|
for (let index = 1; index < parts.length; index++) {
|
|
1067
1071
|
submit = submit.message(parts[index]);
|
|
@@ -1080,10 +1084,14 @@ class RawStreamSessionService {
|
|
|
1080
1084
|
// Let the socket monitor drive the existing STREAM close/unbind
|
|
1081
1085
|
// lifecycle instead of maintaining a second session-close state.
|
|
1082
1086
|
(0, node_socket_backend_adapter_1.disconnectStreamPeer)(this.stream, target);
|
|
1083
|
-
throw new runtime_values_1.ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
1087
|
+
throw new runtime_values_1.ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
1088
|
+
cause: error
|
|
1089
|
+
});
|
|
1084
1090
|
case zlink_1.SubmitResult.Backpressured:
|
|
1085
1091
|
case zlink_1.SubmitResult.NotAdmitted:
|
|
1086
|
-
throw new runtime_values_1.ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
1092
|
+
throw new runtime_values_1.ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
1093
|
+
cause: error
|
|
1094
|
+
});
|
|
1087
1095
|
default:
|
|
1088
1096
|
throw error;
|
|
1089
1097
|
}
|
|
@@ -1095,6 +1103,11 @@ class RawStreamSessionService {
|
|
|
1095
1103
|
}
|
|
1096
1104
|
}
|
|
1097
1105
|
}
|
|
1106
|
+
function streamFrameWithActorSlot(frame, actorSlot) {
|
|
1107
|
+
const decodedFrame = (0, stream_wire_1.decodeStreamWireFrame)(frame);
|
|
1108
|
+
const decodedHeader = (0, stream_wire_1.decodeStreamWireHeader)(decodedFrame.header);
|
|
1109
|
+
return (0, stream_wire_1.encodeStreamWireFrame)((0, stream_wire_1.encodeStreamWireHeader)({ ...decodedHeader, actorSlot }), decodedFrame.payload);
|
|
1110
|
+
}
|
|
1098
1111
|
class RawReadyBatch {
|
|
1099
1112
|
capacity;
|
|
1100
1113
|
records = [];
|
|
@@ -1134,7 +1147,7 @@ class RawReceiveBatch {
|
|
|
1134
1147
|
constructor(capacity, partCapacity) {
|
|
1135
1148
|
this.capacity = capacity;
|
|
1136
1149
|
this.partCapacity = partCapacity;
|
|
1137
|
-
if ([capacity, partCapacity].some(value => !Number.isInteger(value) || value < 1)) {
|
|
1150
|
+
if ([capacity, partCapacity].some((value) => !Number.isInteger(value) || value < 1)) {
|
|
1138
1151
|
throw new RangeError('Receive batch capacities must be positive.');
|
|
1139
1152
|
}
|
|
1140
1153
|
this.receiveCapacity = capacity;
|
|
@@ -1143,7 +1156,9 @@ class RawReceiveBatch {
|
|
|
1143
1156
|
return this.receiveCapacity;
|
|
1144
1157
|
}
|
|
1145
1158
|
reset(messageCapacity = this.capacity) {
|
|
1146
|
-
if (!Number.isInteger(messageCapacity) ||
|
|
1159
|
+
if (!Number.isInteger(messageCapacity) ||
|
|
1160
|
+
messageCapacity < 1 ||
|
|
1161
|
+
messageCapacity > this.capacity) {
|
|
1147
1162
|
throw new RangeError('Receive limit must be within the batch capacity.');
|
|
1148
1163
|
}
|
|
1149
1164
|
this.receiveCapacity = messageCapacity;
|
|
@@ -1191,8 +1206,7 @@ class MailboxClaim {
|
|
|
1191
1206
|
throw error;
|
|
1192
1207
|
}
|
|
1193
1208
|
const nextParts = decoded.parts.length;
|
|
1194
|
-
if (records.length >= capacity.messageCapacity
|
|
1195
|
-
|| parts + nextParts > capacity.partCapacity) {
|
|
1209
|
+
if (records.length >= capacity.messageCapacity || parts + nextParts > capacity.partCapacity) {
|
|
1196
1210
|
for (const part of decoded.parts)
|
|
1197
1211
|
part.close();
|
|
1198
1212
|
this.remaining = this.claim.records.slice(index);
|
|
@@ -1224,7 +1238,8 @@ class CompletionClaim {
|
|
|
1224
1238
|
const payload = this.completion.result.payload;
|
|
1225
1239
|
return {
|
|
1226
1240
|
ok: true,
|
|
1227
|
-
records: [
|
|
1241
|
+
records: [
|
|
1242
|
+
{
|
|
1228
1243
|
kind: service_runtime_contracts_1.ReceiveKind.Completion,
|
|
1229
1244
|
domain: service_runtime_contracts_1.ReadyDomain.Infrastructure,
|
|
1230
1245
|
sourceNodeRid: null,
|
|
@@ -1236,9 +1251,7 @@ class CompletionClaim {
|
|
|
1236
1251
|
channelName: null,
|
|
1237
1252
|
topic: null,
|
|
1238
1253
|
applicationMetadata: null,
|
|
1239
|
-
kindData: 'kindData' in this.completion.result
|
|
1240
|
-
? this.completion.result.kindData ?? null
|
|
1241
|
-
: null,
|
|
1254
|
+
kindData: 'kindData' in this.completion.result ? (this.completion.result.kindData ?? null) : null,
|
|
1242
1255
|
terminalResult: this.completion.result.terminalResult,
|
|
1243
1256
|
failureErrno: this.completion.result.failureCode,
|
|
1244
1257
|
parts: payload === undefined
|
|
@@ -1248,7 +1261,8 @@ class CompletionClaim {
|
|
|
1248
1261
|
: [zlink_1.Message.from(payload.payload)],
|
|
1249
1262
|
reply: () => zlink_1.SubmitResult.InvalidState,
|
|
1250
1263
|
replyActorJoin: () => zlink_1.SubmitResult.NotSupported
|
|
1251
|
-
}
|
|
1264
|
+
}
|
|
1265
|
+
]
|
|
1252
1266
|
};
|
|
1253
1267
|
}
|
|
1254
1268
|
release() { }
|
|
@@ -1271,8 +1285,7 @@ function decodeMultipartRecord(runtime, record) {
|
|
|
1271
1285
|
// multi-frame infrastructure control (Prepare + sideband) from being
|
|
1272
1286
|
// misread as a 2-frame application envelope and dropped as invalid_frame.
|
|
1273
1287
|
if (record.parts.length === 1 || record.domain === 'infrastructure') {
|
|
1274
|
-
const request = record.requestSequence !== undefined
|
|
1275
|
-
&& record.sourceRoutingId !== undefined;
|
|
1288
|
+
const request = record.requestSequence !== undefined && record.sourceRoutingId !== undefined;
|
|
1276
1289
|
return {
|
|
1277
1290
|
kind: request ? service_runtime_contracts_1.ReceiveKind.NodeRequest : service_runtime_contracts_1.ReceiveKind.NodeSend,
|
|
1278
1291
|
domain: readyDomain(record.domain),
|
|
@@ -1291,7 +1304,7 @@ function decodeMultipartRecord(runtime, record) {
|
|
|
1291
1304
|
terminalResult: 0,
|
|
1292
1305
|
failureErrno: 0,
|
|
1293
1306
|
...receiveIngressLifecycle(record),
|
|
1294
|
-
parts: record.parts.map(part => zlink_1.Message.from(part)),
|
|
1307
|
+
parts: record.parts.map((part) => zlink_1.Message.from(part)),
|
|
1295
1308
|
reply(parts) {
|
|
1296
1309
|
if (!request)
|
|
1297
1310
|
return zlink_1.SubmitResult.InvalidState;
|
|
@@ -1303,7 +1316,7 @@ function decodeMultipartRecord(runtime, record) {
|
|
|
1303
1316
|
...(record.sourceRoute === undefined ? {} : { sourceRoute: record.sourceRoute }),
|
|
1304
1317
|
requestSequence: record.requestSequence,
|
|
1305
1318
|
...(record.reply === undefined ? {} : { reply: record.reply })
|
|
1306
|
-
}, values.map(value => Buffer.from(messageBytesView(value))));
|
|
1319
|
+
}, values.map((value) => Buffer.from(messageBytesView(value))));
|
|
1307
1320
|
return zlink_1.SubmitResult.Ok;
|
|
1308
1321
|
},
|
|
1309
1322
|
replyActorJoin: () => zlink_1.SubmitResult.NotSupported
|
|
@@ -1313,7 +1326,9 @@ function decodeMultipartRecord(runtime, record) {
|
|
|
1313
1326
|
const command = header[3];
|
|
1314
1327
|
const payloadFrame = record.parts[1];
|
|
1315
1328
|
const application = decodeApplicationEnvelope(payloadFrame);
|
|
1316
|
-
const channelName = record.owner.startsWith('channel:')
|
|
1329
|
+
const channelName = record.owner.startsWith('channel:')
|
|
1330
|
+
? record.owner.slice('channel:'.length)
|
|
1331
|
+
: null;
|
|
1317
1332
|
const operationId = record.correlation === undefined
|
|
1318
1333
|
? { high: 0n, low: 0n }
|
|
1319
1334
|
: { high: 1n, low: record.correlation };
|
|
@@ -1360,13 +1375,15 @@ function decodeMultipartRecord(runtime, record) {
|
|
|
1360
1375
|
}
|
|
1361
1376
|
function decodeStatefulRecord(record, stateful) {
|
|
1362
1377
|
const payloadFrame = record.parts.length < 2 ? undefined : record.parts[1];
|
|
1363
|
-
const canonicalActorJoin = stateful.kindData?.kind === 'actorControl'
|
|
1364
|
-
|
|
1365
|
-
const canonicalActorJoinPayload = stateful.operationKind === service_runtime_contracts_1.OperationKind.ActorJoin
|
|
1366
|
-
|
|
1378
|
+
const canonicalActorJoin = stateful.kindData?.kind === 'actorControl' &&
|
|
1379
|
+
stateful.kindData.canonicalActorJoin !== undefined;
|
|
1380
|
+
const canonicalActorJoinPayload = stateful.operationKind === service_runtime_contracts_1.OperationKind.ActorJoin &&
|
|
1381
|
+
stateful.canonicalApplicationPayload !== undefined;
|
|
1367
1382
|
const application = canonicalActorJoinPayload
|
|
1368
1383
|
? stateful.canonicalApplicationPayload
|
|
1369
|
-
:
|
|
1384
|
+
: payloadFrame === undefined
|
|
1385
|
+
? undefined
|
|
1386
|
+
: decodeApplicationEnvelope(payloadFrame);
|
|
1370
1387
|
const operationId = record.correlation === undefined
|
|
1371
1388
|
? { high: 0n, low: 0n }
|
|
1372
1389
|
: { high: 2n, low: record.correlation };
|
|
@@ -1409,7 +1426,9 @@ function decodeStatefulRecord(record, stateful) {
|
|
|
1409
1426
|
reply(parts) {
|
|
1410
1427
|
if (stateful.reply === undefined)
|
|
1411
1428
|
return zlink_1.SubmitResult.InvalidState;
|
|
1412
|
-
return stateful.reply(zlink_1.RequestResult.Ok, 0, encodeMultipart(parts))
|
|
1429
|
+
return stateful.reply(zlink_1.RequestResult.Ok, 0, encodeMultipart(parts))
|
|
1430
|
+
? zlink_1.SubmitResult.Ok
|
|
1431
|
+
: zlink_1.SubmitResult.InvalidState;
|
|
1413
1432
|
},
|
|
1414
1433
|
replyActorJoin(joinResult, parts, _flags, _replyContentType) {
|
|
1415
1434
|
if (stateful.reply === undefined || stateful.targetSpot === undefined) {
|
|
@@ -1425,9 +1444,7 @@ function decodeStatefulRecord(record, stateful) {
|
|
|
1425
1444
|
if (canonicalActorJoin && replyParts.length > 1) {
|
|
1426
1445
|
return zlink_1.SubmitResult.InvalidState;
|
|
1427
1446
|
}
|
|
1428
|
-
const replyPayload = replyParts.length === 0
|
|
1429
|
-
? undefined
|
|
1430
|
-
: encodeMultipart(replyParts);
|
|
1447
|
+
const replyPayload = replyParts.length === 0 ? undefined : encodeMultipart(replyParts);
|
|
1431
1448
|
const accepted = stateful.reply(zlink_1.RequestResult.Ok, 0, replyPayload, {
|
|
1432
1449
|
kind: 'actorJoin',
|
|
1433
1450
|
joinResult: joinResult === 0 ? 0 : 1,
|
|
@@ -1472,9 +1489,7 @@ function readyOwner(owner, nodeRid, stateful, domain) {
|
|
|
1472
1489
|
}
|
|
1473
1490
|
if (owner.startsWith('actor:')) {
|
|
1474
1491
|
const separator = owner.indexOf('\0', 'actor:'.length);
|
|
1475
|
-
const actorId = separator < 0
|
|
1476
|
-
? owner.slice('actor:'.length)
|
|
1477
|
-
: owner.slice('actor:'.length, separator);
|
|
1492
|
+
const actorId = separator < 0 ? owner.slice('actor:'.length) : owner.slice('actor:'.length, separator);
|
|
1478
1493
|
const generation = separator < 0 ? 0n : BigInt(owner.slice(separator + 1));
|
|
1479
1494
|
const current = stateful?.actor(actorId);
|
|
1480
1495
|
return {
|
|
@@ -1498,9 +1513,7 @@ function readyOwner(owner, nodeRid, stateful, domain) {
|
|
|
1498
1513
|
};
|
|
1499
1514
|
}
|
|
1500
1515
|
function readyDomain(domain) {
|
|
1501
|
-
return domain === 'infrastructure'
|
|
1502
|
-
? service_runtime_contracts_1.ReadyDomain.Infrastructure
|
|
1503
|
-
: service_runtime_contracts_1.ReadyDomain.Application;
|
|
1516
|
+
return domain === 'infrastructure' ? service_runtime_contracts_1.ReadyDomain.Infrastructure : service_runtime_contracts_1.ReadyDomain.Application;
|
|
1504
1517
|
}
|
|
1505
1518
|
/**
|
|
1506
1519
|
* Classifies a generic node/channel request rejection into a completion
|
|
@@ -1602,9 +1615,9 @@ function decodeApplicationEnvelope(frame) {
|
|
|
1602
1615
|
offset += contentLength;
|
|
1603
1616
|
const payloadLength = bytes.readUInt32BE(offset);
|
|
1604
1617
|
offset += 4;
|
|
1605
|
-
if (packetName !== MULTIPART_PACKET_NAME
|
|
1606
|
-
|
|
1607
|
-
|
|
1618
|
+
if (packetName !== MULTIPART_PACKET_NAME ||
|
|
1619
|
+
contentType !== MULTIPART_CONTENT_TYPE ||
|
|
1620
|
+
payloadLength !== bytes.length - offset) {
|
|
1608
1621
|
throw new service_wire_m6a_codec_1.ServiceWireProtocolError('Unexpected M6A application payload.');
|
|
1609
1622
|
}
|
|
1610
1623
|
return { packetName, contentType, payload: bytes.subarray(offset) };
|
|
@@ -1670,20 +1683,23 @@ function stateCode(state) {
|
|
|
1670
1683
|
}
|
|
1671
1684
|
function peerStateCode(state) {
|
|
1672
1685
|
switch (state) {
|
|
1673
|
-
case 'preparing':
|
|
1686
|
+
case 'preparing':
|
|
1687
|
+
return 2;
|
|
1674
1688
|
case 'serving':
|
|
1675
|
-
case 'retiring':
|
|
1676
|
-
|
|
1689
|
+
case 'retiring':
|
|
1690
|
+
return 3;
|
|
1691
|
+
case 'draining':
|
|
1692
|
+
return 4;
|
|
1677
1693
|
case 'stopped':
|
|
1678
|
-
case 'error':
|
|
1694
|
+
case 'error':
|
|
1695
|
+
return 5;
|
|
1679
1696
|
}
|
|
1680
1697
|
}
|
|
1681
1698
|
function createLifecycleGeneration() {
|
|
1682
1699
|
// Node's public Spot context exposes this lifecycle token as a number. Keep
|
|
1683
1700
|
// the opaque equality token within the exact range that surface can carry;
|
|
1684
1701
|
// lifecycle ordering is never inferred from its numeric value.
|
|
1685
|
-
const generation = (0, node_crypto_1.randomBytes)(8).readBigUInt64BE()
|
|
1686
|
-
& BigInt(Number.MAX_SAFE_INTEGER);
|
|
1702
|
+
const generation = (0, node_crypto_1.randomBytes)(8).readBigUInt64BE() & BigInt(Number.MAX_SAFE_INTEGER);
|
|
1687
1703
|
return generation === 0n ? 1n : generation;
|
|
1688
1704
|
}
|
|
1689
1705
|
function requirePositivePlacementValue(value, name) {
|