@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,18 +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 { translateBindingResultError } from './node-backend-adapter-support';
|
|
11
|
-
import { ZLinkFrameworkException } from '../../../contracts';
|
|
12
|
-
import { internalFrameworkWireReply } from '../../framework-errors-internal';
|
|
13
7
|
import {
|
|
14
|
-
Message,
|
|
15
8
|
RoutingId as BindingRoutingId,
|
|
9
|
+
ConfigError,
|
|
10
|
+
ConfigResult,
|
|
11
|
+
Message,
|
|
16
12
|
RequestResult,
|
|
17
13
|
SubmitError,
|
|
18
14
|
SubmitResult,
|
|
@@ -20,51 +16,64 @@ import {
|
|
|
20
16
|
type StreamSocket,
|
|
21
17
|
type SubmitResult as SubmitResultValue
|
|
22
18
|
} from '@zlink-systems/zlink';
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} from '../runtime-values';
|
|
28
|
-
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
|
+
|
|
29
23
|
import type { Message as FrameworkMessage } from '../../../contracts/Common/Message';
|
|
30
|
-
import
|
|
31
|
-
import
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
MeshPublisher,
|
|
35
|
-
ReadyBatch,
|
|
36
|
-
ReadyRecord,
|
|
37
|
-
ReceiveBatch,
|
|
38
|
-
ReceiveRecord,
|
|
39
|
-
ServiceSpot,
|
|
40
|
-
StreamSessionActorAuthorityFence,
|
|
41
|
-
StreamSessionService
|
|
42
|
-
} 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';
|
|
43
28
|
import {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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';
|
|
49
39
|
import {
|
|
50
40
|
OperationCancelledError,
|
|
51
41
|
OperationTimeoutError
|
|
52
42
|
} from '../../foundation/operation-registry';
|
|
53
43
|
import {
|
|
54
44
|
RawServiceMeshRuntime,
|
|
45
|
+
RAW_MESH_RECEIVE_TIME_BUDGET_MS,
|
|
55
46
|
type RawServiceRequestResult
|
|
56
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';
|
|
57
55
|
import {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
type
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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';
|
|
68
77
|
import {
|
|
69
78
|
ServiceStatefulRuntime,
|
|
70
79
|
statefulMailboxData,
|
|
@@ -72,14 +81,12 @@ import {
|
|
|
72
81
|
type ServiceInstanceApplicationLifecycle,
|
|
73
82
|
type ServicePendingInstanceActivation,
|
|
74
83
|
type ServiceSpotMessageFollowSeal,
|
|
75
|
-
type ServiceUserSpotOperationHandler,
|
|
76
|
-
type ServiceUserSpotOperationResult,
|
|
77
84
|
type ServiceStatefulMailboxData,
|
|
78
85
|
type ServiceStatefulPendingOperation,
|
|
79
|
-
type ServiceStatefulResult
|
|
86
|
+
type ServiceStatefulResult,
|
|
87
|
+
type ServiceUserSpotOperationHandler,
|
|
88
|
+
type ServiceUserSpotOperationResult
|
|
80
89
|
} from '../../foundation/service-stateful-runtime';
|
|
81
|
-
import type { ServiceActorRef, ServiceSpotState } from '../../foundation/service-stateful-registry';
|
|
82
|
-
import { serviceSessionBindingIngressPortIfRegistered } from '../../foundation/service-session-binding-ingress-port';
|
|
83
90
|
import type {
|
|
84
91
|
ServiceActorCreateRecord,
|
|
85
92
|
ServiceDirectSpotRouteFence,
|
|
@@ -90,27 +97,44 @@ import type {
|
|
|
90
97
|
ServiceUserSpotCloseRecord,
|
|
91
98
|
ServiceUserSpotCreateRecord
|
|
92
99
|
} from '../../foundation/service-stateful-wire-codec';
|
|
93
|
-
import { encodeServiceMetadataFrame } from '../../foundation/service-metadata-codec';
|
|
94
|
-
import type { ServiceInstanceActivationRecoveryEnvelope } from '../../foundation/service-instance-activation-recovery-codec';
|
|
95
|
-
import type {
|
|
96
|
-
ServiceMailboxClaim,
|
|
97
|
-
ServiceMailboxDomain,
|
|
98
|
-
ServiceMailboxRecord
|
|
99
|
-
} from '../../foundation/service-mailbox';
|
|
100
100
|
import type {
|
|
101
101
|
ServiceChannelDescriptor,
|
|
102
102
|
ServiceNodeDescriptor
|
|
103
103
|
} from '../../foundation/service-topology-registry';
|
|
104
|
-
import
|
|
105
|
-
import {
|
|
106
|
-
|
|
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';
|
|
107
122
|
import type {
|
|
108
123
|
ZLinkBackendActorRef,
|
|
109
|
-
|
|
110
|
-
|
|
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;
|
|
@@ -119,6 +143,9 @@ const MAX_DRAIN_RECORDS = 64;
|
|
|
119
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: {
|
|
@@ -186,7 +224,6 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
186
224
|
record: import('../../foundation/service-stateful-wire-codec').ServiceMessageFollowRecord
|
|
187
225
|
) => void;
|
|
188
226
|
private dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
189
|
-
private spotAdmissionProvider?: Parameters<ServiceStatefulRuntime['setSpotAdmissionProvider']>[0];
|
|
190
227
|
private readonly peerDisconnectedHandlers = new Set<(endpoint: string) => void>();
|
|
191
228
|
constructor(
|
|
192
229
|
private readonly meshName: string,
|
|
@@ -242,13 +279,6 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
242
279
|
this.stateful?.setDispatchErrorReporter(reporter, this.meshName);
|
|
243
280
|
}
|
|
244
281
|
|
|
245
|
-
setSpotAdmissionProvider(
|
|
246
|
-
provider: Parameters<ServiceStatefulRuntime['setSpotAdmissionProvider']>[0]
|
|
247
|
-
): void {
|
|
248
|
-
this.spotAdmissionProvider = provider;
|
|
249
|
-
this.stateful?.setSpotAdmissionProvider(provider);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
282
|
setProtocolErrorHandler(
|
|
253
283
|
handler: (record: {
|
|
254
284
|
readonly sourceNodeRid: string;
|
|
@@ -357,6 +387,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
357
387
|
throw new Error('MeshNode bind endpoint is not configured.');
|
|
358
388
|
const descriptor = this.createDescriptor();
|
|
359
389
|
const runtime = new RawServiceMeshRuntime({
|
|
390
|
+
onPendingOperationsChanged: this.onPendingOperationsChanged,
|
|
360
391
|
descriptor,
|
|
361
392
|
resolveAdvertisedEndpoint: (boundEndpoint) => this.resolveAdvertisedEndpoint(boundEndpoint),
|
|
362
393
|
bindingPort: this.bindingPort,
|
|
@@ -400,11 +431,9 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
400
431
|
this.stateful = new ServiceStatefulRuntime(
|
|
401
432
|
runtime,
|
|
402
433
|
descriptor.nodeRoutingId,
|
|
403
|
-
descriptor.lifecycleGeneration
|
|
434
|
+
descriptor.lifecycleGeneration,
|
|
435
|
+
this.onPendingOperationsChanged
|
|
404
436
|
);
|
|
405
|
-
if (this.spotAdmissionProvider !== undefined) {
|
|
406
|
-
this.stateful.setSpotAdmissionProvider(this.spotAdmissionProvider);
|
|
407
|
-
}
|
|
408
437
|
if (this.dispatchErrors !== undefined) {
|
|
409
438
|
this.stateful.setDispatchErrorReporter(this.dispatchErrors, this.meshName);
|
|
410
439
|
}
|
|
@@ -452,7 +481,6 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
452
481
|
|
|
453
482
|
close(): void {
|
|
454
483
|
if (this.closed) return;
|
|
455
|
-
this.closed = true;
|
|
456
484
|
if (this.maintenanceTimer !== undefined) clearTimeout(this.maintenanceTimer);
|
|
457
485
|
this.maintenanceTimer = undefined;
|
|
458
486
|
this.stateful?.close();
|
|
@@ -460,6 +488,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
460
488
|
this.runtime?.close();
|
|
461
489
|
this.runtime = undefined;
|
|
462
490
|
this.clearCompletions();
|
|
491
|
+
this.closed = true;
|
|
463
492
|
}
|
|
464
493
|
|
|
465
494
|
addChannelName(name: string): void {
|
|
@@ -519,7 +548,6 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
519
548
|
lifecycleGeneration: options.expectedLifecycleGeneration
|
|
520
549
|
})
|
|
521
550
|
});
|
|
522
|
-
if (nodeRoutingId !== undefined) await runtime.announcePeer(nodeRoutingId);
|
|
523
551
|
return intent;
|
|
524
552
|
}
|
|
525
553
|
|
|
@@ -655,7 +683,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
655
683
|
return await this.requireRuntime().requestService(
|
|
656
684
|
String(targetRid),
|
|
657
685
|
frames.map((frame) => Buffer.from(frame)),
|
|
658
|
-
options?.timeoutMs ??
|
|
686
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
659
687
|
);
|
|
660
688
|
}
|
|
661
689
|
|
|
@@ -667,7 +695,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
667
695
|
const pending = this.requireRuntime().requestToNode(
|
|
668
696
|
String(targetRid),
|
|
669
697
|
encodeMultipartApplicationFrame(parts),
|
|
670
|
-
options?.timeoutMs ??
|
|
698
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
671
699
|
);
|
|
672
700
|
return this.observeCompletion(pending.id, OperationKind.NodeRequest, pending.promise);
|
|
673
701
|
}
|
|
@@ -687,7 +715,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
687
715
|
const pending = this.requireRuntime().requestToChannel(
|
|
688
716
|
channelName,
|
|
689
717
|
encodeMultipartApplicationFrame(parts),
|
|
690
|
-
options?.timeoutMs ??
|
|
718
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
691
719
|
);
|
|
692
720
|
return this.observeCompletion(pending.id, OperationKind.ChannelRequest, pending.promise);
|
|
693
721
|
}
|
|
@@ -736,7 +764,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
736
764
|
source: 1,
|
|
737
765
|
state:
|
|
738
766
|
this.runtime?.isPeerRouteReady(peer.descriptor.nodeRoutingId) === false
|
|
739
|
-
?
|
|
767
|
+
? MeshPeerRuntimeState.Connecting
|
|
740
768
|
: peerStateCode(peer.descriptor.state),
|
|
741
769
|
routingId: peer.descriptor.nodeRoutingId as RoutingId,
|
|
742
770
|
lifecycleGeneration: peer.descriptor.lifecycleGeneration,
|
|
@@ -750,7 +778,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
750
778
|
connectionIntentId:
|
|
751
779
|
findIntent(descriptor.nodeRoutingId, descriptor.advertisedEndpoint)?.id ?? 0n,
|
|
752
780
|
source: 1,
|
|
753
|
-
state:
|
|
781
|
+
state: MeshPeerRuntimeState.NotRequired,
|
|
754
782
|
routingId: descriptor.nodeRoutingId as RoutingId,
|
|
755
783
|
lifecycleGeneration: descriptor.lifecycleGeneration,
|
|
756
784
|
descriptorRevision: descriptor.descriptorRevision,
|
|
@@ -940,17 +968,19 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
940
968
|
stableType: string,
|
|
941
969
|
generation: bigint,
|
|
942
970
|
authorityOwnerGeneration: bigint,
|
|
943
|
-
spotId: string,
|
|
971
|
+
spotId: string | undefined,
|
|
944
972
|
spotGeneration: bigint,
|
|
945
973
|
membershipEpoch: bigint
|
|
946
974
|
): ZLinkBackendActorRef {
|
|
947
|
-
|
|
975
|
+
const stateful = this.requireStateful();
|
|
976
|
+
const entry = spotId === undefined ? stateful.entrySpot().ref : undefined;
|
|
977
|
+
return stateful.restoreActorAuthority(
|
|
948
978
|
actorId,
|
|
949
979
|
stableType,
|
|
950
980
|
generation,
|
|
951
981
|
authorityOwnerGeneration,
|
|
952
|
-
spotId
|
|
953
|
-
spotGeneration,
|
|
982
|
+
entry?.spotId ?? spotId!,
|
|
983
|
+
entry?.generation ?? spotGeneration,
|
|
954
984
|
membershipEpoch
|
|
955
985
|
).ref;
|
|
956
986
|
}
|
|
@@ -1126,13 +1156,15 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1126
1156
|
route: ServiceInstanceRouteFence,
|
|
1127
1157
|
parts: MessageLike | readonly MessageLike[],
|
|
1128
1158
|
sourceSpotId?: string,
|
|
1129
|
-
metadata?: ReadonlyMap<string, string
|
|
1159
|
+
metadata?: ReadonlyMap<string, string>,
|
|
1160
|
+
instanceIntent = false
|
|
1130
1161
|
): Promise<SubmitResult> {
|
|
1131
1162
|
const result = await this.requireStateful().sendToInstanceSpot(
|
|
1132
1163
|
route,
|
|
1133
1164
|
encodeMultipart(parts),
|
|
1134
1165
|
sourceSpotId,
|
|
1135
|
-
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata)
|
|
1166
|
+
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata),
|
|
1167
|
+
instanceIntent
|
|
1136
1168
|
);
|
|
1137
1169
|
return result as SubmitResult;
|
|
1138
1170
|
}
|
|
@@ -1140,9 +1172,10 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1140
1172
|
requestInstanceSpot(
|
|
1141
1173
|
route: ServiceInstanceRouteFence,
|
|
1142
1174
|
parts: MessageLike | readonly MessageLike[],
|
|
1143
|
-
timeoutMs =
|
|
1175
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1144
1176
|
sourceSpotId?: string,
|
|
1145
|
-
metadata?: ReadonlyMap<string, string
|
|
1177
|
+
metadata?: ReadonlyMap<string, string>,
|
|
1178
|
+
instanceIntent = false
|
|
1146
1179
|
): MeshOperationId {
|
|
1147
1180
|
return this.observeStateful(
|
|
1148
1181
|
OperationKind.InstanceSpotRequest,
|
|
@@ -1151,7 +1184,8 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1151
1184
|
encodeMultipart(parts),
|
|
1152
1185
|
timeoutMs,
|
|
1153
1186
|
sourceSpotId,
|
|
1154
|
-
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata)
|
|
1187
|
+
metadata === undefined ? undefined : encodeServiceMetadataFrame(metadata),
|
|
1188
|
+
instanceIntent
|
|
1155
1189
|
)
|
|
1156
1190
|
);
|
|
1157
1191
|
}
|
|
@@ -1159,7 +1193,9 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1159
1193
|
actorLookup(actorId: string) {
|
|
1160
1194
|
const actor = this.requireStateful().actor(actorId);
|
|
1161
1195
|
if (actor === undefined) {
|
|
1162
|
-
|
|
1196
|
+
const error = new ConfigError(ConfigResult.NotFound);
|
|
1197
|
+
error.message = `Actor '${actorId}' was not found.`;
|
|
1198
|
+
throw error;
|
|
1163
1199
|
}
|
|
1164
1200
|
return {
|
|
1165
1201
|
actor: actor.ref,
|
|
@@ -1169,14 +1205,21 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1169
1205
|
};
|
|
1170
1206
|
}
|
|
1171
1207
|
|
|
1172
|
-
lookupRemoteActor(
|
|
1208
|
+
lookupRemoteActor(
|
|
1209
|
+
targetNodeRid: unknown,
|
|
1210
|
+
actorId: string,
|
|
1211
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1212
|
+
): MeshOperationId {
|
|
1173
1213
|
return this.observeStateful(
|
|
1174
1214
|
OperationKind.ActorLookup,
|
|
1175
1215
|
this.requireStateful().lookupRemoteActor(String(targetNodeRid), actorId, timeoutMs)
|
|
1176
1216
|
);
|
|
1177
1217
|
}
|
|
1178
1218
|
|
|
1179
|
-
destroyActor(
|
|
1219
|
+
destroyActor(
|
|
1220
|
+
actor: ZLinkBackendActorRef,
|
|
1221
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1222
|
+
): MeshOperationId {
|
|
1180
1223
|
return this.observeStateful(
|
|
1181
1224
|
OperationKind.ActorDestroy,
|
|
1182
1225
|
this.requireStateful().destroyActor(actor, timeoutMs)
|
|
@@ -1189,7 +1232,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1189
1232
|
targetSpotId: unknown,
|
|
1190
1233
|
targetSpotGeneration: bigint,
|
|
1191
1234
|
request: ServiceApplicationPayload,
|
|
1192
|
-
timeoutMs =
|
|
1235
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1193
1236
|
): MeshOperationId {
|
|
1194
1237
|
return this.observeStateful(
|
|
1195
1238
|
OperationKind.ActorJoin,
|
|
@@ -1216,7 +1259,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1216
1259
|
readonly ownerLeaseGeneration: bigint;
|
|
1217
1260
|
},
|
|
1218
1261
|
local: { readonly phase: 'admission'; readonly transferId: string },
|
|
1219
|
-
timeoutMs =
|
|
1262
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1220
1263
|
): MeshOperationId {
|
|
1221
1264
|
return this.observeStateful(
|
|
1222
1265
|
OperationKind.ActorJoin,
|
|
@@ -1237,7 +1280,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1237
1280
|
actor: ZLinkBackendActorRef,
|
|
1238
1281
|
targetNodeRid: unknown,
|
|
1239
1282
|
request: ServiceApplicationPayload,
|
|
1240
|
-
timeoutMs =
|
|
1283
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1241
1284
|
): MeshOperationId {
|
|
1242
1285
|
const target = String(targetNodeRid);
|
|
1243
1286
|
return this.observeStateful(
|
|
@@ -1256,7 +1299,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1256
1299
|
readonly ownerLeaseGeneration: bigint;
|
|
1257
1300
|
},
|
|
1258
1301
|
local: { readonly phase: 'admission'; readonly transferId: string },
|
|
1259
|
-
timeoutMs =
|
|
1302
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1260
1303
|
): MeshOperationId {
|
|
1261
1304
|
const target = String(targetNodeRid);
|
|
1262
1305
|
return this.observeStateful(
|
|
@@ -1296,7 +1339,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1296
1339
|
this.peerGeneration(String(actor.nodeRid)),
|
|
1297
1340
|
actor.generation,
|
|
1298
1341
|
encodeMultipart(parts),
|
|
1299
|
-
options?.timeoutMs ??
|
|
1342
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
1300
1343
|
)
|
|
1301
1344
|
);
|
|
1302
1345
|
}
|
|
@@ -1328,7 +1371,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1328
1371
|
this.peerGeneration(String(target.nodeRid)),
|
|
1329
1372
|
target.generation,
|
|
1330
1373
|
encodeMultipart(parts),
|
|
1331
|
-
options?.timeoutMs ??
|
|
1374
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1332
1375
|
source
|
|
1333
1376
|
)
|
|
1334
1377
|
);
|
|
@@ -1350,7 +1393,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1350
1393
|
closeActorBoundSession(
|
|
1351
1394
|
actor: ZLinkBackendActorRef,
|
|
1352
1395
|
expectedBindingGeneration: bigint,
|
|
1353
|
-
timeoutMs =
|
|
1396
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1354
1397
|
): MeshOperationId {
|
|
1355
1398
|
const binding = this.requireStateful().registry.binding(actor);
|
|
1356
1399
|
if (binding === undefined) {
|
|
@@ -1370,7 +1413,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1370
1413
|
leaveActor(
|
|
1371
1414
|
actor: ZLinkBackendActorRef,
|
|
1372
1415
|
expectedMembershipEpoch: bigint,
|
|
1373
|
-
timeoutMs =
|
|
1416
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1374
1417
|
): MeshOperationId {
|
|
1375
1418
|
return this.observeStateful(
|
|
1376
1419
|
OperationKind.ActorLeave,
|
|
@@ -1454,7 +1497,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1454
1497
|
nodeRoutingId: this.routingId,
|
|
1455
1498
|
lifecycleGeneration: this.lifecycleGeneration,
|
|
1456
1499
|
descriptorRevision: 1n,
|
|
1457
|
-
advertisedEndpoint: this.bindEndpoint ??
|
|
1500
|
+
advertisedEndpoint: this.bindEndpoint ?? UNSTARTED_DIAGNOSTIC_ENDPOINT,
|
|
1458
1501
|
channels,
|
|
1459
1502
|
state: 'preparing',
|
|
1460
1503
|
// Plaintext RouteMesh peers use the shared default admission identity.
|
|
@@ -1482,27 +1525,33 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1482
1525
|
}
|
|
1483
1526
|
|
|
1484
1527
|
private scheduleMaintenance(): void {
|
|
1485
|
-
if (this.closed
|
|
1486
|
-
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
|
+
}
|
|
1487
1538
|
}
|
|
1488
1539
|
|
|
1489
1540
|
private async pump(): Promise<void> {
|
|
1490
1541
|
if (this.isClosed() || this.pumping) return;
|
|
1491
1542
|
this.pumping = true;
|
|
1492
|
-
if (this.maintenanceTimer !== undefined) clearTimeout(this.maintenanceTimer);
|
|
1493
|
-
this.maintenanceTimer = undefined;
|
|
1494
1543
|
try {
|
|
1495
1544
|
do {
|
|
1496
|
-
const
|
|
1497
|
-
this.readable =
|
|
1498
|
-
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);
|
|
1499
1548
|
if (more) {
|
|
1500
1549
|
// Yield only after actual progress, retaining readiness across the
|
|
1501
1550
|
// existing batch limits until receive reports no data.
|
|
1502
|
-
this.readable
|
|
1551
|
+
this.readable |= 1;
|
|
1503
1552
|
await yieldToIO();
|
|
1504
1553
|
}
|
|
1505
|
-
} while (!this.closed && this.readable);
|
|
1554
|
+
} while (!this.closed && this.readable !== 0);
|
|
1506
1555
|
} finally {
|
|
1507
1556
|
this.pumping = false;
|
|
1508
1557
|
this.scheduleMaintenance();
|
|
@@ -1542,7 +1591,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1542
1591
|
operationKind: number,
|
|
1543
1592
|
pending: ServiceStatefulPendingOperation
|
|
1544
1593
|
): MeshOperationId {
|
|
1545
|
-
const id = { high:
|
|
1594
|
+
const id = { high: ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE, low: pending.id };
|
|
1546
1595
|
void pending.promise.then(
|
|
1547
1596
|
(result) => this.enqueueCompletion(id, operationKind, result),
|
|
1548
1597
|
(error) => this.enqueueCompletion(id, operationKind, requestFailureResult(error))
|
|
@@ -1593,7 +1642,7 @@ export class ZLinkNodeRawMeshBackend implements ZLinkBackendMeshNode {
|
|
|
1593
1642
|
this.completionCount -= 1;
|
|
1594
1643
|
if (this.completionCount === 0) {
|
|
1595
1644
|
this.clearCompletions();
|
|
1596
|
-
} else if (this.completionHead
|
|
1645
|
+
} else if (shouldCompactBackingArray(this.completionHead, this.completions.length)) {
|
|
1597
1646
|
this.completions.splice(0, this.completionHead);
|
|
1598
1647
|
this.completionHead = 0;
|
|
1599
1648
|
}
|
|
@@ -1749,7 +1798,7 @@ class RawServiceSpot implements ServiceSpot {
|
|
|
1749
1798
|
this.state,
|
|
1750
1799
|
routeFence,
|
|
1751
1800
|
parts,
|
|
1752
|
-
options?.timeoutMs ??
|
|
1801
|
+
options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
1753
1802
|
);
|
|
1754
1803
|
}
|
|
1755
1804
|
|
|
@@ -1825,7 +1874,7 @@ function entrySpotFenceVersion(generation: bigint): string {
|
|
|
1825
1874
|
}
|
|
1826
1875
|
|
|
1827
1876
|
class RawStreamSessionService implements StreamSessionService {
|
|
1828
|
-
private state =
|
|
1877
|
+
private state: StreamSessionRuntimeState = StreamSessionRuntimeState.Created;
|
|
1829
1878
|
private closed = false;
|
|
1830
1879
|
private readonly sessionTargets = new Map<string, RoutingId>();
|
|
1831
1880
|
|
|
@@ -1840,7 +1889,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1840
1889
|
|
|
1841
1890
|
start(): void {
|
|
1842
1891
|
if (this.closed) throw new Error('STREAM session service is closed.');
|
|
1843
|
-
this.state =
|
|
1892
|
+
this.state = StreamSessionRuntimeState.Started;
|
|
1844
1893
|
}
|
|
1845
1894
|
|
|
1846
1895
|
shutdown(_timeoutMs: number): RequestResultValue {
|
|
@@ -1851,7 +1900,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1851
1900
|
close(): void {
|
|
1852
1901
|
if (this.closed) return;
|
|
1853
1902
|
this.closed = true;
|
|
1854
|
-
this.state =
|
|
1903
|
+
this.state = StreamSessionRuntimeState.Closed;
|
|
1855
1904
|
this.sessionTargets.clear();
|
|
1856
1905
|
}
|
|
1857
1906
|
|
|
@@ -1868,7 +1917,11 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1868
1917
|
};
|
|
1869
1918
|
}
|
|
1870
1919
|
|
|
1871
|
-
lookupActor(
|
|
1920
|
+
lookupActor(
|
|
1921
|
+
targetNodeRid: RoutingId,
|
|
1922
|
+
actorId: string,
|
|
1923
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1924
|
+
): MeshOperationId {
|
|
1872
1925
|
this.requireStarted();
|
|
1873
1926
|
return this.observe(
|
|
1874
1927
|
OperationKind.ActorLookup,
|
|
@@ -1879,7 +1932,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1879
1932
|
bindActor(
|
|
1880
1933
|
sessionRid: RoutingId,
|
|
1881
1934
|
actor: ServiceActorRef,
|
|
1882
|
-
timeoutMs =
|
|
1935
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1883
1936
|
onBindingReplaced?: (
|
|
1884
1937
|
actorId: string,
|
|
1885
1938
|
retiredSession: ServiceRetiredBoundSessionRouteFence,
|
|
@@ -1899,7 +1952,6 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1899
1952
|
(targetSessionRid, payloadFrame) =>
|
|
1900
1953
|
this.deliver(targetSessionRid, actor.actorId, payloadFrame),
|
|
1901
1954
|
onBindingReplaced,
|
|
1902
|
-
serviceSessionBindingIngressPortIfRegistered(this),
|
|
1903
1955
|
actorAuthority
|
|
1904
1956
|
)
|
|
1905
1957
|
);
|
|
@@ -1909,7 +1961,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1909
1961
|
sessionRid: RoutingId,
|
|
1910
1962
|
actor: ServiceActorRef,
|
|
1911
1963
|
expectedBindingGeneration: bigint,
|
|
1912
|
-
timeoutMs =
|
|
1964
|
+
timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS
|
|
1913
1965
|
): MeshOperationId {
|
|
1914
1966
|
this.requireStarted();
|
|
1915
1967
|
return this.observe(
|
|
@@ -1982,7 +2034,7 @@ class RawStreamSessionService implements StreamSessionService {
|
|
|
1982
2034
|
}
|
|
1983
2035
|
|
|
1984
2036
|
private requireStarted(): void {
|
|
1985
|
-
if (this.state !==
|
|
2037
|
+
if (this.state !== StreamSessionRuntimeState.Started || this.closed) {
|
|
1986
2038
|
throw new Error('STREAM session service is not started.');
|
|
1987
2039
|
}
|
|
1988
2040
|
}
|
|
@@ -2224,7 +2276,7 @@ function decodeMultipartRecord(
|
|
|
2224
2276
|
};
|
|
2225
2277
|
}
|
|
2226
2278
|
const header = record.parts[0]!;
|
|
2227
|
-
const command = header[
|
|
2279
|
+
const command = header[SERVICE_WIRE_COMMAND_OFFSET]!;
|
|
2228
2280
|
const payloadFrame = record.parts[1]!;
|
|
2229
2281
|
const application = decodeApplicationEnvelope(payloadFrame);
|
|
2230
2282
|
const channelName = record.owner.startsWith('channel:')
|
|
@@ -2235,11 +2287,11 @@ function decodeMultipartRecord(
|
|
|
2235
2287
|
? { high: 0n, low: 0n }
|
|
2236
2288
|
: { high: 1n, low: record.correlation };
|
|
2237
2289
|
const kind =
|
|
2238
|
-
command ===
|
|
2290
|
+
command === ServiceWireCommand.nodeSend
|
|
2239
2291
|
? ReceiveKind.NodeSend
|
|
2240
|
-
: command ===
|
|
2292
|
+
: command === ServiceWireCommand.nodeRequest
|
|
2241
2293
|
? ReceiveKind.NodeRequest
|
|
2242
|
-
: command ===
|
|
2294
|
+
: command === ServiceWireCommand.channelSend
|
|
2243
2295
|
? ReceiveKind.ChannelSend
|
|
2244
2296
|
: ReceiveKind.ChannelRequest;
|
|
2245
2297
|
const operationKind =
|
|
@@ -2296,7 +2348,7 @@ function decodeStatefulRecord(
|
|
|
2296
2348
|
const operationId =
|
|
2297
2349
|
record.correlation === undefined
|
|
2298
2350
|
? { high: 0n, low: 0n }
|
|
2299
|
-
: { high:
|
|
2351
|
+
: { high: ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE, low: record.correlation };
|
|
2300
2352
|
const ingressLifecycle = receiveIngressLifecycle(record);
|
|
2301
2353
|
return {
|
|
2302
2354
|
kind: stateful.receiveKind,
|
|
@@ -2328,12 +2380,18 @@ function decodeStatefulRecord(
|
|
|
2328
2380
|
: decodeMultipart(application.payload),
|
|
2329
2381
|
...(stateful.isPending === undefined ? {} : { isPending: stateful.isPending }),
|
|
2330
2382
|
...(stateful.deadlineUnixMs === undefined ? {} : { deadlineUnixMs: stateful.deadlineUnixMs }),
|
|
2383
|
+
...(stateful.activationRecord === undefined
|
|
2384
|
+
? {}
|
|
2385
|
+
: { activationRecord: stateful.activationRecord }),
|
|
2331
2386
|
...(stateful.messageFollowOrigin === undefined
|
|
2332
2387
|
? {}
|
|
2333
2388
|
: { messageFollowOrigin: stateful.messageFollowOrigin }),
|
|
2334
2389
|
...(stateful.onTerminalCompletion === undefined
|
|
2335
2390
|
? {}
|
|
2336
2391
|
: { onTerminalCompletion: stateful.onTerminalCompletion }),
|
|
2392
|
+
...(stateful.onHandlerTurnStarted === undefined
|
|
2393
|
+
? {}
|
|
2394
|
+
: { onHandlerTurnStarted: stateful.onHandlerTurnStarted }),
|
|
2337
2395
|
reply(parts) {
|
|
2338
2396
|
if (stateful.reply === undefined) return SubmitResult.InvalidState;
|
|
2339
2397
|
return stateful.reply(RequestResult.Ok, 0, encodeMultipart(parts))
|
|
@@ -2441,7 +2499,7 @@ function readyDomain(domain: ServiceMailboxDomain): number {
|
|
|
2441
2499
|
/**
|
|
2442
2500
|
* The one classification of a failed node/channel/stateful request into its
|
|
2443
2501
|
* completion terminal. A binding REQUEST result is Core's decision and is kept
|
|
2444
|
-
* as is; a submit failure
|
|
2502
|
+
* as is; a submit failure is classified from its submission or completion phase.
|
|
2445
2503
|
* A reply that could not be decoded is a protocol
|
|
2446
2504
|
* failure (spec 32-framework-error-model:91-92). The failure code is a wire
|
|
2447
2505
|
* code, so a Core result carries 0.
|
|
@@ -2451,14 +2509,19 @@ export function requestFailureResult(error: unknown): RawServiceRequestResult {
|
|
|
2451
2509
|
if (isZLinkBackendResultError(failure)) {
|
|
2452
2510
|
return {
|
|
2453
2511
|
terminalResult:
|
|
2454
|
-
failure.operation === 'request'
|
|
2512
|
+
failure.operation === 'request'
|
|
2513
|
+
? failure.result
|
|
2514
|
+
: submitToRequestResult(failure.result, failure.phase),
|
|
2455
2515
|
failureCode: 0
|
|
2456
2516
|
};
|
|
2457
2517
|
}
|
|
2458
2518
|
// requestProtocolError(16): the schema terminal-failure-integrity rule
|
|
2459
2519
|
// forbids a typed terminal (104) with failure none.
|
|
2460
2520
|
if (failure instanceof ServiceWireProtocolError) {
|
|
2461
|
-
return {
|
|
2521
|
+
return {
|
|
2522
|
+
terminalResult: RequestResult.ProtocolError,
|
|
2523
|
+
failureCode: ServiceWireFrameworkErrorCode.requestProtocolError
|
|
2524
|
+
};
|
|
2462
2525
|
}
|
|
2463
2526
|
if (failure instanceof ZLinkFrameworkException) {
|
|
2464
2527
|
return internalFrameworkWireReply(failure);
|
|
@@ -2469,32 +2532,10 @@ export function requestFailureResult(error: unknown): RawServiceRequestResult {
|
|
|
2469
2532
|
if (failure instanceof OperationCancelledError) {
|
|
2470
2533
|
return { terminalResult: RequestResult.NotConnected, failureCode: 0 };
|
|
2471
2534
|
}
|
|
2472
|
-
return {
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
switch (result) {
|
|
2477
|
-
case SubmitResult.Backpressured:
|
|
2478
|
-
return RequestResult.Backpressured;
|
|
2479
|
-
case SubmitResult.NotConnected:
|
|
2480
|
-
return RequestResult.NotConnected;
|
|
2481
|
-
case SubmitResult.NotFound:
|
|
2482
|
-
return RequestResult.NotFound;
|
|
2483
|
-
case SubmitResult.NotAdmitted:
|
|
2484
|
-
return RequestResult.Rejected;
|
|
2485
|
-
case SubmitResult.InvalidHandle:
|
|
2486
|
-
case SubmitResult.InvalidArgument:
|
|
2487
|
-
case SubmitResult.ThreadViolation:
|
|
2488
|
-
return RequestResult.InvalidArgument;
|
|
2489
|
-
case SubmitResult.InvalidState:
|
|
2490
|
-
return RequestResult.InvalidState;
|
|
2491
|
-
case SubmitResult.NotSupported:
|
|
2492
|
-
return RequestResult.NotSupported;
|
|
2493
|
-
case SubmitResult.Terminated:
|
|
2494
|
-
return RequestResult.Terminated;
|
|
2495
|
-
default:
|
|
2496
|
-
return RequestResult.InternalError;
|
|
2497
|
-
}
|
|
2535
|
+
return {
|
|
2536
|
+
terminalResult: RequestResult.InternalError,
|
|
2537
|
+
failureCode: ServiceWireFrameworkErrorCode.requestFailed
|
|
2538
|
+
};
|
|
2498
2539
|
}
|
|
2499
2540
|
|
|
2500
2541
|
function encodeMultipart(parts: MessageLike | readonly MessageLike[]) {
|
|
@@ -2533,7 +2574,10 @@ function encodeMultipartApplicationFrame(parts: MessageLike | readonly MessageLi
|
|
|
2533
2574
|
|
|
2534
2575
|
function decodeApplicationEnvelope(frame: Uint8Array) {
|
|
2535
2576
|
const bytes = Buffer.from(frame.buffer, frame.byteOffset, frame.byteLength);
|
|
2536
|
-
if (
|
|
2577
|
+
if (
|
|
2578
|
+
bytes.length < APPLICATION_PAYLOAD_MINIMUM_FIELD_BYTES ||
|
|
2579
|
+
bytes[0] !== APPLICATION_PAYLOAD_VERSION
|
|
2580
|
+
) {
|
|
2537
2581
|
throw new ServiceWireProtocolError('Invalid application envelope.');
|
|
2538
2582
|
}
|
|
2539
2583
|
const bodyLength = bytes.readUInt32BE(1);
|
|
@@ -2631,22 +2675,35 @@ function requireRawReadyBatch(batch: ReadyBatch): RawReadyBatch {
|
|
|
2631
2675
|
return batch;
|
|
2632
2676
|
}
|
|
2633
2677
|
|
|
2634
|
-
function stateCode(state: ServiceNodeDescriptor['state']):
|
|
2635
|
-
|
|
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
|
+
}
|
|
2636
2693
|
}
|
|
2637
2694
|
|
|
2638
2695
|
function peerStateCode(state: ServiceNodeDescriptor['state']): number {
|
|
2639
2696
|
switch (state) {
|
|
2640
2697
|
case 'preparing':
|
|
2641
|
-
return
|
|
2698
|
+
return MeshPeerRuntimeState.Preparing;
|
|
2642
2699
|
case 'serving':
|
|
2643
2700
|
case 'retiring':
|
|
2644
|
-
return
|
|
2701
|
+
return MeshPeerRuntimeState.Serving;
|
|
2645
2702
|
case 'draining':
|
|
2646
|
-
return
|
|
2703
|
+
return MeshPeerRuntimeState.Draining;
|
|
2647
2704
|
case 'stopped':
|
|
2648
2705
|
case 'error':
|
|
2649
|
-
return
|
|
2706
|
+
return MeshPeerRuntimeState.Closed;
|
|
2650
2707
|
}
|
|
2651
2708
|
}
|
|
2652
2709
|
|
|
@@ -2659,15 +2716,15 @@ function createLifecycleGeneration(): bigint {
|
|
|
2659
2716
|
}
|
|
2660
2717
|
|
|
2661
2718
|
function requirePositivePlacementValue(value: number, name: string): number {
|
|
2662
|
-
if (!
|
|
2663
|
-
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}.`);
|
|
2664
2721
|
}
|
|
2665
2722
|
return value;
|
|
2666
2723
|
}
|
|
2667
2724
|
|
|
2668
2725
|
function requirePublicWeight(value: number, name: string): number {
|
|
2669
|
-
if (!
|
|
2670
|
-
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}.`);
|
|
2671
2728
|
}
|
|
2672
2729
|
return value;
|
|
2673
2730
|
}
|