@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSerialExecutionQueue = exports.ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS = void 0;
|
|
4
|
+
const abort_1 = require("../abort");
|
|
5
|
+
const state_lane_1 = require("./state-lane");
|
|
4
6
|
exports.ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS = Object.freeze({
|
|
5
7
|
ownerTimeBudget: 10,
|
|
6
8
|
lifecycleBurstLimit: 8
|
|
@@ -73,8 +75,12 @@ class ZLinkSerialExecutionQueue {
|
|
|
73
75
|
return this.admit(operation, options, context);
|
|
74
76
|
}
|
|
75
77
|
/** Holds lifecycle FIFO through an operation result while its application turns can run. */
|
|
76
|
-
submitLifecycleOperation(operation) {
|
|
77
|
-
return this.admit(operation, { lane: 'lifecycle' },
|
|
78
|
+
submitLifecycleOperation(operation, context) {
|
|
79
|
+
return this.admit(operation, { lane: 'lifecycle' }, context, undefined, true);
|
|
80
|
+
}
|
|
81
|
+
visitPendingApplication(visitor) {
|
|
82
|
+
for (const record of this.application.records)
|
|
83
|
+
visitor(record);
|
|
78
84
|
}
|
|
79
85
|
get hasPendingWork() {
|
|
80
86
|
return (this.draining ||
|
|
@@ -96,6 +102,9 @@ class ZLinkSerialExecutionQueue {
|
|
|
96
102
|
closeAdmission() {
|
|
97
103
|
this.closed = true;
|
|
98
104
|
}
|
|
105
|
+
get admissionClosed() {
|
|
106
|
+
return this.closed;
|
|
107
|
+
}
|
|
99
108
|
admit(operation, options, context, preparation, operationEnvelope = false) {
|
|
100
109
|
if (this.closed)
|
|
101
110
|
throw new Error('The serial execution queue is closed.');
|
|
@@ -238,16 +247,14 @@ class ZLinkSerialExecutionQueue {
|
|
|
238
247
|
}
|
|
239
248
|
if (this.shouldYield()) {
|
|
240
249
|
this.claimStartedAt = undefined;
|
|
241
|
-
await macrotaskBoundary();
|
|
250
|
+
await (0, abort_1.macrotaskBoundary)();
|
|
242
251
|
}
|
|
243
252
|
}
|
|
244
253
|
}
|
|
245
254
|
finally {
|
|
246
255
|
this.draining = false;
|
|
247
256
|
this.claimStartedAt = undefined;
|
|
248
|
-
if (!waitingForPreparation &&
|
|
249
|
-
(this.application.records.length > 0 ||
|
|
250
|
-
(this.activeLifecycle === undefined && this.lifecycle.records.length > 0))) {
|
|
257
|
+
if (!waitingForPreparation && this.selectNext() !== undefined) {
|
|
251
258
|
this.scheduleDrain();
|
|
252
259
|
}
|
|
253
260
|
else {
|
|
@@ -258,7 +265,11 @@ class ZLinkSerialExecutionQueue {
|
|
|
258
265
|
}
|
|
259
266
|
}
|
|
260
267
|
selectNext() {
|
|
261
|
-
const
|
|
268
|
+
const lifecycleOwner = this.activeLifecycle?.context;
|
|
269
|
+
const applicationRecord = lifecycleOwner === undefined
|
|
270
|
+
? this.application.records[0]
|
|
271
|
+
: this.application.records.find((record) => lifecycleOwner.canExecuteApplication(record));
|
|
272
|
+
const applicationReady = applicationRecord !== undefined;
|
|
262
273
|
const lifecycleReady = this.activeLifecycle === undefined && this.lifecycle.records.length > 0;
|
|
263
274
|
if (!applicationReady && !lifecycleReady)
|
|
264
275
|
return undefined;
|
|
@@ -266,15 +277,17 @@ class ZLinkSerialExecutionQueue {
|
|
|
266
277
|
return { lane: 'lifecycle', record: this.lifecycle.records[0] };
|
|
267
278
|
}
|
|
268
279
|
if (!lifecycleReady) {
|
|
269
|
-
return { lane: 'application', record:
|
|
280
|
+
return { lane: 'application', record: applicationRecord };
|
|
270
281
|
}
|
|
271
282
|
if (!this.lifecycleDebt && this.lifecycleStreak < this.lifecycleBurstLimit) {
|
|
272
283
|
return { lane: 'lifecycle', record: this.lifecycle.records[0] };
|
|
273
284
|
}
|
|
274
|
-
return { lane: 'application', record:
|
|
285
|
+
return { lane: 'application', record: applicationRecord };
|
|
275
286
|
}
|
|
276
287
|
takeSelected(selection) {
|
|
277
|
-
const record = selection.lane === 'lifecycle'
|
|
288
|
+
const record = selection.lane === 'lifecycle'
|
|
289
|
+
? this.takeLifecycle()
|
|
290
|
+
: this.takeApplication(selection.record);
|
|
278
291
|
if (record !== selection.record) {
|
|
279
292
|
throw new Error('The selected serial work record changed before owner claim.');
|
|
280
293
|
}
|
|
@@ -289,10 +302,13 @@ class ZLinkSerialExecutionQueue {
|
|
|
289
302
|
this.activeLifecycle = record;
|
|
290
303
|
return record;
|
|
291
304
|
}
|
|
292
|
-
takeApplication() {
|
|
305
|
+
takeApplication(selected) {
|
|
293
306
|
this.lifecycleStreak = 0;
|
|
294
307
|
this.lifecycleDebt = false;
|
|
295
|
-
|
|
308
|
+
if (this.application.records[0] === selected)
|
|
309
|
+
return this.application.records.shift();
|
|
310
|
+
const index = this.application.records.indexOf(selected);
|
|
311
|
+
return this.application.records.splice(index, 1)[0];
|
|
296
312
|
}
|
|
297
313
|
startPreparation(record) {
|
|
298
314
|
const preparation = record.preparation;
|
|
@@ -355,6 +371,32 @@ class ZLinkSerialExecutionQueue {
|
|
|
355
371
|
}
|
|
356
372
|
}
|
|
357
373
|
exports.ZLinkSerialExecutionQueue = ZLinkSerialExecutionQueue;
|
|
374
|
+
if ((0, state_lane_1.isStructuralGuardEnabled)()) {
|
|
375
|
+
const submit = ZLinkSerialExecutionQueue.prototype.submit;
|
|
376
|
+
ZLinkSerialExecutionQueue.prototype.submit = function (operation, options = {}, context) {
|
|
377
|
+
return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submit.call(this, operation, options, context), `serial ${options.lane ?? 'application'} ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
|
|
378
|
+
};
|
|
379
|
+
const submitPreAdmitted = ZLinkSerialExecutionQueue.prototype.submitPreAdmitted;
|
|
380
|
+
ZLinkSerialExecutionQueue.prototype.submitPreAdmitted = function (operation, options = {}, context) {
|
|
381
|
+
return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submitPreAdmitted.call(this, operation, options, context), `serial ${options.lane ?? 'application'} ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
|
|
382
|
+
};
|
|
383
|
+
const submitContinuation = ZLinkSerialExecutionQueue.prototype.submitContinuation;
|
|
384
|
+
ZLinkSerialExecutionQueue.prototype.submitContinuation = function (operation, context) {
|
|
385
|
+
return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submitContinuation.call(this, operation, context), `serial continuation ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
|
|
386
|
+
};
|
|
387
|
+
const admitDurablePrefix = ZLinkSerialExecutionQueue.prototype.admitDurablePrefix;
|
|
388
|
+
ZLinkSerialExecutionQueue.prototype.admitDurablePrefix = function (operation, options = {}, context, preparation) {
|
|
389
|
+
return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(admitDurablePrefix.call(this, operation, options, context, preparation), `serial durable ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
|
|
390
|
+
};
|
|
391
|
+
const submitLifecycleOperation = ZLinkSerialExecutionQueue.prototype.submitLifecycleOperation;
|
|
392
|
+
ZLinkSerialExecutionQueue.prototype.submitLifecycleOperation = function (operation) {
|
|
393
|
+
return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submitLifecycleOperation.call(this, operation), `serial lifecycle ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
|
|
394
|
+
};
|
|
395
|
+
const whenIdle = ZLinkSerialExecutionQueue.prototype.whenIdle;
|
|
396
|
+
ZLinkSerialExecutionQueue.prototype.whenIdle = function () {
|
|
397
|
+
return (0, state_lane_1.guardStateLaneCompletion)(whenIdle.call(this), 'serial completion');
|
|
398
|
+
};
|
|
399
|
+
}
|
|
358
400
|
function createLane() {
|
|
359
401
|
return {
|
|
360
402
|
records: []
|
|
@@ -370,6 +412,3 @@ function validateNonNegative(value, field) {
|
|
|
370
412
|
throw new RangeError(`${field} must be a non-negative safe integer.`);
|
|
371
413
|
}
|
|
372
414
|
}
|
|
373
|
-
function macrotaskBoundary() {
|
|
374
|
-
return new Promise((resolve) => setImmediate(resolve));
|
|
375
|
-
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
type ZLinkStateLaneWork<T> = () => Promise<T> | T;
|
|
2
|
+
export declare function isStructuralGuardEnabled(): boolean;
|
|
2
3
|
/**
|
|
3
4
|
* Single-owner execution lane for a component's mutable state.
|
|
4
5
|
*
|
|
@@ -7,7 +8,6 @@ type ZLinkStateLaneWork<T> = () => Promise<T> | T;
|
|
|
7
8
|
* Actor serial executors, which also own lifecycle and relocation concerns.
|
|
8
9
|
*/
|
|
9
10
|
export declare class ZLinkStateLane {
|
|
10
|
-
private static readonly currentLaneStorage;
|
|
11
11
|
private readonly mailbox;
|
|
12
12
|
private draining;
|
|
13
13
|
private drainPromise;
|
|
@@ -25,4 +25,11 @@ export declare class ZLinkStateLane {
|
|
|
25
25
|
private scheduleDrain;
|
|
26
26
|
private drain;
|
|
27
27
|
}
|
|
28
|
+
/** Applied only by debug-installed wrappers; release completions keep their original identity. */
|
|
29
|
+
export declare function guardStateLaneCompletion<T>(completion: Promise<T>, label: string, owner?: ZLinkStateLane): Promise<T>;
|
|
30
|
+
export declare function trackDiagnosticCompletion<T>(completion: Promise<T>, name: string): Promise<T>;
|
|
31
|
+
export declare function debugPendingWorkNames(): string[];
|
|
32
|
+
export declare function diagnosticWorkName(work: {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
}): string;
|
|
28
35
|
export {};
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkStateLane = void 0;
|
|
4
|
+
exports.isStructuralGuardEnabled = isStructuralGuardEnabled;
|
|
5
|
+
exports.guardStateLaneCompletion = guardStateLaneCompletion;
|
|
6
|
+
exports.trackDiagnosticCompletion = trackDiagnosticCompletion;
|
|
7
|
+
exports.debugPendingWorkNames = debugPendingWorkNames;
|
|
8
|
+
exports.diagnosticWorkName = diagnosticWorkName;
|
|
4
9
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
10
|
+
const UNKNOWN_DIAGNOSTIC_CALLER = '<unknown caller>';
|
|
11
|
+
function isStructuralGuardEnabled() {
|
|
12
|
+
return process.env.ZLINK_NODE_STRUCTURAL_GUARD === '1' || process.env.NODE_ENV === 'test';
|
|
13
|
+
}
|
|
14
|
+
const currentLaneStorage = new node_async_hooks_1.AsyncLocalStorage();
|
|
15
|
+
const diagnosticPending = isStructuralGuardEnabled() ? new Map() : undefined;
|
|
16
|
+
let nextDiagnosticWork = 0;
|
|
17
|
+
const diagnosticTurnStorage = diagnosticPending === undefined ? undefined : new node_async_hooks_1.AsyncLocalStorage();
|
|
5
18
|
/**
|
|
6
19
|
* Single-owner execution lane for a component's mutable state.
|
|
7
20
|
*
|
|
@@ -10,13 +23,12 @@ const node_async_hooks_1 = require("node:async_hooks");
|
|
|
10
23
|
* Actor serial executors, which also own lifecycle and relocation concerns.
|
|
11
24
|
*/
|
|
12
25
|
class ZLinkStateLane {
|
|
13
|
-
static currentLaneStorage = new node_async_hooks_1.AsyncLocalStorage();
|
|
14
26
|
mailbox = [];
|
|
15
27
|
draining = false;
|
|
16
28
|
drainPromise;
|
|
17
29
|
closed = false;
|
|
18
30
|
static get current() {
|
|
19
|
-
return
|
|
31
|
+
return currentLaneStorage.getStore();
|
|
20
32
|
}
|
|
21
33
|
get isOnLane() {
|
|
22
34
|
return ZLinkStateLane.current === this;
|
|
@@ -86,7 +98,7 @@ class ZLinkStateLane {
|
|
|
86
98
|
return;
|
|
87
99
|
}
|
|
88
100
|
try {
|
|
89
|
-
await
|
|
101
|
+
await currentLaneStorage.run(this, work);
|
|
90
102
|
}
|
|
91
103
|
catch {
|
|
92
104
|
// Posted callbacks own their errors. One failure must not strand later work.
|
|
@@ -103,3 +115,106 @@ class ZLinkStateLane {
|
|
|
103
115
|
}
|
|
104
116
|
}
|
|
105
117
|
exports.ZLinkStateLane = ZLinkStateLane;
|
|
118
|
+
// Install the structural check only in diagnostic processes. The release run()
|
|
119
|
+
// method and its returned Promise are left untouched.
|
|
120
|
+
if (isStructuralGuardEnabled()) {
|
|
121
|
+
Object.defineProperty(ZLinkStateLane, 'current', {
|
|
122
|
+
configurable: true,
|
|
123
|
+
get: () => {
|
|
124
|
+
const turn = diagnosticTurnStorage?.getStore();
|
|
125
|
+
return turn?.active === true ? turn.lane : undefined;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const run = ZLinkStateLane.prototype.run;
|
|
129
|
+
ZLinkStateLane.prototype.run = function (work) {
|
|
130
|
+
const completion = run.call(this, () => runDiagnosticTurn(this, work));
|
|
131
|
+
return guardStateLaneCompletion(trackDiagnosticCompletion(completion, `state lane ${diagnosticWorkName(work)}`), 'another state lane completion', this);
|
|
132
|
+
};
|
|
133
|
+
const tryPost = ZLinkStateLane.prototype.tryPost;
|
|
134
|
+
ZLinkStateLane.prototype.tryPost = function (work) {
|
|
135
|
+
const release = registerDiagnosticWork(`state lane post ${diagnosticWorkName(work)}`);
|
|
136
|
+
const accepted = tryPost.call(this, () => {
|
|
137
|
+
try {
|
|
138
|
+
const result = runDiagnosticTurn(this, work);
|
|
139
|
+
if (result instanceof Promise)
|
|
140
|
+
return result.finally(release);
|
|
141
|
+
release();
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
release();
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (!accepted)
|
|
150
|
+
release();
|
|
151
|
+
return accepted;
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function runDiagnosticTurn(lane, work) {
|
|
155
|
+
const turn = { lane, active: true };
|
|
156
|
+
return diagnosticTurnStorage.run(turn, () => {
|
|
157
|
+
try {
|
|
158
|
+
const result = work();
|
|
159
|
+
if (result instanceof Promise) {
|
|
160
|
+
return result.finally(() => {
|
|
161
|
+
turn.active = false;
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
turn.active = false;
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
turn.active = false;
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** Applied only by debug-installed wrappers; release completions keep their original identity. */
|
|
174
|
+
function guardStateLaneCompletion(completion, label, owner) {
|
|
175
|
+
return new Proxy(completion, {
|
|
176
|
+
get(target, property) {
|
|
177
|
+
if (property === 'then') {
|
|
178
|
+
return (onFulfilled, onRejected) => {
|
|
179
|
+
const current = ZLinkStateLane.current;
|
|
180
|
+
if (current !== undefined && current !== owner) {
|
|
181
|
+
throw new Error(`A state lane turn cannot wait for ${label}.`);
|
|
182
|
+
}
|
|
183
|
+
return target.then(onFulfilled, onRejected);
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (property === 'catch') {
|
|
187
|
+
return (onRejected) => guardStateLaneCompletion(target.catch(onRejected), label, owner);
|
|
188
|
+
}
|
|
189
|
+
if (property === 'finally') {
|
|
190
|
+
return (onFinally) => guardStateLaneCompletion(target.finally(onFinally), label, owner);
|
|
191
|
+
}
|
|
192
|
+
const value = Reflect.get(target, property, target);
|
|
193
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function trackDiagnosticCompletion(completion, name) {
|
|
198
|
+
const release = registerDiagnosticWork(name);
|
|
199
|
+
void completion.then(release, release);
|
|
200
|
+
return completion;
|
|
201
|
+
}
|
|
202
|
+
function debugPendingWorkNames() {
|
|
203
|
+
return [...(diagnosticPending?.values() ?? [])];
|
|
204
|
+
}
|
|
205
|
+
function diagnosticWorkName(work) {
|
|
206
|
+
return work.name.length > 0 ? work.name : '<anonymous>';
|
|
207
|
+
}
|
|
208
|
+
function registerDiagnosticWork(name) {
|
|
209
|
+
if (diagnosticPending === undefined)
|
|
210
|
+
return () => undefined;
|
|
211
|
+
const id = ++nextDiagnosticWork;
|
|
212
|
+
const frames = new Error().stack?.split('\n').slice(2) ?? [];
|
|
213
|
+
const caller = frames
|
|
214
|
+
.find((frame) => !frame.includes('state-lane.') && !frame.includes('serial-execution-queue.'))
|
|
215
|
+
?.trim() ?? UNKNOWN_DIAGNOSTIC_CALLER;
|
|
216
|
+
diagnosticPending.set(id, `${name} ${caller}`);
|
|
217
|
+
return () => {
|
|
218
|
+
diagnosticPending.delete(id);
|
|
219
|
+
};
|
|
220
|
+
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { RoutingId, ZLinkActorJoinOperationId } from '../../contracts';
|
|
2
|
+
export declare const SHA256_DIGEST_BYTES = 32;
|
|
3
|
+
export declare const RECREATE_RELOCATION_CONTENT_TYPE = "application/vnd.zlink.actor-relocation.recreate";
|
|
4
|
+
export declare const SNAPSHOT_RELOCATION_CONTENT_TYPE = "application/vnd.zlink.actor-relocation.snapshot";
|
|
2
5
|
export interface CanonicalActorJoinRecoveryRequest {
|
|
3
6
|
readonly actorId: string;
|
|
4
7
|
readonly actorType: string;
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SNAPSHOT_RELOCATION_CONTENT_TYPE = exports.RECREATE_RELOCATION_CONTENT_TYPE = exports.SHA256_DIGEST_BYTES = void 0;
|
|
3
4
|
exports.canonicalActorJoinHandoffId = canonicalActorJoinHandoffId;
|
|
4
5
|
exports.encodeCanonicalActorJoinRecoverySavedWork = encodeCanonicalActorJoinRecoverySavedWork;
|
|
5
6
|
exports.decodeCanonicalActorJoinRecoverySavedWork = decodeCanonicalActorJoinRecoverySavedWork;
|
|
6
7
|
exports.routingIdBytes = routingIdBytes;
|
|
8
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
7
9
|
const node_crypto_1 = require("node:crypto");
|
|
8
|
-
const routing_id_1 = require("../routing-id");
|
|
9
10
|
const service_wire_pilot_codec_generated_1 = require("../protocol/service_wire_pilot_codec.generated");
|
|
11
|
+
const routing_id_1 = require("../routing-id");
|
|
10
12
|
const service_stateful_wire_codec_1 = require("./service-stateful-wire-codec");
|
|
13
|
+
const ACTOR_ID_DIGEST_MAX_BYTES = 0xffff;
|
|
14
|
+
exports.SHA256_DIGEST_BYTES = 32;
|
|
11
15
|
const RECOVERY_PACKET_NAME = '__zlink.actor.routed_join.recovery';
|
|
12
16
|
const RECOVERY_CONTENT_TYPE = 'application/x-zlink-actor-routed-join-recovery-v1';
|
|
13
17
|
const MAXIMUM_METADATA_BYTES = 256 * 1024;
|
|
14
18
|
const FRAMEWORK_METADATA_UPPER_BOUND_BYTES = 64 * 1024;
|
|
15
19
|
const ACCEPTED_JOURNAL_UPPER_BOUND_BYTES = 16 * 1024 * 1024;
|
|
16
20
|
const SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES = 64 * 1024 * 1024;
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
exports.RECREATE_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.recreate';
|
|
22
|
+
exports.SNAPSHOT_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.snapshot';
|
|
19
23
|
function canonicalActorJoinHandoffId(input) {
|
|
20
24
|
const actor = textBytes(input.actorId, 'actorId');
|
|
21
|
-
if (actor.byteLength >
|
|
25
|
+
if (actor.byteLength > ACTOR_ID_DIGEST_MAX_BYTES)
|
|
22
26
|
throw new RangeError('Actor id exceeds u16 bytes.');
|
|
23
27
|
const digest = (0, node_crypto_1.createHash)('sha256')
|
|
24
28
|
.update(Buffer.concat([
|
|
@@ -65,7 +69,7 @@ function encodeCanonicalActorJoinRecoverySavedWork(input) {
|
|
|
65
69
|
RelocationChecksumCrc32c: 0,
|
|
66
70
|
RelocationAggregateId: canonicalUuid(input.relocationId),
|
|
67
71
|
RelocationAggregateGeneration: 1n,
|
|
68
|
-
RelocationInventoryDigest: Buffer.alloc(
|
|
72
|
+
RelocationInventoryDigest: Buffer.alloc(exports.SHA256_DIGEST_BYTES).toString('base64'),
|
|
69
73
|
RequestContentType: requireText(input.requestContentType, 'Actor Join request content type'),
|
|
70
74
|
Request: '',
|
|
71
75
|
HandoffFrames: [],
|
|
@@ -258,14 +262,14 @@ function predictedRelocationPayloadBytes(requestBytes, relocationContentType) {
|
|
|
258
262
|
if (!Number.isSafeInteger(requestBytes) || requestBytes < 0) {
|
|
259
263
|
throw new RangeError('Actor Join request size is invalid.');
|
|
260
264
|
}
|
|
261
|
-
if (relocationContentType !== RECREATE_RELOCATION_CONTENT_TYPE &&
|
|
262
|
-
relocationContentType !== SNAPSHOT_RELOCATION_CONTENT_TYPE) {
|
|
265
|
+
if (relocationContentType !== exports.RECREATE_RELOCATION_CONTENT_TYPE &&
|
|
266
|
+
relocationContentType !== exports.SNAPSHOT_RELOCATION_CONTENT_TYPE) {
|
|
263
267
|
throw new TypeError('Actor Join relocation content type is invalid.');
|
|
264
268
|
}
|
|
265
269
|
return (FRAMEWORK_METADATA_UPPER_BOUND_BYTES +
|
|
266
270
|
ACCEPTED_JOURNAL_UPPER_BOUND_BYTES +
|
|
267
271
|
requestBytes +
|
|
268
|
-
(relocationContentType === SNAPSHOT_RELOCATION_CONTENT_TYPE
|
|
272
|
+
(relocationContentType === exports.SNAPSHOT_RELOCATION_CONTENT_TYPE
|
|
269
273
|
? SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES
|
|
270
274
|
: 0));
|
|
271
275
|
}
|
|
@@ -281,7 +285,7 @@ function requireText(value, name) {
|
|
|
281
285
|
return value;
|
|
282
286
|
}
|
|
283
287
|
function nonZeroU64(value, name) {
|
|
284
|
-
if (value < 1n || value >
|
|
288
|
+
if (value < 1n || value > stream_wire_1.UINT64_MAX)
|
|
285
289
|
throw new RangeError(`${name} is invalid.`);
|
|
286
290
|
return value;
|
|
287
291
|
}
|
|
@@ -293,7 +297,7 @@ function u16(value) {
|
|
|
293
297
|
return result;
|
|
294
298
|
}
|
|
295
299
|
function u64(value) {
|
|
296
|
-
if (value < 0n || value >
|
|
300
|
+
if (value < 0n || value > stream_wire_1.UINT64_MAX)
|
|
297
301
|
throw new RangeError('u64');
|
|
298
302
|
const result = Buffer.alloc(8);
|
|
299
303
|
result.writeBigUInt64BE(value);
|
|
@@ -317,7 +321,7 @@ function integer(value, name) {
|
|
|
317
321
|
if (typeof value !== 'string' || !/^\d+$/u.test(value))
|
|
318
322
|
throw new TypeError(`${name} is invalid.`);
|
|
319
323
|
const parsed = BigInt(value);
|
|
320
|
-
if (parsed >
|
|
324
|
+
if (parsed > stream_wire_1.UINT64_MAX)
|
|
321
325
|
throw new TypeError(`${name} exceeds u64.`);
|
|
322
326
|
return parsed;
|
|
323
327
|
}
|
|
@@ -8,27 +8,5 @@ export declare class EventLoopResourceStack {
|
|
|
8
8
|
own<T extends CloseableResource>(resource: T): T;
|
|
9
9
|
close(): Promise<void>;
|
|
10
10
|
}
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
export declare class EventLoopWorkQueues {
|
|
14
|
-
private readonly infrastructure;
|
|
15
|
-
private infrastructureHead;
|
|
16
|
-
private infrastructureCount;
|
|
17
|
-
private readonly application;
|
|
18
|
-
private applicationHead;
|
|
19
|
-
private applicationCount;
|
|
20
|
-
private infrastructureScheduled;
|
|
21
|
-
private applicationScheduled;
|
|
22
|
-
private accepting;
|
|
23
|
-
submitInfrastructure(task: EventLoopTask): boolean;
|
|
24
|
-
submitApplication(task: EventLoopTask): boolean;
|
|
25
|
-
stopAdmission(): void;
|
|
26
|
-
private scheduleInfrastructure;
|
|
27
|
-
private drainInfrastructure;
|
|
28
|
-
private scheduleApplication;
|
|
29
|
-
private drainApplication;
|
|
30
|
-
private takeInfrastructure;
|
|
31
|
-
private takeApplication;
|
|
32
|
-
private compactInfrastructure;
|
|
33
|
-
private compactApplication;
|
|
34
|
-
}
|
|
11
|
+
export declare function closeResources(resources: readonly CloseableResource[]): Promise<void>;
|
|
12
|
+
export declare function finishResourceCleanup(failures: readonly unknown[]): void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
3
|
+
exports.EventLoopResourceStack = void 0;
|
|
4
|
+
exports.closeResources = closeResources;
|
|
5
|
+
exports.finishResourceCleanup = finishResourceCleanup;
|
|
5
6
|
/** Closes owned runtime resources once, in reverse acquisition order. */
|
|
6
7
|
class EventLoopResourceStack {
|
|
7
8
|
resources = [];
|
|
@@ -31,124 +32,10 @@ async function closeResources(resources) {
|
|
|
31
32
|
failures.push(error);
|
|
32
33
|
}
|
|
33
34
|
}
|
|
35
|
+
finishResourceCleanup(failures);
|
|
36
|
+
}
|
|
37
|
+
function finishResourceCleanup(failures) {
|
|
34
38
|
if (failures.length > 0) {
|
|
35
39
|
throw new AggregateError(failures, 'Event-loop resource cleanup failed.');
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
|
-
/** Keeps infrastructure progress independent from awaiting application handlers. */
|
|
39
|
-
class EventLoopWorkQueues {
|
|
40
|
-
infrastructure = [];
|
|
41
|
-
infrastructureHead = 0;
|
|
42
|
-
infrastructureCount = 0;
|
|
43
|
-
application = [];
|
|
44
|
-
applicationHead = 0;
|
|
45
|
-
applicationCount = 0;
|
|
46
|
-
infrastructureScheduled = false;
|
|
47
|
-
applicationScheduled = false;
|
|
48
|
-
accepting = true;
|
|
49
|
-
submitInfrastructure(task) {
|
|
50
|
-
if (!this.accepting)
|
|
51
|
-
return false;
|
|
52
|
-
this.infrastructure.push(task);
|
|
53
|
-
this.infrastructureCount += 1;
|
|
54
|
-
this.scheduleInfrastructure();
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
submitApplication(task) {
|
|
58
|
-
if (!this.accepting)
|
|
59
|
-
return false;
|
|
60
|
-
this.application.push(task);
|
|
61
|
-
this.applicationCount += 1;
|
|
62
|
-
this.scheduleApplication();
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
stopAdmission() {
|
|
66
|
-
this.accepting = false;
|
|
67
|
-
}
|
|
68
|
-
scheduleInfrastructure() {
|
|
69
|
-
if (this.infrastructureScheduled)
|
|
70
|
-
return;
|
|
71
|
-
this.infrastructureScheduled = true;
|
|
72
|
-
queueMicrotask(() => this.drainInfrastructure());
|
|
73
|
-
}
|
|
74
|
-
drainInfrastructure() {
|
|
75
|
-
this.infrastructureScheduled = false;
|
|
76
|
-
const task = this.takeInfrastructure();
|
|
77
|
-
if (task === undefined)
|
|
78
|
-
return;
|
|
79
|
-
try {
|
|
80
|
-
const result = (0, execution_1.runZLinkExecutionArea)('infrastructure', task);
|
|
81
|
-
if (result instanceof Promise)
|
|
82
|
-
void result.catch(() => undefined);
|
|
83
|
-
}
|
|
84
|
-
finally {
|
|
85
|
-
if (this.infrastructureCount > 0)
|
|
86
|
-
this.scheduleInfrastructure();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
scheduleApplication() {
|
|
90
|
-
if (this.applicationScheduled)
|
|
91
|
-
return;
|
|
92
|
-
this.applicationScheduled = true;
|
|
93
|
-
queueMicrotask(() => void this.drainApplication());
|
|
94
|
-
}
|
|
95
|
-
async drainApplication() {
|
|
96
|
-
try {
|
|
97
|
-
const task = this.takeApplication();
|
|
98
|
-
if (task !== undefined) {
|
|
99
|
-
await (0, execution_1.runZLinkExecutionArea)('application', task);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// Handler failure is reported by the dispatch owner; it does not stop this queue.
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
this.applicationScheduled = false;
|
|
107
|
-
if (this.applicationCount > 0)
|
|
108
|
-
this.scheduleApplication();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
takeInfrastructure() {
|
|
112
|
-
const task = this.infrastructure[this.infrastructureHead];
|
|
113
|
-
if (task === undefined)
|
|
114
|
-
return undefined;
|
|
115
|
-
this.infrastructure[this.infrastructureHead] = undefined;
|
|
116
|
-
this.infrastructureHead += 1;
|
|
117
|
-
this.infrastructureCount -= 1;
|
|
118
|
-
this.compactInfrastructure();
|
|
119
|
-
return task;
|
|
120
|
-
}
|
|
121
|
-
takeApplication() {
|
|
122
|
-
const task = this.application[this.applicationHead];
|
|
123
|
-
if (task === undefined)
|
|
124
|
-
return undefined;
|
|
125
|
-
this.application[this.applicationHead] = undefined;
|
|
126
|
-
this.applicationHead += 1;
|
|
127
|
-
this.applicationCount -= 1;
|
|
128
|
-
this.compactApplication();
|
|
129
|
-
return task;
|
|
130
|
-
}
|
|
131
|
-
compactInfrastructure() {
|
|
132
|
-
if (this.infrastructureCount === 0) {
|
|
133
|
-
this.infrastructure.length = 0;
|
|
134
|
-
this.infrastructureHead = 0;
|
|
135
|
-
}
|
|
136
|
-
else if (this.infrastructureHead >= 1024 &&
|
|
137
|
-
this.infrastructureHead * 2 >= this.infrastructure.length) {
|
|
138
|
-
this.infrastructure.splice(0, this.infrastructureHead);
|
|
139
|
-
this.infrastructureHead = 0;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
compactApplication() {
|
|
143
|
-
if (this.applicationCount === 0) {
|
|
144
|
-
this.application.length = 0;
|
|
145
|
-
this.applicationHead = 0;
|
|
146
|
-
}
|
|
147
|
-
else if (this.applicationHead >= 1024 &&
|
|
148
|
-
this.applicationHead * 2 >= this.application.length) {
|
|
149
|
-
this.application.splice(0, this.applicationHead);
|
|
150
|
-
this.applicationHead = 0;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
exports.EventLoopWorkQueues = EventLoopWorkQueues;
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE = exports.OPERATION_IDENTITY_BYTES = void 0;
|
|
3
4
|
exports.operationIdentityKey = operationIdentityKey;
|
|
4
5
|
exports.createRandomOperationIdentity = createRandomOperationIdentity;
|
|
6
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
5
7
|
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
exports.OPERATION_IDENTITY_BYTES = 16;
|
|
9
|
+
exports.ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE = 2n;
|
|
6
10
|
function operationIdentityKey(operationId) {
|
|
7
11
|
requireUnsigned64(operationId.high, 'operationId.high');
|
|
8
12
|
requireUnsigned64(operationId.low, 'operationId.low');
|
|
@@ -13,13 +17,13 @@ function operationIdentityKey(operationId) {
|
|
|
13
17
|
}
|
|
14
18
|
function createRandomOperationIdentity(source = node_crypto_1.randomBytes) {
|
|
15
19
|
for (;;) {
|
|
16
|
-
const bytes = source(
|
|
17
|
-
if (bytes.length !==
|
|
18
|
-
throw new RangeError(
|
|
20
|
+
const bytes = source(exports.OPERATION_IDENTITY_BYTES);
|
|
21
|
+
if (bytes.length !== exports.OPERATION_IDENTITY_BYTES) {
|
|
22
|
+
throw new RangeError(`Operation identity entropy source must return exactly ${exports.OPERATION_IDENTITY_BYTES} bytes.`);
|
|
19
23
|
}
|
|
20
24
|
const operationId = {
|
|
21
25
|
high: bytes.readBigUInt64BE(0),
|
|
22
|
-
low: bytes.readBigUInt64BE(
|
|
26
|
+
low: bytes.readBigUInt64BE(stream_wire_1.UINT64_BYTES)
|
|
23
27
|
};
|
|
24
28
|
if (operationId.high !== 0n || operationId.low !== 0n) {
|
|
25
29
|
return operationId;
|
|
@@ -27,7 +31,7 @@ function createRandomOperationIdentity(source = node_crypto_1.randomBytes) {
|
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
function requireUnsigned64(value, name) {
|
|
30
|
-
if (typeof value !== 'bigint' || value < 0n || value >
|
|
34
|
+
if (typeof value !== 'bigint' || value < 0n || value > stream_wire_1.UINT64_MAX) {
|
|
31
35
|
throw new RangeError(`${name} must be an unsigned 64-bit integer.`);
|
|
32
36
|
}
|
|
33
37
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export interface OperationClock {
|
|
2
|
-
|
|
3
|
-
clearTimeout(handle: unknown): void;
|
|
2
|
+
now(): number;
|
|
4
3
|
}
|
|
5
4
|
export declare class OperationTimeoutError extends Error {
|
|
6
5
|
readonly operationId: bigint;
|
|
@@ -17,20 +16,19 @@ export interface PendingOperation<T> {
|
|
|
17
16
|
/** Owns request completion so reply, timeout, cancellation, and shutdown race safely. */
|
|
18
17
|
export declare class OperationRegistry<T> {
|
|
19
18
|
private readonly clock;
|
|
19
|
+
private readonly onPendingChanged?;
|
|
20
20
|
private readonly entries;
|
|
21
21
|
private nextId;
|
|
22
|
-
private
|
|
22
|
+
private deadlineCursor?;
|
|
23
23
|
private closed;
|
|
24
|
-
constructor(clock?: OperationClock);
|
|
24
|
+
constructor(clock?: OperationClock, onPendingChanged?: (() => void) | undefined);
|
|
25
25
|
register(timeoutMs: number, timeoutOwner?: 'registry' | 'sender'): PendingOperation<T>;
|
|
26
26
|
complete(id: bigint, value: T): boolean;
|
|
27
27
|
fail(id: bigint, reason: unknown): boolean;
|
|
28
|
-
private failCore;
|
|
29
28
|
cancel(id: bigint, message?: string): boolean;
|
|
30
29
|
isPending(id: bigint): boolean;
|
|
31
30
|
close(reason?: string): void;
|
|
32
31
|
get size(): number;
|
|
33
|
-
|
|
32
|
+
expire(nowMs: number, turnDeadlineMs: number): number;
|
|
34
33
|
private take;
|
|
35
|
-
private clearTimer;
|
|
36
34
|
}
|