@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +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/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +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 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- 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 +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- 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 +49 -153
- 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 +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- 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 +7 -27
- 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 +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
- 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 +41 -34
- 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 +4 -3
- 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 +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- 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/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- 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.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- 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 +79 -94
- 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 +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- 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 -171
- 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 +15 -28
- 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 +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- 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 +309 -336
- 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/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- 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 +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- 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 +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- 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 +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- 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/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -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 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- 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 +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- 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 +85 -218
- 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 +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- 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 +14 -37
- 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 +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- 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 +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- 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 +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- 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 +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- 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/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- 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 +127 -125
- 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 +63 -160
- 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 -320
- 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 +16 -57
- 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 +175 -356
- 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 +457 -482
- 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/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- 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 +59 -47
- 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 +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- 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 +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- 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
|
@@ -20,25 +20,19 @@ class OperationCancelledError extends Error {
|
|
|
20
20
|
}
|
|
21
21
|
exports.OperationCancelledError = OperationCancelledError;
|
|
22
22
|
const systemClock = {
|
|
23
|
-
|
|
24
|
-
// A request promise is live work. Raw RouteMesh polling deliberately
|
|
25
|
-
// uses unref'ed timers, so this deadline is the handle that keeps a
|
|
26
|
-
// submit() caller alive until a reply, cancellation, or deadline settles.
|
|
27
|
-
return setTimeout(callback, delayMs);
|
|
28
|
-
},
|
|
29
|
-
clearTimeout(handle) {
|
|
30
|
-
clearTimeout(handle);
|
|
31
|
-
}
|
|
23
|
+
now: () => performance.now()
|
|
32
24
|
};
|
|
33
25
|
/** Owns request completion so reply, timeout, cancellation, and shutdown race safely. */
|
|
34
26
|
class OperationRegistry {
|
|
35
27
|
clock;
|
|
28
|
+
onPendingChanged;
|
|
36
29
|
entries = new Map();
|
|
37
30
|
nextId = 1n;
|
|
38
|
-
|
|
31
|
+
deadlineCursor;
|
|
39
32
|
closed = false;
|
|
40
|
-
constructor(clock = systemClock) {
|
|
33
|
+
constructor(clock = systemClock, onPendingChanged) {
|
|
41
34
|
this.clock = clock;
|
|
35
|
+
this.onPendingChanged = onPendingChanged;
|
|
42
36
|
}
|
|
43
37
|
register(timeoutMs, timeoutOwner = 'registry') {
|
|
44
38
|
if (this.closed)
|
|
@@ -47,20 +41,20 @@ class OperationRegistry {
|
|
|
47
41
|
throw new RangeError('timeoutMs must be a non-negative finite number.');
|
|
48
42
|
}
|
|
49
43
|
const id = this.nextId++;
|
|
50
|
-
const generation = this.generation;
|
|
51
44
|
let resolve;
|
|
52
45
|
let reject;
|
|
53
46
|
const promise = new Promise((onResolve, onReject) => {
|
|
54
47
|
resolve = onResolve;
|
|
55
48
|
reject = onReject;
|
|
56
49
|
});
|
|
57
|
-
const entry = {
|
|
50
|
+
const entry = {
|
|
51
|
+
deadlineMs: timeoutOwner === 'registry' ? this.clock.now() + timeoutMs : undefined,
|
|
52
|
+
resolve,
|
|
53
|
+
reject
|
|
54
|
+
};
|
|
58
55
|
this.entries.set(id, entry);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (timeoutOwner === 'registry') {
|
|
62
|
-
entry.timer = this.clock.setTimeout(() => this.rejectIfCurrent(id, generation, new OperationTimeoutError(id)), timeoutMs);
|
|
63
|
-
}
|
|
56
|
+
if (this.entries.size === 1)
|
|
57
|
+
this.onPendingChanged?.();
|
|
64
58
|
return { id, promise };
|
|
65
59
|
}
|
|
66
60
|
complete(id, value) {
|
|
@@ -71,9 +65,6 @@ class OperationRegistry {
|
|
|
71
65
|
return true;
|
|
72
66
|
}
|
|
73
67
|
fail(id, reason) {
|
|
74
|
-
return this.failCore(id, reason);
|
|
75
|
-
}
|
|
76
|
-
failCore(id, reason) {
|
|
77
68
|
const entry = this.take(id);
|
|
78
69
|
if (entry === undefined)
|
|
79
70
|
return false;
|
|
@@ -81,7 +72,7 @@ class OperationRegistry {
|
|
|
81
72
|
return true;
|
|
82
73
|
}
|
|
83
74
|
cancel(id, message) {
|
|
84
|
-
return this.
|
|
75
|
+
return this.fail(id, new OperationCancelledError(id, message));
|
|
85
76
|
}
|
|
86
77
|
isPending(id) {
|
|
87
78
|
return this.entries.has(id);
|
|
@@ -90,39 +81,38 @@ class OperationRegistry {
|
|
|
90
81
|
if (this.closed)
|
|
91
82
|
return;
|
|
92
83
|
this.closed = true;
|
|
93
|
-
this.
|
|
94
|
-
|
|
95
|
-
this.
|
|
96
|
-
for (const [, entry] of pending)
|
|
97
|
-
this.clearTimer(entry);
|
|
98
|
-
for (const [id, entry] of pending) {
|
|
99
|
-
entry.reject(new OperationCancelledError(id, reason));
|
|
100
|
-
}
|
|
84
|
+
for (const id of this.entries.keys())
|
|
85
|
+
this.cancel(id, reason);
|
|
86
|
+
this.deadlineCursor = undefined;
|
|
101
87
|
}
|
|
102
88
|
get size() {
|
|
103
89
|
return this.entries.size;
|
|
104
90
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
91
|
+
expire(nowMs, turnDeadlineMs) {
|
|
92
|
+
let expired = 0;
|
|
93
|
+
while (this.clock.now() < turnDeadlineMs) {
|
|
94
|
+
this.deadlineCursor ??= this.entries.entries();
|
|
95
|
+
const current = this.deadlineCursor.next();
|
|
96
|
+
if (current.done === true) {
|
|
97
|
+
this.deadlineCursor = undefined;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
const [id, entry] = current.value;
|
|
101
|
+
if (entry.deadlineMs !== undefined && entry.deadlineMs <= nowMs) {
|
|
102
|
+
if (this.fail(id, new OperationTimeoutError(id)))
|
|
103
|
+
expired++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return expired;
|
|
112
107
|
}
|
|
113
108
|
take(id) {
|
|
114
109
|
const entry = this.entries.get(id);
|
|
115
110
|
if (entry === undefined)
|
|
116
111
|
return undefined;
|
|
117
112
|
this.entries.delete(id);
|
|
118
|
-
this.
|
|
113
|
+
if (this.entries.size === 0)
|
|
114
|
+
this.onPendingChanged?.();
|
|
119
115
|
return entry;
|
|
120
116
|
}
|
|
121
|
-
clearTimer(entry) {
|
|
122
|
-
if (entry.timer === undefined)
|
|
123
|
-
return;
|
|
124
|
-
this.clock.clearTimeout(entry.timer);
|
|
125
|
-
entry.timer = undefined;
|
|
126
|
-
}
|
|
127
117
|
}
|
|
128
118
|
exports.OperationRegistry = OperationRegistry;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { ApplicationIngressRecordOwner } from '../application-jobs/application-ingress-record-owner';
|
|
2
|
+
import type { ApplicationJobQueuePort } from '../application-jobs/contracts';
|
|
1
3
|
import type { ZLinkRawBindingPort } from '../backend/raw-binding-port';
|
|
2
4
|
import { SubmitResult } from '../backend/runtime-values';
|
|
3
|
-
import type { ApplicationJobQueuePort } from '../application-jobs/contracts';
|
|
4
|
-
import { ApplicationIngressRecordOwner } from '../application-jobs/application-ingress-record-owner';
|
|
5
5
|
import { type PendingOperation } from './operation-registry';
|
|
6
6
|
import { ServiceLivenessRegistry, type ServiceLivenessTick } from './service-liveness-registry';
|
|
7
7
|
import { ServiceMailbox, type ServiceMailboxRecord } from './service-mailbox';
|
|
@@ -29,6 +29,7 @@ export interface RawServiceIngressRecord {
|
|
|
29
29
|
}
|
|
30
30
|
export type RawServiceIngressHandler = (record: RawServiceIngressRecord) => RawServicePumpResult | undefined | Promise<RawServicePumpResult | undefined>;
|
|
31
31
|
export interface RawServiceMeshRuntimeOptions {
|
|
32
|
+
readonly onPendingOperationsChanged?: () => void;
|
|
32
33
|
readonly descriptor: ServiceNodeDescriptor;
|
|
33
34
|
readonly resolveAdvertisedEndpoint?: (boundEndpoint: string) => string;
|
|
34
35
|
readonly probeIntervalMs?: number;
|
|
@@ -47,6 +48,7 @@ export interface RawServiceMeshRuntimeOptions {
|
|
|
47
48
|
readonly command?: number;
|
|
48
49
|
}) => void;
|
|
49
50
|
}
|
|
51
|
+
export declare const RAW_MESH_RECEIVE_TIME_BUDGET_MS = 2;
|
|
50
52
|
/**
|
|
51
53
|
* RouteMesh M6A runtime built only on the public raw binding package.
|
|
52
54
|
* It owns protocol, admission, mailbox, request and liveness state.
|
|
@@ -105,7 +107,6 @@ export declare class RawServiceMeshRuntime {
|
|
|
105
107
|
requestToNode(targetNodeRoutingId: string, payload: ServiceApplicationPayloadInput, timeoutMs: number): PendingOperation<RawServiceRequestResult>;
|
|
106
108
|
requestToChannel(channelName: string, payload: ServiceApplicationPayloadInput, timeoutMs: number): PendingOperation<RawServiceRequestResult>;
|
|
107
109
|
private selectChannelTarget;
|
|
108
|
-
private isLocalOrReadyPeer;
|
|
109
110
|
setServiceIngress(handler: RawServiceIngressHandler): void;
|
|
110
111
|
reserveLocalIngress(signal?: AbortSignal): Promise<ApplicationIngressRecordOwner>;
|
|
111
112
|
sendService(targetNodeRoutingId: string, parts: readonly Uint8Array[]): Promise<boolean>;
|
|
@@ -113,13 +114,15 @@ export declare class RawServiceMeshRuntime {
|
|
|
113
114
|
replyService(record: Pick<RawServiceIngressRecord, 'sourceRoutingId' | 'sourceRoute' | 'requestSequence' | 'reply'>, parts: readonly Uint8Array[]): void;
|
|
114
115
|
reply(request: ServiceMailboxRecord, payload: ServiceApplicationPayloadInput, terminalResult?: number, failureCode?: number): void;
|
|
115
116
|
pumpOne(nowMs?: number, observe?: RawServicePumpObserver): Promise<RawServicePumpResult>;
|
|
116
|
-
setReadableHandler(handler: () => void): void;
|
|
117
|
+
setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void;
|
|
117
118
|
/** Returns whether a receive budget ended before no-data; idle ticks only maintain peers. */
|
|
118
|
-
pumpBatch(receiveReady?: boolean): Promise<boolean>;
|
|
119
|
+
pumpBatch(receiveReady?: boolean, routeReady?: boolean): Promise<boolean>;
|
|
119
120
|
private receiveOne;
|
|
120
121
|
private reportProtocolError;
|
|
121
122
|
private replyGenericProtocolError;
|
|
122
123
|
private processReceived;
|
|
124
|
+
expireOperations(nowMs: number, turnDeadlineMs: number): number;
|
|
125
|
+
get pendingOperationCount(): number;
|
|
123
126
|
tickLiveness(nowMs?: number): Promise<ServiceLivenessTick>;
|
|
124
127
|
/**
|
|
125
128
|
* The socket's one route observer (Core ROUTER §10.1). It replaces the
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RawServiceMeshRuntime = void 0;
|
|
4
|
-
const
|
|
3
|
+
exports.RawServiceMeshRuntime = exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS = void 0;
|
|
4
|
+
const node_os_1 = require("node:os");
|
|
5
5
|
const application_ingress_record_owner_1 = require("../application-jobs/application-ingress-record-owner");
|
|
6
|
+
const submission_result_1 = require("../messaging/submission-result");
|
|
7
|
+
const runtime_values_1 = require("../backend/runtime-values");
|
|
8
|
+
const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
|
|
6
9
|
const operation_registry_1 = require("./operation-registry");
|
|
7
10
|
const service_liveness_registry_1 = require("./service-liveness-registry");
|
|
8
11
|
const service_mailbox_1 = require("./service-mailbox");
|
|
9
12
|
const service_topology_registry_1 = require("./service-topology-registry");
|
|
10
|
-
const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
|
|
11
13
|
const service_wire_codec_1 = require("./service-wire-codec");
|
|
12
14
|
const service_wire_constants_generated_1 = require("./service-wire-constants.generated");
|
|
15
|
+
const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
|
|
16
|
+
const nativeErrnoValues = node_os_1.constants.errno;
|
|
13
17
|
// Framework error code 13 (RequestTargetNotFound) is encoded as 14 on a
|
|
14
18
|
// RequestResult.NotFound reply. Boundary transport results keep failureCode 0.
|
|
15
|
-
const
|
|
19
|
+
const RAW_MESH_RECEIVE_RECORD_BUDGET = 64;
|
|
20
|
+
const RAW_MESH_RECEIVE_BYTE_BUDGET = 4 * 1024 * 1024;
|
|
21
|
+
exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS = 2;
|
|
22
|
+
const REQUEST_TARGET_NOT_FOUND_FAILURE_CODE = service_wire_constants_generated_1.ServiceWireFrameworkErrorCode.requestTargetNotFound;
|
|
16
23
|
const livenessCodec = (0, service_wire_codec_1.createServiceWireCodec)({
|
|
17
|
-
magic:
|
|
18
|
-
major:
|
|
24
|
+
magic: service_wire_constants_generated_1.SERVICE_WIRE_MAGIC,
|
|
25
|
+
major: service_wire_constants_generated_1.SERVICE_WIRE_MAJOR,
|
|
19
26
|
commands: service_wire_m6a_codec_1.M6aServiceWireCommand
|
|
20
27
|
});
|
|
21
28
|
/**
|
|
@@ -26,7 +33,7 @@ class RawServiceMeshRuntime {
|
|
|
26
33
|
topology;
|
|
27
34
|
mailbox;
|
|
28
35
|
liveness;
|
|
29
|
-
operations
|
|
36
|
+
operations;
|
|
30
37
|
expectedPeers = new Map();
|
|
31
38
|
endpointOnlyPeers = new Set();
|
|
32
39
|
peerConnectionIntentRemoved = new Set();
|
|
@@ -51,6 +58,7 @@ class RawServiceMeshRuntime {
|
|
|
51
58
|
serviceIngress;
|
|
52
59
|
closed = false;
|
|
53
60
|
constructor(options) {
|
|
61
|
+
this.operations = new operation_registry_1.OperationRegistry(undefined, options.onPendingOperationsChanged);
|
|
54
62
|
this.descriptor = options.descriptor;
|
|
55
63
|
this.topology = new service_topology_registry_1.ServiceTopologyRegistry(options.descriptor);
|
|
56
64
|
this.mailbox = new service_mailbox_1.ServiceMailbox(options.onMailboxReady);
|
|
@@ -102,32 +110,32 @@ class RawServiceMeshRuntime {
|
|
|
102
110
|
}
|
|
103
111
|
connectPeer(endpoint, expected) {
|
|
104
112
|
this.requireStarted().connectToRoutingId(expected.nodeRoutingId, endpoint);
|
|
105
|
-
this.expectedPeers.set(expected.nodeRoutingId, {
|
|
113
|
+
this.expectedPeers.set(expected.nodeRoutingId, Object.assign(this.expectedPeers.get(expected.nodeRoutingId) ?? {}, {
|
|
106
114
|
meshName: expected.meshName,
|
|
107
115
|
nodeRoutingId: expected.nodeRoutingId,
|
|
108
116
|
endpoint,
|
|
109
117
|
securityIdentity: expected.securityIdentity,
|
|
110
118
|
lifecycleGeneration: expected.lifecycleGeneration
|
|
111
|
-
});
|
|
119
|
+
}));
|
|
112
120
|
}
|
|
113
121
|
connectPeerByRoutingId(endpoint, nodeRoutingId, securityIdentity, lifecycleGeneration) {
|
|
114
122
|
this.requireStarted().connectToRoutingId(nodeRoutingId, endpoint);
|
|
115
|
-
this.expectedPeers.set(nodeRoutingId, {
|
|
123
|
+
this.expectedPeers.set(nodeRoutingId, Object.assign(this.expectedPeers.get(nodeRoutingId) ?? {}, {
|
|
116
124
|
meshName: this.topology.localDescriptor().meshName,
|
|
117
125
|
nodeRoutingId,
|
|
118
126
|
endpoint,
|
|
119
127
|
securityIdentity,
|
|
120
128
|
lifecycleGeneration
|
|
121
|
-
});
|
|
129
|
+
}));
|
|
122
130
|
}
|
|
123
131
|
expectPeerByRoutingId(endpoint, nodeRoutingId, securityIdentity, lifecycleGeneration) {
|
|
124
|
-
this.expectedPeers.set(nodeRoutingId, {
|
|
132
|
+
this.expectedPeers.set(nodeRoutingId, Object.assign(this.expectedPeers.get(nodeRoutingId) ?? {}, {
|
|
125
133
|
meshName: this.topology.localDescriptor().meshName,
|
|
126
134
|
nodeRoutingId,
|
|
127
135
|
endpoint,
|
|
128
136
|
securityIdentity,
|
|
129
137
|
lifecycleGeneration
|
|
130
|
-
});
|
|
138
|
+
}));
|
|
131
139
|
}
|
|
132
140
|
connectPeerEndpoint(endpoint) {
|
|
133
141
|
this.requireStarted().connect(endpoint);
|
|
@@ -215,11 +223,21 @@ class RawServiceMeshRuntime {
|
|
|
215
223
|
listener(nodeRoutingId);
|
|
216
224
|
}
|
|
217
225
|
async announcePeer(nodeRoutingId) {
|
|
218
|
-
|
|
226
|
+
const expected = this.expectedPeers.get(nodeRoutingId);
|
|
227
|
+
const generation = this.selectedRoutes.get(nodeRoutingId);
|
|
228
|
+
if (expected === undefined ||
|
|
229
|
+
generation === undefined ||
|
|
230
|
+
expected.helloSubmittedGeneration === generation ||
|
|
231
|
+
this.peerAdmissionSealed?.() === true)
|
|
219
232
|
return false;
|
|
220
|
-
|
|
233
|
+
const accepted = await this.send(nodeRoutingId, [
|
|
221
234
|
(0, service_wire_m6a_codec_1.encodeRouteMeshAdmission)(service_wire_m6a_codec_1.M6aServiceWireCommand.hello, this.topology.localDescriptor())
|
|
222
235
|
]);
|
|
236
|
+
if (accepted &&
|
|
237
|
+
this.expectedPeers.get(nodeRoutingId) === expected &&
|
|
238
|
+
this.selectedRoutes.get(nodeRoutingId) === generation)
|
|
239
|
+
expected.helloSubmittedGeneration = generation;
|
|
240
|
+
return accepted;
|
|
223
241
|
}
|
|
224
242
|
isPeerRouteReady(nodeRoutingId, lifecycleGeneration) {
|
|
225
243
|
// Admission is bound to the observed selected route: the route observer
|
|
@@ -233,11 +251,6 @@ class RawServiceMeshRuntime {
|
|
|
233
251
|
async announceExpectedPeers() {
|
|
234
252
|
let accepted = 0;
|
|
235
253
|
for (const nodeRoutingId of this.expectedPeers.keys()) {
|
|
236
|
-
// Admission is a one-time fence for the current selected route.
|
|
237
|
-
// Re-sending Hello after the peer is admitted would re-run admission on
|
|
238
|
-
// every poll and reset the liveness record before application traffic
|
|
239
|
-
// can use the route. A peer whose selected route ended is removed by the
|
|
240
|
-
// route observer and remains eligible for the next admission attempt.
|
|
241
254
|
if (this.topology.peer(nodeRoutingId) !== undefined)
|
|
242
255
|
continue;
|
|
243
256
|
if (await this.announcePeer(nodeRoutingId))
|
|
@@ -271,7 +284,6 @@ class RawServiceMeshRuntime {
|
|
|
271
284
|
for (const peer of this.topology.peers()) {
|
|
272
285
|
await this.send(peer.descriptor.nodeRoutingId, [update]);
|
|
273
286
|
}
|
|
274
|
-
await this.announceExpectedPeers();
|
|
275
287
|
}
|
|
276
288
|
replaceDiscoveredNotRequired(descriptors) {
|
|
277
289
|
this.topology.replaceDiscoveredNotRequired(descriptors);
|
|
@@ -291,25 +303,6 @@ class RawServiceMeshRuntime {
|
|
|
291
303
|
return selection.submitResult;
|
|
292
304
|
const selected = selection.peer;
|
|
293
305
|
const applicationFrame = this.applicationFrame(payload);
|
|
294
|
-
if (selected.descriptor.nodeRoutingId === this.descriptor.nodeRoutingId) {
|
|
295
|
-
const applicationJobOwner = await this.reserveLocalIngress();
|
|
296
|
-
try {
|
|
297
|
-
const applicationJob = await applicationJobOwner.acquire('application');
|
|
298
|
-
const accepted = this.mailbox.tryEnqueue({
|
|
299
|
-
owner: `channel:${channelName}`,
|
|
300
|
-
domain: 'application',
|
|
301
|
-
parts: [(0, service_wire_m6a_codec_1.encodeChannelSendHeader)(channelName), applicationFrame],
|
|
302
|
-
sourceRoutingId: this.descriptor.nodeRoutingId,
|
|
303
|
-
applicationJob
|
|
304
|
-
});
|
|
305
|
-
if (!accepted)
|
|
306
|
-
applicationJob.close();
|
|
307
|
-
return accepted ? runtime_values_1.SubmitResult.Ok : runtime_values_1.SubmitResult.NotAdmitted;
|
|
308
|
-
}
|
|
309
|
-
finally {
|
|
310
|
-
applicationJobOwner.close();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
306
|
return (await this.send(selected.descriptor.nodeRoutingId, [
|
|
314
307
|
(0, service_wire_m6a_codec_1.encodeChannelSendHeader)(channelName),
|
|
315
308
|
applicationFrame
|
|
@@ -330,7 +323,7 @@ class RawServiceMeshRuntime {
|
|
|
330
323
|
return this.requestToTarget(selection.peer.descriptor.nodeRoutingId, payload, timeoutMs, channelName);
|
|
331
324
|
}
|
|
332
325
|
selectChannelTarget(channelName) {
|
|
333
|
-
const selected = this.topology.selectChannel(channelName, (peer) => this.
|
|
326
|
+
const selected = this.topology.selectChannel(channelName, (peer) => this.isPeerRouteReady(peer.descriptor.nodeRoutingId));
|
|
334
327
|
if (selected !== undefined)
|
|
335
328
|
return { kind: 'selected', peer: selected };
|
|
336
329
|
return this.topology.hasKnownChannelTarget(channelName)
|
|
@@ -348,9 +341,6 @@ class RawServiceMeshRuntime {
|
|
|
348
341
|
}
|
|
349
342
|
};
|
|
350
343
|
}
|
|
351
|
-
isLocalOrReadyPeer(nodeRoutingId) {
|
|
352
|
-
return nodeRoutingId === this.descriptor.nodeRoutingId || this.isPeerRouteReady(nodeRoutingId);
|
|
353
|
-
}
|
|
354
344
|
setServiceIngress(handler) {
|
|
355
345
|
if (this.serviceIngress !== undefined && this.serviceIngress !== handler) {
|
|
356
346
|
throw new Error('Raw service ingress is already registered.');
|
|
@@ -399,15 +389,16 @@ class RawServiceMeshRuntime {
|
|
|
399
389
|
this.requireStarted().setReadableHandler(handler);
|
|
400
390
|
}
|
|
401
391
|
/** Returns whether a receive budget ended before no-data; idle ticks only maintain peers. */
|
|
402
|
-
async pumpBatch(receiveReady = true) {
|
|
403
|
-
|
|
392
|
+
async pumpBatch(receiveReady = true, routeReady = false) {
|
|
393
|
+
if (routeReady)
|
|
394
|
+
await this.observeSelectedRoutes();
|
|
404
395
|
const startedAtMs = performance.now();
|
|
405
396
|
let messages = 0;
|
|
406
397
|
let bytes = 0;
|
|
407
398
|
const observe = (_source, byteCount) => {
|
|
408
399
|
bytes += byteCount;
|
|
409
400
|
};
|
|
410
|
-
while (receiveReady && messages <
|
|
401
|
+
while (receiveReady && messages < RAW_MESH_RECEIVE_RECORD_BUDGET && !this.closed) {
|
|
411
402
|
const result = await this.receiveOne(performance.now(), observe);
|
|
412
403
|
if (result === 'noData') {
|
|
413
404
|
receiveReady = false;
|
|
@@ -416,7 +407,8 @@ class RawServiceMeshRuntime {
|
|
|
416
407
|
messages += 1;
|
|
417
408
|
// Core owns the per-peer fair-queue cursor. The Framework limit bounds
|
|
418
409
|
// the entire round, so changing peers does not renew its byte/count budget.
|
|
419
|
-
if (bytes >=
|
|
410
|
+
if (bytes >= RAW_MESH_RECEIVE_BYTE_BUDGET ||
|
|
411
|
+
performance.now() - startedAtMs >= exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS)
|
|
420
412
|
break;
|
|
421
413
|
}
|
|
422
414
|
if (!this.closed) {
|
|
@@ -527,7 +519,9 @@ class RawServiceMeshRuntime {
|
|
|
527
519
|
if (expected !== undefined &&
|
|
528
520
|
(expected.meshName !== descriptor.meshName ||
|
|
529
521
|
expected.nodeRoutingId !== descriptor.nodeRoutingId)) {
|
|
530
|
-
await this.send(received.sourceRid, [
|
|
522
|
+
await this.send(received.sourceRid, [
|
|
523
|
+
(0, service_wire_m6a_codec_1.encodeReject)((0, service_wire_codec_generated_1.enumWireRejectReason)('identityMismatch'))
|
|
524
|
+
]);
|
|
531
525
|
return 'infrastructure';
|
|
532
526
|
}
|
|
533
527
|
const result = this.admitPeer(descriptor, routeConnectionId(received.routeGeneration), nowMs, expected);
|
|
@@ -558,23 +552,7 @@ class RawServiceMeshRuntime {
|
|
|
558
552
|
if (header.command === service_wire_m6a_codec_1.M6aServiceWireCommand.reject) {
|
|
559
553
|
if (received.parts.length !== 1)
|
|
560
554
|
return 'protocolError';
|
|
561
|
-
|
|
562
|
-
// Keep an already admitted peer: a reject of an earlier Hello on the
|
|
563
|
-
// same selected route does not end the admission that succeeded.
|
|
564
|
-
if (reason === 4 && this.topology.peer(received.sourceRid) === undefined) {
|
|
565
|
-
const expected = this.expectedPeers.get(received.sourceRid);
|
|
566
|
-
const local = this.topology.localDescriptor();
|
|
567
|
-
this.topology.markNotRequired({
|
|
568
|
-
...local,
|
|
569
|
-
nodeRoutingId: received.sourceRid,
|
|
570
|
-
lifecycleGeneration: 1n,
|
|
571
|
-
descriptorRevision: 1n,
|
|
572
|
-
advertisedEndpoint: expected?.endpoint ?? local.advertisedEndpoint,
|
|
573
|
-
channels: [],
|
|
574
|
-
objectRole: 'client'
|
|
575
|
-
});
|
|
576
|
-
this.retireNotRequiredExpectedPeer(received.sourceRid);
|
|
577
|
-
}
|
|
555
|
+
(0, service_wire_m6a_codec_1.decodeReject)(received.parts[0]);
|
|
578
556
|
return 'infrastructure';
|
|
579
557
|
}
|
|
580
558
|
const peer = this.topology.peer(received.sourceRid);
|
|
@@ -587,16 +565,16 @@ class RawServiceMeshRuntime {
|
|
|
587
565
|
const record = livenessCodec.decodeLivenessRecord(received.parts[0]);
|
|
588
566
|
if (record.command === service_wire_m6a_codec_1.M6aServiceWireCommand.livenessProbe) {
|
|
589
567
|
const ack = this.liveness.acknowledgeProbe(received.sourceRid, peer.connectionId, record.probeId);
|
|
590
|
-
|
|
591
|
-
(await this.send(received.sourceRid, [
|
|
592
|
-
livenessCodec.encodeLivenessRecord({
|
|
593
|
-
command: service_wire_m6a_codec_1.M6aServiceWireCommand.livenessAck,
|
|
594
|
-
probeId: record.probeId
|
|
595
|
-
})
|
|
596
|
-
]));
|
|
597
|
-
if (!sent) {
|
|
568
|
+
if (ack === undefined)
|
|
598
569
|
return 'protocolError';
|
|
599
|
-
|
|
570
|
+
const sent = await this.send(received.sourceRid, [
|
|
571
|
+
livenessCodec.encodeLivenessRecord({
|
|
572
|
+
command: service_wire_m6a_codec_1.M6aServiceWireCommand.livenessAck,
|
|
573
|
+
probeId: record.probeId
|
|
574
|
+
})
|
|
575
|
+
]);
|
|
576
|
+
if (!sent)
|
|
577
|
+
return 'dropped';
|
|
600
578
|
}
|
|
601
579
|
else {
|
|
602
580
|
this.liveness.acknowledge(received.sourceRid, peer.connectionId, record.probeId, nowMs);
|
|
@@ -700,6 +678,12 @@ class RawServiceMeshRuntime {
|
|
|
700
678
|
throw error;
|
|
701
679
|
}
|
|
702
680
|
}
|
|
681
|
+
expireOperations(nowMs, turnDeadlineMs) {
|
|
682
|
+
return this.operations.expire(nowMs, turnDeadlineMs);
|
|
683
|
+
}
|
|
684
|
+
get pendingOperationCount() {
|
|
685
|
+
return this.operations.size;
|
|
686
|
+
}
|
|
703
687
|
async tickLiveness(nowMs = performance.now()) {
|
|
704
688
|
const result = this.liveness.tick(nowMs);
|
|
705
689
|
this.requireStarted();
|
|
@@ -739,6 +723,9 @@ class RawServiceMeshRuntime {
|
|
|
739
723
|
if (observed.get(nodeRoutingId) === generation)
|
|
740
724
|
continue;
|
|
741
725
|
changes++;
|
|
726
|
+
const expected = this.expectedPeers.get(nodeRoutingId);
|
|
727
|
+
if (expected !== undefined)
|
|
728
|
+
delete expected.helloSubmittedGeneration;
|
|
742
729
|
const peer = this.topology.peer(nodeRoutingId);
|
|
743
730
|
if (peer !== undefined && peer.connectionId === routeConnectionId(generation)) {
|
|
744
731
|
this.removePeer(peer);
|
|
@@ -761,7 +748,6 @@ class RawServiceMeshRuntime {
|
|
|
761
748
|
close() {
|
|
762
749
|
if (this.closed)
|
|
763
750
|
return;
|
|
764
|
-
this.closed = true;
|
|
765
751
|
this.applicationJobStop.abort(new Error('Raw service runtime application job admission stopped.'));
|
|
766
752
|
this.mailbox.close();
|
|
767
753
|
this.operations.close('Raw service runtime closed.');
|
|
@@ -771,10 +757,11 @@ class RawServiceMeshRuntime {
|
|
|
771
757
|
this.applicationJobQueue.unregisterReceiveFlowTarget?.(router);
|
|
772
758
|
}
|
|
773
759
|
const host = this.host;
|
|
774
|
-
this.router = undefined;
|
|
775
|
-
this.host = undefined;
|
|
776
760
|
if (host !== undefined)
|
|
777
761
|
host.close();
|
|
762
|
+
this.router = undefined;
|
|
763
|
+
this.host = undefined;
|
|
764
|
+
this.closed = true;
|
|
778
765
|
}
|
|
779
766
|
requestToTarget(targetNodeRoutingId, payload, timeoutMs, channelName) {
|
|
780
767
|
const correlation = this.nextCorrelation++;
|
|
@@ -796,13 +783,12 @@ class RawServiceMeshRuntime {
|
|
|
796
783
|
for (;;) {
|
|
797
784
|
const alternate = this.topology.selectChannel(channelName, (peer) => {
|
|
798
785
|
const candidate = peer.descriptor.nodeRoutingId;
|
|
799
|
-
return !excludedTargets.has(candidate) && this.
|
|
786
|
+
return !excludedTargets.has(candidate) && this.isPeerRouteReady(candidate);
|
|
800
787
|
});
|
|
801
788
|
if (alternate === undefined)
|
|
802
789
|
break;
|
|
803
790
|
selectedTargetNodeRoutingId = alternate.descriptor.nodeRoutingId;
|
|
804
|
-
if (
|
|
805
|
-
this.isPeerRouteReady(selectedTargetNodeRoutingId)) {
|
|
791
|
+
if (this.isPeerRouteReady(selectedTargetNodeRoutingId)) {
|
|
806
792
|
break;
|
|
807
793
|
}
|
|
808
794
|
excludedTargets.add(selectedTargetNodeRoutingId);
|
|
@@ -824,9 +810,7 @@ class RawServiceMeshRuntime {
|
|
|
824
810
|
return;
|
|
825
811
|
}
|
|
826
812
|
const accepted = this.mailbox.tryEnqueue({
|
|
827
|
-
owner:
|
|
828
|
-
? `node:${this.descriptor.nodeRoutingId}`
|
|
829
|
-
: `channel:${channelName}`,
|
|
813
|
+
owner: `node:${this.descriptor.nodeRoutingId}`,
|
|
830
814
|
domain: 'application',
|
|
831
815
|
parts,
|
|
832
816
|
sourceRoutingId: this.descriptor.nodeRoutingId,
|
|
@@ -979,8 +963,13 @@ class RawServiceMeshRuntime {
|
|
|
979
963
|
await this.requireStarted().send(targetNodeRoutingId, parts);
|
|
980
964
|
return true;
|
|
981
965
|
}
|
|
982
|
-
catch {
|
|
983
|
-
|
|
966
|
+
catch (error) {
|
|
967
|
+
if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'submit') {
|
|
968
|
+
const terminal = (0, submission_result_1.submitToRequestResult)(error.result, error.phase);
|
|
969
|
+
if (terminal === runtime_values_1.RequestResult.NotConnected || terminal === runtime_values_1.RequestResult.NotFound)
|
|
970
|
+
return false;
|
|
971
|
+
}
|
|
972
|
+
throw error;
|
|
984
973
|
}
|
|
985
974
|
}
|
|
986
975
|
}
|
|
@@ -1019,7 +1008,7 @@ function isAlreadyDisconnectedError(error) {
|
|
|
1019
1008
|
if (typeof error !== 'object' || error === null || !('nativeErrno' in error)) {
|
|
1020
1009
|
return false;
|
|
1021
1010
|
}
|
|
1022
|
-
return error.nativeErrno ===
|
|
1011
|
+
return error.nativeErrno === nativeErrnoValues.ENOENT;
|
|
1023
1012
|
}
|
|
1024
1013
|
/**
|
|
1025
1014
|
* An admission belongs to one Core selected route. Its connection identity is
|
|
@@ -1081,14 +1070,10 @@ function immutableDescriptorMismatch(current, descriptor) {
|
|
|
1081
1070
|
function admissionReason(result) {
|
|
1082
1071
|
switch (result) {
|
|
1083
1072
|
case 'meshMismatch':
|
|
1084
|
-
return
|
|
1073
|
+
return (0, service_wire_codec_generated_1.enumWireRejectReason)('topologyMismatch');
|
|
1085
1074
|
case 'staleDescriptor':
|
|
1086
|
-
return
|
|
1075
|
+
return (0, service_wire_codec_generated_1.enumWireRejectReason)('descriptorRevisionStale');
|
|
1087
1076
|
case 'invalidDescriptor':
|
|
1088
|
-
return
|
|
1089
|
-
case 'notRequired':
|
|
1090
|
-
return 4;
|
|
1091
|
-
case 'admitted':
|
|
1092
|
-
return 1;
|
|
1077
|
+
return (0, service_wire_codec_generated_1.enumWireRejectReason)('invalidDescriptor');
|
|
1093
1078
|
}
|
|
1094
1079
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
1
|
+
import { ZLinkFrameworkRuntimeState, ZLinkTopologyState } from '../../contracts';
|
|
2
|
+
export declare function runtimeObservationIsTerminal(state: ZLinkFrameworkRuntimeState): boolean;
|
|
3
|
+
export declare function topologyObservationIsTerminal(state: ZLinkTopologyState): boolean;
|
|
2
4
|
export type MaintenanceAdmissionState = 'preparing' | 'serving' | 'retiring' | 'draining' | 'stopped' | 'error';
|
|
3
5
|
export type DiscoveryAvailability = 'preparing' | 'serving' | 'retiring' | 'stopped' | 'error' | 'disconnected';
|
|
4
6
|
/** Derives public readiness from the public runtime state authority. */
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtimeObservationIsTerminal = runtimeObservationIsTerminal;
|
|
4
|
+
exports.topologyObservationIsTerminal = topologyObservationIsTerminal;
|
|
3
5
|
exports.runtimeStateIsReady = runtimeStateIsReady;
|
|
4
6
|
exports.runtimeAcceptsWork = runtimeAcceptsWork;
|
|
5
7
|
exports.maintenanceAdmissionState = maintenanceAdmissionState;
|
|
6
8
|
exports.discoveryAvailabilityForRuntimeState = discoveryAvailabilityForRuntimeState;
|
|
7
9
|
exports.topologyRuntimeIsReady = topologyRuntimeIsReady;
|
|
8
10
|
const contracts_1 = require("../../contracts");
|
|
11
|
+
function runtimeObservationIsTerminal(state) {
|
|
12
|
+
return state === contracts_1.ZLinkFrameworkRuntimeState.Stopped;
|
|
13
|
+
}
|
|
14
|
+
function topologyObservationIsTerminal(state) {
|
|
15
|
+
return state === contracts_1.ZLinkTopologyState.Stopped || state === contracts_1.ZLinkTopologyState.Failed;
|
|
16
|
+
}
|
|
9
17
|
/** Derives public readiness from the public runtime state authority. */
|
|
10
18
|
function runtimeStateIsReady(state) {
|
|
11
19
|
return state === contracts_1.ZLinkFrameworkRuntimeState.Serving;
|