@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
package/src/runtime/admission.ts
CHANGED
|
@@ -2,6 +2,13 @@ import {
|
|
|
2
2
|
ZLinkFrameworkInternalErrorKind,
|
|
3
3
|
createInternalFrameworkException
|
|
4
4
|
} from './framework-errors-internal';
|
|
5
|
+
const BACKING_ARRAY_COMPACTION_MIN_HEAD = 1024;
|
|
6
|
+
|
|
7
|
+
/** 소비한 배열 prefix가 정리 조건에 도달했는지 판정합니다. */
|
|
8
|
+
export function shouldCompactBackingArray(head: number, length: number): boolean {
|
|
9
|
+
return head >= BACKING_ARRAY_COMPACTION_MIN_HEAD && head * 2 >= length;
|
|
10
|
+
}
|
|
11
|
+
|
|
5
12
|
export class ZLinkRuntimeAdmissionGate {
|
|
6
13
|
private readonly meshes = new Map<string, ZLinkMeshAdmissionState>();
|
|
7
14
|
|
|
@@ -192,7 +199,7 @@ function compactWaiters(state: ZLinkMeshAdmissionState): void {
|
|
|
192
199
|
if (state.waiterCount === 0) {
|
|
193
200
|
state.waiters.length = 0;
|
|
194
201
|
state.waiterHead = 0;
|
|
195
|
-
} else if (state.waiterHead
|
|
202
|
+
} else if (shouldCompactBackingArray(state.waiterHead, state.waiters.length)) {
|
|
196
203
|
state.waiters.splice(0, state.waiterHead);
|
|
197
204
|
state.waiterHead = 0;
|
|
198
205
|
}
|
|
@@ -43,12 +43,12 @@ export function hasApplicationJobPermit(): boolean {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/** Re-enters the captured permit scope when a serial executor runs later. */
|
|
46
|
-
export function bindApplicationJobPermit<TResult>(
|
|
47
|
-
callback: () => Promise<TResult> | TResult
|
|
48
|
-
): () => Promise<TResult> | TResult {
|
|
46
|
+
export function bindApplicationJobPermit<TResult, TArgument>(
|
|
47
|
+
callback: (argument?: TArgument) => Promise<TResult> | TResult
|
|
48
|
+
): (argument?: TArgument) => Promise<TResult> | TResult {
|
|
49
49
|
const scope = applicationJobPermitScope.getStore();
|
|
50
50
|
if (scope === undefined) return callback;
|
|
51
|
-
return () => applicationJobPermitScope.run(scope, callback);
|
|
51
|
+
return (argument?: TArgument) => applicationJobPermitScope.run(scope, callback, argument);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -141,14 +141,16 @@ export interface ZLinkBackendMeshNode {
|
|
|
141
141
|
route: ServiceInstanceRouteFence,
|
|
142
142
|
parts: MessageLike | readonly MessageLike[],
|
|
143
143
|
sourceSpotId?: string,
|
|
144
|
-
metadata?: ReadonlyMap<string, string
|
|
144
|
+
metadata?: ReadonlyMap<string, string>,
|
|
145
|
+
instanceIntent?: boolean
|
|
145
146
|
): Promise<SubmitResult>;
|
|
146
147
|
requestInstanceSpot(
|
|
147
148
|
route: ServiceInstanceRouteFence,
|
|
148
149
|
parts: MessageLike | readonly MessageLike[],
|
|
149
150
|
timeoutMs?: number,
|
|
150
151
|
sourceSpotId?: string,
|
|
151
|
-
metadata?: ReadonlyMap<string, string
|
|
152
|
+
metadata?: ReadonlyMap<string, string>,
|
|
153
|
+
instanceIntent?: boolean
|
|
152
154
|
): MeshOperationId;
|
|
153
155
|
registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
|
|
154
156
|
requestUserSpotCreate(
|
|
@@ -249,6 +251,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
249
251
|
readonly objectGeneration: bigint;
|
|
250
252
|
}
|
|
251
253
|
| undefined;
|
|
254
|
+
registerInstanceIntent?(
|
|
255
|
+
instanceType: string,
|
|
256
|
+
route: import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence,
|
|
257
|
+
expectedCurrentRoute?:
|
|
258
|
+
import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence | null
|
|
259
|
+
): void;
|
|
252
260
|
waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
|
|
253
261
|
restoreUserSpotAuthority?(
|
|
254
262
|
spotId: string,
|
|
@@ -269,7 +277,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
269
277
|
stableType: string,
|
|
270
278
|
generation: bigint,
|
|
271
279
|
authorityOwnerGeneration: bigint,
|
|
272
|
-
spotId: string,
|
|
280
|
+
spotId: string | undefined,
|
|
273
281
|
spotGeneration: bigint,
|
|
274
282
|
membershipEpoch: bigint
|
|
275
283
|
): ZLinkBackendActorRef;
|
|
@@ -435,27 +443,6 @@ export interface ZLinkBackendActorRecvInfo {
|
|
|
435
443
|
readonly flags: number;
|
|
436
444
|
}
|
|
437
445
|
|
|
438
|
-
export interface ZLinkBackendActorJoinInfo {
|
|
439
|
-
readonly sourceActor: ZLinkBackendActorRef;
|
|
440
|
-
readonly targetActor: ZLinkBackendActorRef;
|
|
441
|
-
readonly sourceNodeRid: RoutingId;
|
|
442
|
-
readonly sourceSpotId: RoutingId;
|
|
443
|
-
readonly targetNodeRid: RoutingId;
|
|
444
|
-
readonly targetSpotId: RoutingId;
|
|
445
|
-
readonly joinEpoch: bigint;
|
|
446
|
-
readonly flags: number;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
export interface ZLinkBackendActorJoinRequest {
|
|
450
|
-
readonly info: ZLinkBackendActorJoinInfo;
|
|
451
|
-
readonly message: Message;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
export interface ZLinkBackendActorJoinReplyOperation {
|
|
455
|
-
message(message: Message): ZLinkBackendActorJoinReplyOperation;
|
|
456
|
-
submit(): void;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
446
|
export interface ZLinkBackendSpotDispatchInfo {
|
|
460
447
|
readonly event: ZLinkBackendSpotDispatchEvent;
|
|
461
448
|
readonly subjectKind?: number;
|
|
@@ -465,6 +452,7 @@ export interface ZLinkBackendSpotDispatchInfo {
|
|
|
465
452
|
|
|
466
453
|
export interface ZLinkBackendSocketMonitorEvent {
|
|
467
454
|
readonly nativeEvent: MonitorEventType;
|
|
455
|
+
readonly readyEdge: boolean;
|
|
468
456
|
readonly routingId?: unknown;
|
|
469
457
|
readonly localAddr: string;
|
|
470
458
|
readonly remoteAddr: string;
|
|
@@ -563,6 +551,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
563
551
|
}
|
|
564
552
|
|
|
565
553
|
export interface ZLinkBackendPublisherSocket extends ZLinkBackendSocket {
|
|
554
|
+
sendTimeoutMs: number;
|
|
566
555
|
sendHighWaterMark: number;
|
|
567
556
|
noDrop: boolean;
|
|
568
557
|
publish(topic: string, message: Message | readonly Message[]): void;
|
|
@@ -734,11 +723,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
734
723
|
payload: Message | readonly Message[],
|
|
735
724
|
timeoutMs?: number
|
|
736
725
|
): Promise<readonly Message[]>;
|
|
737
|
-
recvActorJoin(flags: ZLinkBackendRecvFlags): ZLinkBackendActorJoinRequest | null;
|
|
738
|
-
replyActorJoin(
|
|
739
|
-
request: ZLinkBackendActorJoinRequest,
|
|
740
|
-
joinResultCode: number
|
|
741
|
-
): ZLinkBackendActorJoinReplyOperation;
|
|
742
726
|
dispose(): Promise<void>;
|
|
743
727
|
}
|
|
744
728
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
1
|
+
import { classifySubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
|
|
4
3
|
import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
|
|
5
4
|
|
|
@@ -15,22 +14,7 @@ export function meshActorSessionNodeAdapter(
|
|
|
15
14
|
parts as never,
|
|
16
15
|
flags
|
|
17
16
|
);
|
|
18
|
-
|
|
19
|
-
case SubmitResult.Ok:
|
|
20
|
-
return { status: ZLinkSubmitStatus.Submitted };
|
|
21
|
-
case SubmitResult.Backpressured:
|
|
22
|
-
case SubmitResult.NotAdmitted:
|
|
23
|
-
return { status: ZLinkSubmitStatus.Backpressured };
|
|
24
|
-
case SubmitResult.NotFound:
|
|
25
|
-
case SubmitResult.InvalidState:
|
|
26
|
-
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
27
|
-
case SubmitResult.NotConnected:
|
|
28
|
-
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
29
|
-
case SubmitResult.Terminated:
|
|
30
|
-
return { status: ZLinkSubmitStatus.Shutdown };
|
|
31
|
-
default:
|
|
32
|
-
throw new Error(`Actor bound-session send failed with result '${result}'.`);
|
|
33
|
-
}
|
|
17
|
+
return classifySubmitResult(result, 'Actor bound-session send');
|
|
34
18
|
},
|
|
35
19
|
async closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs, signal) {
|
|
36
20
|
if (completions === undefined) {
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import { availableParallelism } from 'node:os';
|
|
3
|
-
import {
|
|
3
|
+
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
4
|
+
import type {
|
|
5
|
+
ApplicationJobPermitPort,
|
|
6
|
+
ApplicationJobQueuePort
|
|
7
|
+
} from '../application-jobs/contracts';
|
|
8
|
+
import { runZLinkExecutionArea } from '../execution';
|
|
4
9
|
import {
|
|
5
10
|
ReadyDomain,
|
|
6
11
|
type ReadyBatch,
|
|
@@ -8,13 +13,20 @@ import {
|
|
|
8
13
|
type ReceiveBatch,
|
|
9
14
|
type ReceiveRecord
|
|
10
15
|
} from '../foundation/service-runtime-contracts';
|
|
16
|
+
import {
|
|
17
|
+
SERVICE_WIRE_COMMAND_OFFSET,
|
|
18
|
+
SERVICE_WIRE_MAJOR_OFFSET,
|
|
19
|
+
SERVICE_WIRE_PREFIX_SIZE
|
|
20
|
+
} from '../foundation/service-wire-binary-primitives';
|
|
21
|
+
import {
|
|
22
|
+
SERVICE_WIRE_MAGIC,
|
|
23
|
+
SERVICE_WIRE_MAJOR
|
|
24
|
+
} from '../foundation/service-wire-constants.generated';
|
|
11
25
|
import type { ZLinkBackendMeshNode } from './contracts';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from '../application-jobs/contracts';
|
|
17
|
-
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
26
|
+
import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
|
|
27
|
+
const DEFAULT_MESH_READY_CAPACITY = 32;
|
|
28
|
+
|
|
29
|
+
const DEFAULT_MESH_PART_CAPACITY = 256;
|
|
18
30
|
|
|
19
31
|
const MESH_DISPATCH_YIELD_RECORDS = 16;
|
|
20
32
|
const MESH_DISPATCH_YIELD_INTERVAL_MS = 2;
|
|
@@ -45,21 +57,10 @@ export interface ZLinkMeshDispatchFailureContext {
|
|
|
45
57
|
readonly commandId?: number;
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
class ZLinkMeshDispatchFailure extends Error {
|
|
49
|
-
constructor(
|
|
50
|
-
readonly context: ZLinkMeshDispatchFailureContext,
|
|
51
|
-
readonly dispatchCause: unknown
|
|
52
|
-
) {
|
|
53
|
-
super('Mesh record dispatch failed.', { cause: dispatchCause });
|
|
54
|
-
this.name = 'ZLinkMeshDispatchFailure';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
60
|
export class ZLinkMeshDispatchPump {
|
|
59
61
|
private pendingDomains: number = ReadyDomain.None;
|
|
60
62
|
private infrastructureScheduled = false;
|
|
61
63
|
private disposed = false;
|
|
62
|
-
private infrastructureDrainPromise?: Promise<void>;
|
|
63
64
|
private readonly activeDrains = new Set<Promise<void>>();
|
|
64
65
|
private readonly idleApplicationWorkers = new Set<() => void>();
|
|
65
66
|
private applicationWorkerCount = 0;
|
|
@@ -152,7 +153,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
152
153
|
const readyBatch = this.node.createReadyBatch(1);
|
|
153
154
|
const receiveBatch = this.node.createReceiveBatch(
|
|
154
155
|
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
155
|
-
this.options.partCapacity ??
|
|
156
|
+
this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
|
|
156
157
|
);
|
|
157
158
|
try {
|
|
158
159
|
for (;;) {
|
|
@@ -179,12 +180,8 @@ export class ZLinkMeshDispatchPump {
|
|
|
179
180
|
return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
private reportDispatchError(error: unknown): void {
|
|
183
|
-
|
|
184
|
-
this.options.reportError?.(error.dispatchCause, error.context);
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
this.options.reportError?.(error);
|
|
183
|
+
private reportDispatchError(error: unknown, context?: ZLinkMeshDispatchFailureContext): void {
|
|
184
|
+
this.options.reportError?.(error, context);
|
|
188
185
|
}
|
|
189
186
|
|
|
190
187
|
/**
|
|
@@ -205,34 +202,23 @@ export class ZLinkMeshDispatchPump {
|
|
|
205
202
|
runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
|
|
206
203
|
)
|
|
207
204
|
)
|
|
208
|
-
.catch((error) =>
|
|
209
|
-
if (error instanceof ZLinkMeshDispatchFailure) {
|
|
210
|
-
this.options.reportError?.(error.dispatchCause, error.context);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
this.options.reportError?.(error);
|
|
214
|
-
});
|
|
205
|
+
.catch((error) => this.reportDispatchError(error));
|
|
215
206
|
this.activeDrains.add(drain);
|
|
216
|
-
this.infrastructureDrainPromise = drain;
|
|
217
207
|
void drain.finally(() => {
|
|
218
208
|
this.activeDrains.delete(drain);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.
|
|
222
|
-
if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
223
|
-
this.scheduleInfrastructure();
|
|
224
|
-
}
|
|
209
|
+
this.infrastructureScheduled = false;
|
|
210
|
+
if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
211
|
+
this.scheduleInfrastructure();
|
|
225
212
|
}
|
|
226
213
|
});
|
|
227
214
|
}
|
|
228
215
|
|
|
229
216
|
private async drainInfrastructure(): Promise<void> {
|
|
230
217
|
const readyBatch = this.node.createReadyBatch(
|
|
231
|
-
Math.min(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
this.options.partCapacity ?? 256
|
|
218
|
+
Math.min(
|
|
219
|
+
this.options.readyCapacity ?? DEFAULT_MESH_READY_CAPACITY,
|
|
220
|
+
MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
|
|
221
|
+
)
|
|
236
222
|
);
|
|
237
223
|
try {
|
|
238
224
|
while (!this.disposed) {
|
|
@@ -246,7 +232,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
246
232
|
const lifecycleBudgetExhausted = await this.drainDomain(
|
|
247
233
|
ReadyDomain.Infrastructure,
|
|
248
234
|
readyBatch,
|
|
249
|
-
|
|
235
|
+
undefined,
|
|
250
236
|
MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
|
|
251
237
|
);
|
|
252
238
|
if (lifecycleBudgetExhausted) {
|
|
@@ -255,7 +241,6 @@ export class ZLinkMeshDispatchPump {
|
|
|
255
241
|
}
|
|
256
242
|
}
|
|
257
243
|
} finally {
|
|
258
|
-
receiveBatch.close();
|
|
259
244
|
readyBatch.close();
|
|
260
245
|
}
|
|
261
246
|
}
|
|
@@ -263,7 +248,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
263
248
|
private async drainDomain(
|
|
264
249
|
domain: number,
|
|
265
250
|
readyBatch: ReadyBatch,
|
|
266
|
-
receiveBatch: ReceiveBatch,
|
|
251
|
+
receiveBatch: ReceiveBatch | undefined,
|
|
267
252
|
claimBudget?: number
|
|
268
253
|
): Promise<boolean> {
|
|
269
254
|
let claimsDrained = 0;
|
|
@@ -285,85 +270,91 @@ export class ZLinkMeshDispatchPump {
|
|
|
285
270
|
for (let index = 0; index < drained.records.length; index += 1) {
|
|
286
271
|
const claim = readyBatch.takeClaim(index);
|
|
287
272
|
claimsDrained += 1;
|
|
288
|
-
const owner = drained.records[index]
|
|
273
|
+
const owner = drained.records[index]!;
|
|
289
274
|
// Raw ingress already attached one host permit to each record.
|
|
290
275
|
// A claim that reserves admission here may receive only that permit's record.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
// infrastructure may progress if one of its handlers suspends.
|
|
308
|
-
if (domain === ReadyDomain.Infrastructure) {
|
|
309
|
-
this.infrastructureScheduled = false;
|
|
310
|
-
this.infrastructureDrainPromise = undefined;
|
|
311
|
-
if ((this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
312
|
-
this.scheduleInfrastructure();
|
|
313
|
-
}
|
|
314
|
-
}
|
|
276
|
+
const drainClaim = async () => {
|
|
277
|
+
let ownerReceiveBatch = receiveBatch;
|
|
278
|
+
try {
|
|
279
|
+
ownerReceiveBatch ??= this.node.createReceiveBatch(
|
|
280
|
+
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
281
|
+
this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
|
|
282
|
+
);
|
|
283
|
+
const capacity =
|
|
284
|
+
owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
|
|
285
|
+
for (;;) {
|
|
286
|
+
let claimPermit =
|
|
287
|
+
owner.terminalCompletion === true ||
|
|
288
|
+
owner.ordinaryIngressPreAdmitted === true ||
|
|
289
|
+
domain === ReadyDomain.Infrastructure
|
|
290
|
+
? undefined
|
|
291
|
+
: await this.acquirePermit();
|
|
315
292
|
try {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
} catch (error) {
|
|
329
|
-
throw new ZLinkMeshDispatchFailure(
|
|
330
|
-
meshDispatchFailureContext(record),
|
|
331
|
-
error
|
|
293
|
+
if (this.capacityStop.signal.aborted) return;
|
|
294
|
+
ownerReceiveBatch.reset(capacity);
|
|
295
|
+
const received = claim.recvBatch(ownerReceiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
296
|
+
if (!received.ok) break;
|
|
297
|
+
// This owner keeps its claim while it drains, so its records stay in FIFO order.
|
|
298
|
+
try {
|
|
299
|
+
for (const record of received.records) {
|
|
300
|
+
if (this.disposed) break;
|
|
301
|
+
const permit = record.applicationJobPermit ?? claimPermit;
|
|
302
|
+
if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
'Pre-admitted raw ingress record lost its Application Job Queue permit.'
|
|
332
305
|
);
|
|
333
306
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
307
|
+
this.recordsSinceYield += 1;
|
|
308
|
+
const dispatch = async () => {
|
|
309
|
+
try {
|
|
310
|
+
await this.options.dispatch(owner, record);
|
|
311
|
+
await record.onTerminalCompletion?.();
|
|
312
|
+
} catch (error) {
|
|
313
|
+
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
if (permit === undefined) {
|
|
317
|
+
await dispatch();
|
|
318
|
+
} else {
|
|
319
|
+
if (
|
|
320
|
+
domain === ReadyDomain.Application &&
|
|
321
|
+
record.applicationJobPermit === undefined
|
|
322
|
+
)
|
|
323
|
+
permit.markApplicationQueued();
|
|
324
|
+
// The scope now owns this reservation, including failure
|
|
325
|
+
// and detached handler handoff. Only unused permits remain
|
|
326
|
+
// owned by the receive attempt's finally block.
|
|
327
|
+
if (permit === claimPermit) claimPermit = undefined;
|
|
328
|
+
await runWithApplicationJobPermit(permit, dispatch);
|
|
329
|
+
}
|
|
330
|
+
const yieldTurn = this.yieldIfNeeded();
|
|
331
|
+
if (yieldTurn !== undefined) await yieldTurn;
|
|
332
|
+
}
|
|
333
|
+
} finally {
|
|
334
|
+
// Batch ownership includes records whose dispatch never began,
|
|
335
|
+
// including on failure or shutdown in the middle of the batch.
|
|
336
|
+
for (const record of received.records) {
|
|
337
|
+
for (const part of record.parts) part.close();
|
|
338
|
+
record.releaseRetainedIngress?.();
|
|
349
339
|
}
|
|
350
|
-
const yieldTurn = this.yieldIfNeeded();
|
|
351
|
-
if (yieldTurn !== undefined) await yieldTurn;
|
|
352
340
|
}
|
|
353
341
|
} finally {
|
|
354
|
-
|
|
355
|
-
// including on failure or shutdown in the middle of the batch.
|
|
356
|
-
for (const record of received.records) {
|
|
357
|
-
for (const part of record.parts) part.close();
|
|
358
|
-
record.releaseRetainedIngress?.();
|
|
359
|
-
}
|
|
342
|
+
claimPermit?.releaseAfterInternalProcessing();
|
|
360
343
|
}
|
|
361
|
-
} finally {
|
|
362
|
-
claimPermit?.releaseAfterInternalProcessing();
|
|
363
344
|
}
|
|
345
|
+
} finally {
|
|
346
|
+
claim.release();
|
|
347
|
+
if (receiveBatch === undefined) ownerReceiveBatch?.close();
|
|
364
348
|
}
|
|
365
|
-
}
|
|
366
|
-
|
|
349
|
+
};
|
|
350
|
+
// An application worker drains the one owner it claimed. Infrastructure owners
|
|
351
|
+
// drain independently, so a suspended owner does not hold the other claims.
|
|
352
|
+
if (receiveBatch !== undefined) {
|
|
353
|
+
await drainClaim();
|
|
354
|
+
} else {
|
|
355
|
+
const drain = drainClaim().catch((error) => this.reportDispatchError(error));
|
|
356
|
+
this.activeDrains.add(drain);
|
|
357
|
+
void drain.finally(() => this.activeDrains.delete(drain));
|
|
367
358
|
}
|
|
368
359
|
}
|
|
369
360
|
if (claimBudget !== undefined && claimsDrained >= claimBudget) {
|
|
@@ -425,8 +416,11 @@ function meshDispatchFailureContext(record: ReceiveRecord): ZLinkMeshDispatchFai
|
|
|
425
416
|
function serviceWireCommand(record: ReceiveRecord): number | undefined {
|
|
426
417
|
if (record.parts.length !== 1) return undefined;
|
|
427
418
|
const bytes = record.parts[0]!.data();
|
|
428
|
-
return bytes.byteLength >=
|
|
429
|
-
|
|
419
|
+
return bytes.byteLength >= SERVICE_WIRE_PREFIX_SIZE &&
|
|
420
|
+
bytes[0] === SERVICE_WIRE_MAGIC[0] &&
|
|
421
|
+
bytes[1] === SERVICE_WIRE_MAGIC[1] &&
|
|
422
|
+
bytes[SERVICE_WIRE_MAJOR_OFFSET] === SERVICE_WIRE_MAJOR
|
|
423
|
+
? bytes[SERVICE_WIRE_COMMAND_OFFSET]
|
|
430
424
|
: undefined;
|
|
431
425
|
}
|
|
432
426
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { constants as osConstants } from 'node:os';
|
|
2
|
+
import { requireOneWayCompletion, ZLinkSubmitStatus } from '../../messaging/submission-result';
|
|
1
3
|
import { loadBinding } from '../node-backend-adapter';
|
|
2
4
|
import { SubmitResult, ZLinkBackendResultError } from '../runtime-values';
|
|
3
|
-
|
|
5
|
+
const nativeErrnoValues = osConstants.errno;
|
|
4
6
|
|
|
5
7
|
export type ZLinkBindingModule = typeof import('@zlink-systems/zlink');
|
|
6
8
|
export const zlink = loadBinding() as ZLinkBindingModule;
|
|
@@ -46,7 +48,7 @@ interface ZLinkBindingRequestSubmitOperation {
|
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
export function isBindingNotFound(error: unknown): boolean {
|
|
49
|
-
return error instanceof zlink.
|
|
51
|
+
return error instanceof zlink.ConnectError && error.result === zlink.ConnectResult.NotFound;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
function isNonBlockingRecvEmpty(error: unknown): boolean {
|
|
@@ -64,7 +66,10 @@ export function isRouteRecvRetryable(error: unknown): boolean {
|
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
function isNativeBadAddress(error: { nativeErrno?: unknown; message?: unknown }): boolean {
|
|
67
|
-
return
|
|
69
|
+
return (
|
|
70
|
+
error.nativeErrno === nativeErrnoValues.EFAULT ||
|
|
71
|
+
/Bad address/i.test(String(error.message ?? ''))
|
|
72
|
+
);
|
|
68
73
|
}
|
|
69
74
|
|
|
70
75
|
export function submitBindingPublish(
|
|
@@ -189,7 +194,13 @@ function isSuccessfulOrAlreadyShutdownCloseError(error: unknown): boolean {
|
|
|
189
194
|
isContextTerminatedError(error) ||
|
|
190
195
|
(error instanceof Error &&
|
|
191
196
|
'code' in error &&
|
|
192
|
-
|
|
197
|
+
(
|
|
198
|
+
[
|
|
199
|
+
zlink.CloseResult.Ok,
|
|
200
|
+
zlink.CloseResult.Shutdown,
|
|
201
|
+
zlink.CloseResult.InvalidHandle
|
|
202
|
+
] as readonly number[]
|
|
203
|
+
).includes((error as { code: number }).code))
|
|
193
204
|
);
|
|
194
205
|
}
|
|
195
206
|
|
|
@@ -239,9 +250,15 @@ function toNativeMessageLike(message: unknown): unknown {
|
|
|
239
250
|
return message;
|
|
240
251
|
}
|
|
241
252
|
|
|
242
|
-
export function translateBindingResultError(
|
|
253
|
+
export function translateBindingResultError(
|
|
254
|
+
error: unknown,
|
|
255
|
+
phase: 'submit' | 'completion' = 'completion'
|
|
256
|
+
): unknown {
|
|
243
257
|
if (error instanceof zlink.SubmitError) {
|
|
244
|
-
return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
258
|
+
return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
259
|
+
cause: error,
|
|
260
|
+
phase
|
|
261
|
+
});
|
|
245
262
|
}
|
|
246
263
|
if (error instanceof zlink.RequestError) {
|
|
247
264
|
return new ZLinkBackendResultError('request', error.result, error.nativeErrno, {
|
|
@@ -9,13 +9,13 @@ import { zlink } from './node-backend-adapter-support';
|
|
|
9
9
|
export class ZLinkNodeEventLoopPoller {
|
|
10
10
|
private readonly poller = zlink.createPoller();
|
|
11
11
|
private readonly events = zlink.createPollEvents(1);
|
|
12
|
-
private readableHandler: () => void;
|
|
12
|
+
private readableHandler: (receiveReady: boolean, routeReady: boolean) => void;
|
|
13
13
|
private disposed = false;
|
|
14
14
|
|
|
15
15
|
constructor(
|
|
16
16
|
socket: Socket,
|
|
17
17
|
pollCompletion: boolean,
|
|
18
|
-
readableHandler: () => void,
|
|
18
|
+
readableHandler: (receiveReady: boolean, routeReady: boolean) => void,
|
|
19
19
|
pollRoute = false
|
|
20
20
|
) {
|
|
21
21
|
this.readableHandler = readableHandler;
|
|
@@ -34,26 +34,22 @@ export class ZLinkNodeEventLoopPoller {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
setReadableHandler(handler: () => void): void {
|
|
37
|
+
setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void {
|
|
38
38
|
this.readableHandler = handler;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
dispose(): void {
|
|
42
42
|
if (this.disposed) return;
|
|
43
|
-
this.disposed = true;
|
|
44
|
-
this.events.close();
|
|
45
43
|
this.poller.close();
|
|
44
|
+
this.events.close();
|
|
45
|
+
this.disposed = true;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
private readonly onReady = (): void => {
|
|
49
49
|
if (this.disposed) return;
|
|
50
50
|
const ready = this.poller.wait(this.events, 0);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
this.events.hasEvent(0, zlink.PollEventFlag.PollRoute)
|
|
55
|
-
) {
|
|
56
|
-
this.readableHandler();
|
|
57
|
-
}
|
|
51
|
+
const receiveReady = ready === 0 || this.events.hasEvent(0, zlink.PollEventFlag.PollIn);
|
|
52
|
+
const routeReady = ready > 0 && this.events.hasEvent(0, zlink.PollEventFlag.PollRoute);
|
|
53
|
+
if (receiveReady || routeReady) this.readableHandler(receiveReady, routeReady);
|
|
58
54
|
};
|
|
59
55
|
}
|
|
@@ -32,6 +32,7 @@ export function wrapMonitorSocket(nativeInstance: {
|
|
|
32
32
|
function toBackendMonitorEvent(event: MonitorEvent): ZLinkBackendSocketMonitorEvent {
|
|
33
33
|
return {
|
|
34
34
|
nativeEvent: event.event,
|
|
35
|
+
readyEdge: (event.flags & zlink.MonitorEventFlag.ConnectionReadyEdge) !== 0,
|
|
35
36
|
routingId: event.routingId ?? undefined,
|
|
36
37
|
localAddr: event.localAddr,
|
|
37
38
|
remoteAddr: event.remoteAddr,
|