@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,68 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZLinkUserSpotCreationCoordinator = exports.ZLinkHostSpotAddressTransport = exports.ZLinkRelocationStateIncompatibleError = exports.ZLinkRouteMeshRuntimeCoordinator = exports.ZLinkRetiringRollbackError = exports.transferIdString = exports.ZLinkActorTransferAuthorityRuntime = exports.ZLinkFrameworkRuntimeHost = void 0;
|
|
3
|
+
exports.ZLinkUserSpotCreationCoordinator = exports.ZLinkHostSpotAddressTransport = exports.ZLinkRelocationStateIncompatibleError = exports.ZLinkRouteMeshRuntimeCoordinator = exports.ZLinkRetiringRollbackError = exports.ZLinkDrainingStatePublishError = exports.transferIdString = exports.ZLinkActorTransferAuthorityRuntime = exports.ZLinkFrameworkRuntimeHost = void 0;
|
|
4
4
|
exports.hasUnsupportedManualTopology = hasUnsupportedManualTopology;
|
|
5
5
|
exports.hasExactPeerReadiness = hasExactPeerReadiness;
|
|
6
|
-
const
|
|
7
|
-
const
|
|
6
|
+
const location_store_pages_1 = require("../locations/location-store-pages");
|
|
7
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
8
8
|
const node_crypto_1 = require("node:crypto");
|
|
9
|
-
const runtime_message_1 = require("../backend/runtime-message");
|
|
10
|
-
const runtime_values_1 = require("../backend/runtime-values");
|
|
11
|
-
const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
|
|
12
|
-
const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
|
|
13
|
-
const abort_1 = require("../abort");
|
|
14
|
-
const backend_1 = require("../backend");
|
|
15
|
-
const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
|
|
16
9
|
const contracts_1 = require("../../contracts");
|
|
17
|
-
const
|
|
18
|
-
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
10
|
+
const ConfigurationException_1 = require("../../contracts/Configuration/ConfigurationException");
|
|
19
11
|
const DiagnosticsValidation_1 = require("../../contracts/Configuration/DiagnosticsValidation");
|
|
20
|
-
const
|
|
21
|
-
const
|
|
12
|
+
const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
|
|
13
|
+
const Registration_1 = require("../../contracts/Configuration/Registration");
|
|
14
|
+
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
15
|
+
const Locations_1 = require("../../contracts/Locations");
|
|
16
|
+
const Stores_1 = require("../../contracts/Locations/Stores");
|
|
17
|
+
const abort_1 = require("../abort");
|
|
18
|
+
const activation_admission_1 = require("../activation-admission");
|
|
22
19
|
const actors_1 = require("../actors");
|
|
20
|
+
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
23
21
|
const actor_transport_delivery_gate_1 = require("../actors/actor-transport-delivery-gate");
|
|
22
|
+
const admission_1 = require("../admission");
|
|
24
23
|
const application_job_queue_handler_start_gate_1 = require("../application-jobs/application-job-queue-handler-start-gate");
|
|
25
|
-
const
|
|
24
|
+
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
25
|
+
const backend_1 = require("../backend");
|
|
26
|
+
const runtime_message_1 = require("../backend/runtime-message");
|
|
27
|
+
const runtime_values_1 = require("../backend/runtime-values");
|
|
28
|
+
const channels_1 = require("../channels");
|
|
29
|
+
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
26
30
|
const diagnostics_1 = require("../diagnostics");
|
|
27
|
-
const
|
|
31
|
+
const runtime_metrics_1 = require("../diagnostics/runtime-metrics");
|
|
28
32
|
const runtime_observation_queue_1 = require("../diagnostics/runtime-observation-queue");
|
|
33
|
+
const topology_runtime_projections_1 = require("../diagnostics/topology-runtime-projections");
|
|
34
|
+
const execution_1 = require("../execution");
|
|
35
|
+
const listener_records_1 = require("../foundation/listener-records");
|
|
36
|
+
const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
|
|
37
|
+
const service_authority_payload_codec_1 = require("../foundation/service-authority-payload-codec");
|
|
38
|
+
const service_relocation_coordinator_1 = require("../foundation/service-relocation-coordinator");
|
|
39
|
+
const service_relocation_runtime_1 = require("../foundation/service-relocation-runtime");
|
|
40
|
+
const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
|
|
41
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
42
|
+
const locations_1 = require("../locations");
|
|
43
|
+
const creation_payload_codec_1 = require("../messaging/creation-payload-codec");
|
|
44
|
+
const payload_codec_1 = require("../messaging/payload-codec");
|
|
45
|
+
const submission_result_1 = require("../messaging/submission-result");
|
|
46
|
+
const routing_id_1 = require("../routing-id");
|
|
29
47
|
const spots_1 = require("../spots");
|
|
30
|
-
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
31
|
-
const actors_2 = require("../actors");
|
|
32
48
|
const streams_1 = require("../streams");
|
|
33
|
-
const
|
|
34
|
-
const Locations_1 = require("../../contracts/Locations");
|
|
49
|
+
const actor_placement_coordinator_1 = require("./actor-placement-coordinator");
|
|
35
50
|
const actor_runtime_options_factory_1 = require("./actor-runtime-options-factory");
|
|
36
|
-
const actor_transfer_runtime_1 = require("./actor-transfer-runtime");
|
|
37
51
|
const actor_transfer_authority_runtime_1 = require("./actor-transfer-authority-runtime");
|
|
52
|
+
const actor_transfer_runtime_1 = require("./actor-transfer-runtime");
|
|
53
|
+
const application_job_queue_1 = require("./application-job-queue");
|
|
54
|
+
const bound_session_relay_1 = require("./bound-session-relay");
|
|
55
|
+
const channel_runtime_options_factory_1 = require("./channel-runtime-options-factory");
|
|
38
56
|
const entry_actor_runtime_1 = require("./entry-actor-runtime");
|
|
57
|
+
const host_capacity_status_1 = require("./host-capacity-status");
|
|
58
|
+
const instance_activation_authority_1 = require("./instance-activation-authority");
|
|
39
59
|
const location_runtime_owner_1 = require("./location-runtime-owner");
|
|
40
60
|
const mesh_router_resolver_1 = require("./mesh-router-resolver");
|
|
41
|
-
const bound_session_relay_1 = require("./bound-session-relay");
|
|
42
|
-
const routing_id_1 = require("../routing-id");
|
|
43
|
-
const service_authority_payload_codec_1 = require("../foundation/service-authority-payload-codec");
|
|
44
|
-
const service_relocation_runtime_1 = require("../foundation/service-relocation-runtime");
|
|
45
|
-
const spot_runtime_options_factory_1 = require("./spot-runtime-options-factory");
|
|
46
|
-
const channel_runtime_options_factory_1 = require("./channel-runtime-options-factory");
|
|
47
|
-
const spot_node_runtime_options_factory_1 = require("./spot-node-runtime-options-factory");
|
|
48
|
-
const runtime_shutdown_1 = require("./runtime-shutdown");
|
|
49
|
-
const admission_1 = require("../admission");
|
|
50
|
-
const activation_admission_1 = require("../activation-admission");
|
|
51
61
|
const route_mesh_runtime_1 = require("./route-mesh-runtime");
|
|
52
|
-
const service_relocation_coordinator_1 = require("../foundation/service-relocation-coordinator");
|
|
53
|
-
const ConfigurationException_1 = require("../../contracts/Configuration/ConfigurationException");
|
|
54
|
-
const stateful_authority_route_runtime_1 = require("./stateful-authority-route-runtime");
|
|
55
|
-
const instance_activation_authority_1 = require("./instance-activation-authority");
|
|
56
|
-
const spot_address_transport_1 = require("./spot-address-transport");
|
|
57
|
-
const user_spot_creation_coordinator_1 = require("./user-spot-creation-coordinator");
|
|
58
|
-
const actor_placement_coordinator_1 = require("./actor-placement-coordinator");
|
|
59
|
-
const payload_codec_1 = require("../messaging/payload-codec");
|
|
60
|
-
const creation_payload_codec_1 = require("../messaging/creation-payload-codec");
|
|
61
62
|
const route_mesh_runtime_options_1 = require("./route-mesh-runtime-options");
|
|
63
|
+
const runtime_shutdown_1 = require("./runtime-shutdown");
|
|
62
64
|
const service_relocation_host_runtime_1 = require("./service-relocation-host-runtime");
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const
|
|
65
|
+
const spot_address_transport_1 = require("./spot-address-transport");
|
|
66
|
+
const spot_node_runtime_options_factory_1 = require("./spot-node-runtime-options-factory");
|
|
67
|
+
const spot_runtime_options_factory_1 = require("./spot-runtime-options-factory");
|
|
68
|
+
const stateful_authority_route_runtime_1 = require("./stateful-authority-route-runtime");
|
|
69
|
+
const user_spot_creation_coordinator_1 = require("./user-spot-creation-coordinator");
|
|
70
|
+
const HOST_SHUTDOWN_POLL_INTERVAL_MS = 100;
|
|
71
|
+
const HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS = 10;
|
|
72
|
+
const DEFAULT_HOST_CONTROL_TIMEOUT_MS = 30_000;
|
|
73
|
+
const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
|
|
66
74
|
class ZLinkFrameworkRuntimeHost {
|
|
67
75
|
options;
|
|
68
76
|
backendAdapterFactory;
|
|
@@ -72,6 +80,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
72
80
|
runtimeSequence = 0n;
|
|
73
81
|
runtimeObservationSource = Symbol('zlink.framework-runtime');
|
|
74
82
|
runtimeDeadline;
|
|
83
|
+
shutdownDeadline;
|
|
75
84
|
runtimeRelocationResult;
|
|
76
85
|
runtimeTerminationResult;
|
|
77
86
|
relocationOperation;
|
|
@@ -109,11 +118,8 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
109
118
|
capacityStatus;
|
|
110
119
|
metricRegistrations = [];
|
|
111
120
|
admission = new admission_1.ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
|
|
112
|
-
activationAdmission = new activation_admission_1.ZLinkActivationAdmission((meshName) => this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
|
|
113
|
-
|
|
114
|
-
?.publishMeshNodeState(this.runtimeState, this.executionState?.abortController.signal, meshName)
|
|
115
|
-
.catch(() => undefined);
|
|
116
|
-
});
|
|
121
|
+
activationAdmission = new activation_admission_1.ZLinkActivationAdmission((meshName) => this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
|
|
122
|
+
InternalDefaults_1.DEFAULT_ACTIVATION_CONCURRENCY_LIMIT);
|
|
117
123
|
cachedLocationSpotRouteResolver;
|
|
118
124
|
actorClientLocationResolver;
|
|
119
125
|
// Shared, runtime-mutable message-flow mode cell — installed once so
|
|
@@ -172,7 +178,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
172
178
|
return sendTimeoutMsForSpotMesh(routeChannelId);
|
|
173
179
|
};
|
|
174
180
|
const defaultSpotSendTimeoutMs = Math.max(LEGACY_MESH_SEND_TIMEOUT_MS, ...[...options.registration.spotNodes.values()].map((node) => node.router?.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS), ...[...options.registration.routeChannelOptions.values()].map((route) => route.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS));
|
|
175
|
-
this.routeTransport = new channels_1.ZLinkRuntimeRouteTransport(() => this.channelRuntime, (routerChannelId) => this.meshRouters.canUseRouterChannel(routerChannelId), () => this.spotNodeRuntime, { serializers: options.registration.messageSerializers }, (meshName, targetNodeRid) => this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid), (meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts), this.metrics, () => this.flowCreationEnabled());
|
|
181
|
+
this.routeTransport = new channels_1.ZLinkRuntimeRouteTransport(() => this.channelRuntime, (routerChannelId) => this.meshRouters.canUseRouterChannel(routerChannelId), () => this.spotNodeRuntime, { serializers: options.registration.messageSerializers }, (meshName, targetNodeRid) => this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid), (meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts), this.metrics, () => this.flowCreationEnabled(), () => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow);
|
|
176
182
|
this.spotAddressTransport = new spot_address_transport_1.ZLinkHostSpotAddressTransport({
|
|
177
183
|
resolver: () => this.createLocationSpotRouteResolver(),
|
|
178
184
|
routed: this.routeTransport,
|
|
@@ -183,7 +189,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
183
189
|
meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
|
|
184
190
|
completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
|
|
185
191
|
codecs: { serializers: options.registration.messageSerializers },
|
|
186
|
-
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ??
|
|
192
|
+
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS,
|
|
187
193
|
defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
|
|
188
194
|
sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
|
|
189
195
|
sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
|
|
@@ -197,6 +203,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
197
203
|
rewriteAuthorityPayloadForOwner
|
|
198
204
|
});
|
|
199
205
|
this.streamBindingRuntime = new streams_1.ZLinkStreamBindingRuntime({
|
|
206
|
+
dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
|
|
200
207
|
streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
|
|
201
208
|
streamCompression: options.registration.streamCompression,
|
|
202
209
|
messageSerializers: options.registration.messageSerializers,
|
|
@@ -229,7 +236,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
229
236
|
relay: (actor, header, payload, signal) => this.boundSessionRelay.actorPackets.relayActorPacket(actor, header, payload, signal),
|
|
230
237
|
notifyDisconnected: (actor, signal) => this.boundSessionRelay.actorPackets.notifyBoundActorDisconnected(actor, signal)
|
|
231
238
|
});
|
|
232
|
-
this.actorHandoff = new
|
|
239
|
+
this.actorHandoff = new actors_1.ZLinkActorHandoffCoordinator({
|
|
233
240
|
routedTransport: this.routeTransport,
|
|
234
241
|
messageFollowDurationMs: options.registration.locations.options.messageFollowDurationMs,
|
|
235
242
|
requestTimeoutMs: options.registration.requestTimeoutMs,
|
|
@@ -385,7 +392,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
385
392
|
});
|
|
386
393
|
}
|
|
387
394
|
});
|
|
388
|
-
this.actorTransferRegistry = new
|
|
395
|
+
this.actorTransferRegistry = new actors_1.ZLinkActorTransferRegistry(options.registration.spotNodes, options.providerResolver, options.registration.messageSerializers);
|
|
389
396
|
this.boundSessionFactory = new streams_1.DefaultZLinkBoundSessionFactory(this.streamBindingRuntime);
|
|
390
397
|
this.boundSessionRelay = new bound_session_relay_1.ZLinkBoundSessionRelay({
|
|
391
398
|
requestTimeoutMs: options.registration.requestTimeoutMs,
|
|
@@ -514,6 +521,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
514
521
|
});
|
|
515
522
|
this.serviceRelocation = new service_relocation_host_runtime_1.ZLinkHostServiceRelocationRuntime({
|
|
516
523
|
registration: options.registration,
|
|
524
|
+
targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
|
|
517
525
|
providerResolver: options.providerResolver,
|
|
518
526
|
locationStore: () => this.locationOwner.currentStores?.locationStore,
|
|
519
527
|
currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
|
|
@@ -584,7 +592,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
584
592
|
this.routeMeshRuntime = this.routeMeshCoordinator;
|
|
585
593
|
}
|
|
586
594
|
get isStarted() {
|
|
587
|
-
return this.executionState !== undefined;
|
|
595
|
+
return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
|
|
588
596
|
}
|
|
589
597
|
get status() {
|
|
590
598
|
return {
|
|
@@ -613,6 +621,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
613
621
|
const queue = new runtime_observation_queue_1.RuntimeEventQueue(undefined, signal);
|
|
614
622
|
this.runtimeObservers.add(queue);
|
|
615
623
|
queue.onClose(() => this.runtimeObservers.delete(queue));
|
|
624
|
+
this.publishRuntimeStatus(queue, this.status);
|
|
616
625
|
return queue;
|
|
617
626
|
}
|
|
618
627
|
resetCapacityMetrics() {
|
|
@@ -624,7 +633,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
624
633
|
}
|
|
625
634
|
relocate(options) {
|
|
626
635
|
const effectiveTargetApplicationVersion = validateRelocationOptions(options, this.options.registration.applicationVersion);
|
|
627
|
-
const deadlineMs = options.deadlineMs ??
|
|
636
|
+
const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
628
637
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
629
638
|
return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
|
|
630
639
|
}
|
|
@@ -686,7 +695,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
686
695
|
return waitForRuntimeOperation(this.relocationOperation, options.signal);
|
|
687
696
|
}
|
|
688
697
|
shutdown(options) {
|
|
689
|
-
const deadlineMs = options?.deadlineMs ??
|
|
698
|
+
const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
690
699
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
691
700
|
return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
|
|
692
701
|
}
|
|
@@ -756,46 +765,69 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
756
765
|
}
|
|
757
766
|
}
|
|
758
767
|
async runShutdown(deadlineMs) {
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
768
|
+
return await this.runWithShutdownDeadline(deadlineMs, async () => {
|
|
769
|
+
const deadlineAtMs = performance.now() + deadlineMs;
|
|
770
|
+
try {
|
|
771
|
+
this.admission.close();
|
|
772
|
+
if (this.runtimeState === contracts_1.ZLinkFrameworkRuntimeState.Preparing) {
|
|
773
|
+
this.executionState?.abortController.abort();
|
|
774
|
+
}
|
|
775
|
+
this.setRuntimeState(contracts_1.ZLinkFrameworkRuntimeState.Draining);
|
|
776
|
+
if (this.relocationOperation !== undefined &&
|
|
777
|
+
this.relocationStopStarting?.signal.aborted === true) {
|
|
778
|
+
await this.relocationOperation;
|
|
779
|
+
}
|
|
780
|
+
// Seal application admission before the public status reports that the
|
|
781
|
+
// host no longer accepts work. This prevents status polling from racing
|
|
782
|
+
// with the coordinator's synchronous seal step.
|
|
783
|
+
const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
|
|
784
|
+
const shutdown = this.routeMeshCoordinator.shutdownHost(this.runtimeDeadline, this.shutdownDeadline.signal);
|
|
785
|
+
const drain = await shutdown;
|
|
786
|
+
await unscopedStreamDrain;
|
|
787
|
+
await this.stop();
|
|
788
|
+
if (drain.kind === 'forceStopped') {
|
|
789
|
+
return this.completeTermination({
|
|
790
|
+
outcome: contracts_1.ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
791
|
+
reason: drain.reason === 'deadline_exceeded'
|
|
792
|
+
? contracts_1.ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
793
|
+
: contracts_1.ZLinkFrameworkTerminationReason.TeardownFailed
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
if (performance.now() >= deadlineAtMs) {
|
|
797
|
+
throw (0, abort_1.createDeadlineExceededError)('Shutdown resource cleanup exceeded its deadline.');
|
|
798
|
+
}
|
|
799
|
+
return this.completeTermination({
|
|
800
|
+
outcome: contracts_1.ZLinkFrameworkTerminationOutcome.Stopped,
|
|
801
|
+
reason: contracts_1.ZLinkFrameworkTerminationReason.None
|
|
802
|
+
});
|
|
766
803
|
}
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
// with the coordinator's synchronous seal step.
|
|
770
|
-
const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
|
|
771
|
-
const shutdown = this.routeMeshCoordinator.shutdownHost(this.runtimeDeadline, undefined, Math.max(0, deadlineAtMs - performance.now()));
|
|
772
|
-
const drain = await shutdown;
|
|
773
|
-
await unscopedStreamDrain;
|
|
774
|
-
await this.stop();
|
|
775
|
-
if (drain.kind === 'forceStopped') {
|
|
804
|
+
catch (error) {
|
|
805
|
+
await this.stop().catch(() => undefined);
|
|
776
806
|
return this.completeTermination({
|
|
777
807
|
outcome: contracts_1.ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
778
|
-
reason:
|
|
808
|
+
reason: (0, abort_1.isDeadlineExceededError)(error)
|
|
779
809
|
? contracts_1.ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
780
810
|
: contracts_1.ZLinkFrameworkTerminationReason.TeardownFailed
|
|
781
811
|
});
|
|
782
812
|
}
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
async runWithShutdownDeadline(deadlineMs, operation) {
|
|
816
|
+
if (this.shutdownDeadline !== undefined)
|
|
817
|
+
return await operation();
|
|
818
|
+
const deadline = new AbortController();
|
|
819
|
+
this.shutdownDeadline = deadline;
|
|
820
|
+
const ownsRuntimeDeadline = this.runtimeDeadline === undefined;
|
|
821
|
+
this.runtimeDeadline ??= new Date(Date.now() + deadlineMs);
|
|
822
|
+
const timer = setTimeout(() => deadline.abort((0, abort_1.createDeadlineExceededError)('Shutdown deadline exceeded.')), Math.max(0, this.runtimeDeadline.getTime() - Date.now()));
|
|
823
|
+
try {
|
|
824
|
+
return await operation();
|
|
790
825
|
}
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
? contracts_1.ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
797
|
-
: contracts_1.ZLinkFrameworkTerminationReason.TeardownFailed
|
|
798
|
-
});
|
|
826
|
+
finally {
|
|
827
|
+
clearTimeout(timer);
|
|
828
|
+
this.shutdownDeadline = undefined;
|
|
829
|
+
if (ownsRuntimeDeadline)
|
|
830
|
+
this.runtimeDeadline = undefined;
|
|
799
831
|
}
|
|
800
832
|
}
|
|
801
833
|
resetBlockedRelocation(result) {
|
|
@@ -822,13 +854,14 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
822
854
|
}
|
|
823
855
|
recordRelocationResult(result) {
|
|
824
856
|
if (this.relocationOperationStartedAt !== undefined) {
|
|
825
|
-
this.metrics.duration(
|
|
857
|
+
this.metrics.duration(runtime_metrics_1.METRIC_NAMES.HostRelocationDuration, Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
858
|
+
runtime_metrics_1.MILLISECONDS_PER_SECOND, {
|
|
826
859
|
mode: relocationModeMetricName(result.mode),
|
|
827
860
|
outcome: result.outcome === contracts_1.ZLinkFrameworkRelocationOutcome.Relocated ? 'relocated' : 'blocked'
|
|
828
861
|
});
|
|
829
862
|
}
|
|
830
863
|
if (result.outcome === contracts_1.ZLinkFrameworkRelocationOutcome.Blocked) {
|
|
831
|
-
this.metrics.count(
|
|
864
|
+
this.metrics.count(runtime_metrics_1.METRIC_NAMES.HostRelocationBlocked, 1, {
|
|
832
865
|
mode: relocationModeMetricName(result.mode),
|
|
833
866
|
reason: relocationReasonMetricName(result.reason)
|
|
834
867
|
});
|
|
@@ -847,14 +880,14 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
847
880
|
this.runtimeTerminationResult = result;
|
|
848
881
|
this.runtimeDeadline = undefined;
|
|
849
882
|
if (this.shutdownOperationStartedAt !== undefined) {
|
|
850
|
-
this.metrics.duration(
|
|
883
|
+
this.metrics.duration(runtime_metrics_1.METRIC_NAMES.HostShutdownDuration, Math.max(0, performance.now() - this.shutdownOperationStartedAt) / runtime_metrics_1.MILLISECONDS_PER_SECOND, {
|
|
851
884
|
outcome: result.outcome === contracts_1.ZLinkFrameworkTerminationOutcome.Stopped
|
|
852
885
|
? 'stopped'
|
|
853
886
|
: 'force_stopped'
|
|
854
887
|
});
|
|
855
888
|
}
|
|
856
889
|
if (result.outcome === contracts_1.ZLinkFrameworkTerminationOutcome.ForceStopped) {
|
|
857
|
-
this.metrics.count(
|
|
890
|
+
this.metrics.count(runtime_metrics_1.METRIC_NAMES.HostShutdownForced, 1, {
|
|
858
891
|
reason: terminationReasonMetricName(result.reason)
|
|
859
892
|
});
|
|
860
893
|
}
|
|
@@ -876,15 +909,15 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
876
909
|
this.notifyTopologyHostStateChanged();
|
|
877
910
|
const status = this.status;
|
|
878
911
|
for (const observer of this.runtimeObservers) {
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
912
|
+
this.publishRuntimeStatus(observer, status);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
publishRuntimeStatus(observer, status) {
|
|
916
|
+
if ((0, runtime_state_projections_1.runtimeObservationIsTerminal)(status.state)) {
|
|
917
|
+
observer.complete(status, this.runtimeObservationSource);
|
|
885
918
|
}
|
|
886
|
-
|
|
887
|
-
this.
|
|
919
|
+
else {
|
|
920
|
+
observer.push(status, this.runtimeObservationSource);
|
|
888
921
|
}
|
|
889
922
|
}
|
|
890
923
|
notifyTopologyHostStateChanged() {
|
|
@@ -1004,7 +1037,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1004
1037
|
// Start bound receivers before publishing Serving descriptors. A
|
|
1005
1038
|
// discovered ClientServer endpoint must already be able to dispatch.
|
|
1006
1039
|
this.executionState.listenerTasks.push(...channelRuntime.start(this.executionState.taskRunner));
|
|
1007
|
-
const locationRuntime = await this.locationOwner.startForRuntime(this.meshRouters.primaryMeshName(), spotNodeRuntime, channelRuntime);
|
|
1040
|
+
const locationRuntime = await this.locationOwner.startForRuntime(this.meshRouters.primaryMeshName(), spotNodeRuntime, channelRuntime, this.executionState.abortController.signal, () => this.shutdownDeadline.signal);
|
|
1008
1041
|
startedLocationRuntime = locationRuntime;
|
|
1009
1042
|
if (locationRuntime !== undefined) {
|
|
1010
1043
|
this.installOwnerLeaseRecoveryPublication(locationRuntime, spotNodeRuntime, channelRuntime);
|
|
@@ -1046,15 +1079,24 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1046
1079
|
this.lifecycleSink?.push('framework:started');
|
|
1047
1080
|
}
|
|
1048
1081
|
catch (error) {
|
|
1082
|
+
if (this.shutdownDeadline !== undefined && (0, abort_1.isAbortError)(error))
|
|
1083
|
+
throw error;
|
|
1049
1084
|
await statefulAuthorityRoutes?.stop();
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1085
|
+
try {
|
|
1086
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () => (0, runtime_shutdown_1.rollbackRuntimeStart)({
|
|
1087
|
+
context,
|
|
1088
|
+
startedLocationRuntime: startedLocationRuntime ?? this.locationOwner.currentRuntime,
|
|
1089
|
+
shutdownSignal: this.shutdownDeadline.signal,
|
|
1090
|
+
streamRuntime,
|
|
1091
|
+
spotNodeRuntime,
|
|
1092
|
+
channelRuntime,
|
|
1093
|
+
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1094
|
+
}));
|
|
1095
|
+
}
|
|
1096
|
+
catch (cleanupError) {
|
|
1097
|
+
this.runtimeOrPreStartErrorSink.reportRuntimeTaskException('framework start rollback', cleanupError);
|
|
1098
|
+
throw new AggregateError([error, cleanupError], 'Framework start and rollback failed.');
|
|
1099
|
+
}
|
|
1058
1100
|
this.executionState = undefined;
|
|
1059
1101
|
this.channelRuntime = undefined;
|
|
1060
1102
|
this.spotNodeRuntime = undefined;
|
|
@@ -1067,7 +1109,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1067
1109
|
}
|
|
1068
1110
|
}
|
|
1069
1111
|
async stop() {
|
|
1070
|
-
await this.runLifecycle(() => this.stopCore());
|
|
1112
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () => this.runLifecycle(() => this.stopCore()));
|
|
1071
1113
|
}
|
|
1072
1114
|
runtimeMetricMeshSnapshots() {
|
|
1073
1115
|
const snapshots = [];
|
|
@@ -1117,6 +1159,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1117
1159
|
if (state === undefined) {
|
|
1118
1160
|
return;
|
|
1119
1161
|
}
|
|
1162
|
+
state.abortController.abort();
|
|
1120
1163
|
const channelRuntime = this.channelRuntime;
|
|
1121
1164
|
const spotNodeRuntime = this.spotNodeRuntime;
|
|
1122
1165
|
const streamRuntime = this.streamRuntime;
|
|
@@ -1124,24 +1167,25 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1124
1167
|
this.stopTopologyObservers();
|
|
1125
1168
|
this.removeOwnerLeaseRecoveryPublication();
|
|
1126
1169
|
const locationSnapshot = this.locationOwner.clearForStop();
|
|
1127
|
-
this.executionState = undefined;
|
|
1128
|
-
this.channelRuntime = undefined;
|
|
1129
|
-
this.spotNodeRuntime = undefined;
|
|
1130
|
-
this.streamRuntime = undefined;
|
|
1131
|
-
this.statefulAuthorityRoutes = undefined;
|
|
1132
|
-
this.cachedLocationSpotRouteResolver = undefined;
|
|
1133
1170
|
this.lifecycleSink?.push('framework:stop');
|
|
1134
1171
|
await statefulAuthorityRoutes?.stop();
|
|
1135
1172
|
await (0, runtime_shutdown_1.stopRuntimeParts)({
|
|
1136
1173
|
state,
|
|
1137
1174
|
locationSnapshot,
|
|
1138
1175
|
cleanupDeadline: this.runtimeDeadline,
|
|
1176
|
+
shutdownSignal: this.shutdownDeadline.signal,
|
|
1139
1177
|
streamRuntime,
|
|
1140
1178
|
spotNodeRuntime,
|
|
1141
1179
|
channelRuntime,
|
|
1142
1180
|
serviceRelocation: this.serviceRelocation,
|
|
1143
1181
|
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1144
1182
|
});
|
|
1183
|
+
this.executionState = undefined;
|
|
1184
|
+
this.channelRuntime = undefined;
|
|
1185
|
+
this.spotNodeRuntime = undefined;
|
|
1186
|
+
this.streamRuntime = undefined;
|
|
1187
|
+
this.statefulAuthorityRoutes = undefined;
|
|
1188
|
+
this.cachedLocationSpotRouteResolver = undefined;
|
|
1145
1189
|
this.listenerRecords.clear();
|
|
1146
1190
|
this.lifecycleSink?.push('framework:stopped');
|
|
1147
1191
|
if (this.shutdownOperation === undefined) {
|
|
@@ -1191,7 +1235,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1191
1235
|
meshNodes: spotNodeRuntime.meshNodesByName,
|
|
1192
1236
|
pollingIntervalMs: this.options.registration.locations.options.pollingIntervalMs ??
|
|
1193
1237
|
Locations_1.zlinkDefaultLocationOptions.pollingIntervalMs,
|
|
1194
|
-
pageSize:
|
|
1238
|
+
pageSize: Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE,
|
|
1195
1239
|
reportError: (error) => this.runtimeOrPreStartErrorSink.reportRuntimeTaskException('stateful authority route reconciliation', error),
|
|
1196
1240
|
onSpotRouteChanged: (spotId) => this.cachedLocationSpotRouteResolver?.invalidate?.(spotId)
|
|
1197
1241
|
});
|
|
@@ -1211,11 +1255,6 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1211
1255
|
const activationNode = node;
|
|
1212
1256
|
const spotManager = this.spotManager;
|
|
1213
1257
|
if (spotManager !== undefined) {
|
|
1214
|
-
activationNode.setSpotAdmissionProvider?.({
|
|
1215
|
-
isClosing: (spotId) => spotManager.isSpotClosing(meshName, spotId),
|
|
1216
|
-
awaitCloseDecision: (spotId) => spotManager.pendingSpotCloseDecision(meshName, spotId),
|
|
1217
|
-
runtimeState: () => this.runtimeState
|
|
1218
|
-
});
|
|
1219
1258
|
this.registerInstanceApplicationLifecycle(meshName, activationNode, spotManager);
|
|
1220
1259
|
}
|
|
1221
1260
|
activationNode.registerAsyncInstanceActivationAuthority?.(new instance_activation_authority_1.ZLinkInstanceActivationAuthority({
|
|
@@ -1364,8 +1403,9 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1364
1403
|
}
|
|
1365
1404
|
}
|
|
1366
1405
|
catch (error) {
|
|
1367
|
-
throw new ZLinkDrainingStatePublishError(error);
|
|
1406
|
+
throw new route_mesh_runtime_1.ZLinkDrainingStatePublishError(error);
|
|
1368
1407
|
}
|
|
1408
|
+
await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
|
|
1369
1409
|
}
|
|
1370
1410
|
async cleanupOwnerForDrain(signal) {
|
|
1371
1411
|
const runtime = this.locationOwner.currentRuntime;
|
|
@@ -1387,7 +1427,6 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1387
1427
|
activationNode.registerInstanceApplicationLifecycle?.({
|
|
1388
1428
|
isMaterialized: (target) => spotManager.isInstanceMaterialized(meshName, target.stableType, target.targetSpotId),
|
|
1389
1429
|
isMaterializing: (target) => spotManager.isInstanceMaterializing(meshName, target.targetSpotId),
|
|
1390
|
-
isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId),
|
|
1391
1430
|
isIdleEvicting: (target) => spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId),
|
|
1392
1431
|
beginIdleEviction: (target) => spotManager.beginInstanceSpotIdleEviction(meshName, target.targetSpotId),
|
|
1393
1432
|
materialize: (target, objectGeneration) => spotManager.materializeInstance(meshName, target.stableType, target.targetSpotId, objectGeneration, this.executionState?.abortController.signal),
|
|
@@ -1402,12 +1441,6 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1402
1441
|
setSpotManager(spotManager) {
|
|
1403
1442
|
this.spotManager = spotManager;
|
|
1404
1443
|
for (const [meshName, node] of this.spotNodeRuntime?.meshNodesByName ?? []) {
|
|
1405
|
-
const admissionNode = node;
|
|
1406
|
-
admissionNode.setSpotAdmissionProvider?.({
|
|
1407
|
-
isClosing: (spotId) => spotManager.isSpotClosing(meshName, spotId),
|
|
1408
|
-
awaitCloseDecision: (spotId) => spotManager.pendingSpotCloseDecision(meshName, spotId),
|
|
1409
|
-
runtimeState: () => this.runtimeState
|
|
1410
|
-
});
|
|
1411
1444
|
this.registerInstanceApplicationLifecycle(meshName, node, spotManager);
|
|
1412
1445
|
}
|
|
1413
1446
|
}
|
|
@@ -1477,7 +1510,10 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1477
1510
|
detachedTaskRunner: this.detachedTaskRunner(),
|
|
1478
1511
|
metrics: this.metrics,
|
|
1479
1512
|
admission: this.admission,
|
|
1480
|
-
|
|
1513
|
+
statefulExecution: {
|
|
1514
|
+
admissionOpen: () => this.ownerAdmissionOpen(),
|
|
1515
|
+
hostState: () => this.runtimeState
|
|
1516
|
+
}
|
|
1481
1517
|
}).create(this.actorTransferRuntime),
|
|
1482
1518
|
activationAdmission: this.activationAdmission
|
|
1483
1519
|
};
|
|
@@ -1521,7 +1557,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1521
1557
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ObjectClientNotConfigured, `RouteMesh '${meshName}' has no object-client role.`);
|
|
1522
1558
|
}
|
|
1523
1559
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
1524
|
-
const descriptors =
|
|
1560
|
+
const descriptors = await (0, location_store_pages_1.listAllMeshNodeDescriptors)(locationStore, meshName, signal);
|
|
1525
1561
|
const selected = await selectReadyLocationPlacementDescriptor(descriptors, meshNode, signal, (descriptor) => {
|
|
1526
1562
|
const capability = descriptor.objectCapabilities.find((candidate) => candidate.objectKind === 'actor' && candidate.stableType === stableType);
|
|
1527
1563
|
const actors = descriptor.populationCapacity.actors;
|
|
@@ -1602,7 +1638,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1602
1638
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ObjectClientNotConfigured, `RouteMesh '${meshName}' has no object-client role.`);
|
|
1603
1639
|
}
|
|
1604
1640
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
1605
|
-
const descriptors =
|
|
1641
|
+
const descriptors = await (0, location_store_pages_1.listAllMeshNodeDescriptors)(locationStore, meshName, signal);
|
|
1606
1642
|
const selected = await selectReadyLocationPlacementDescriptor(descriptors, meshNode, signal, (descriptor) => {
|
|
1607
1643
|
const capability = descriptor.objectCapabilities.find((candidate) => candidate.objectKind === 'user_spot' && candidate.stableType === request.stableType);
|
|
1608
1644
|
const spotTypeCapacity = descriptor.populationCapacity.spotTypes.find((candidate) => candidate.objectKind === 'user_spot' && candidate.stableType === request.stableType);
|
|
@@ -1680,7 +1716,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1680
1716
|
try {
|
|
1681
1717
|
payload = {
|
|
1682
1718
|
packetName: 'ZLinkFrameworkUserSpotReply',
|
|
1683
|
-
contentType:
|
|
1719
|
+
contentType: stream_wire_1.ZlinkStreamContentType.Raw,
|
|
1684
1720
|
payload: Buffer.from(message.data())
|
|
1685
1721
|
};
|
|
1686
1722
|
}
|
|
@@ -1804,7 +1840,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1804
1840
|
}
|
|
1805
1841
|
return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
|
|
1806
1842
|
},
|
|
1807
|
-
defaultTimeoutMs: this.options.registration.requestTimeoutMs ??
|
|
1843
|
+
defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS,
|
|
1808
1844
|
messageSerializers: this.options.registration.messageSerializers
|
|
1809
1845
|
});
|
|
1810
1846
|
}
|
|
@@ -1824,6 +1860,8 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1824
1860
|
meshCompletions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
|
|
1825
1861
|
notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) => this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
|
|
1826
1862
|
Promise.resolve(undefined),
|
|
1863
|
+
notifyEntrySpotActorJoined: (actor, signal) => this.spotNodeRuntime?.notifyPrimaryEntrySpotActorJoined(actor, signal) ?? Promise.resolve(),
|
|
1864
|
+
notifyEntrySpotActorLeft: (actor, signal) => this.spotNodeRuntime?.notifyPrimaryEntrySpotActorLeft(actor, signal) ?? Promise.resolve(),
|
|
1827
1865
|
locationLifecycle: () => this.locationOwner.currentLifecycle,
|
|
1828
1866
|
primaryMeshName: () => this.meshRouters.primaryMeshName(),
|
|
1829
1867
|
actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
|
|
@@ -1845,7 +1883,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1845
1883
|
if (entrySpotId === undefined) {
|
|
1846
1884
|
throw new ConfigurationException_1.ZLinkConfigurationException(`Actor '${actorRef.actorId}' authority requires its RouteMesh Entry Spot.`);
|
|
1847
1885
|
}
|
|
1848
|
-
await (0,
|
|
1886
|
+
await (0, actors_1.publishInitialActorAuthority)(store, {
|
|
1849
1887
|
actorType,
|
|
1850
1888
|
actor: actorRef,
|
|
1851
1889
|
meshName,
|
|
@@ -1913,6 +1951,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1913
1951
|
}).create();
|
|
1914
1952
|
return {
|
|
1915
1953
|
...options,
|
|
1954
|
+
errorSink: this.runtimeOrPreStartErrorSink,
|
|
1916
1955
|
peerAdmissionSealed: (meshName) => !this.admission.accepts(meshName),
|
|
1917
1956
|
messageFollowReceiver: (record) => {
|
|
1918
1957
|
if (record.source.kind === 'actor') {
|
|
@@ -1951,10 +1990,8 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1951
1990
|
throw new ConfigurationException_1.ZLinkConfigurationException('MeshNode Actor binding record has no binding generation.');
|
|
1952
1991
|
}
|
|
1953
1992
|
const binding = record.kindData;
|
|
1954
|
-
const replyBindingFailure = (kind
|
|
1955
|
-
const terminal =
|
|
1956
|
-
? { terminalResult: runtime_values_1.RequestResult.InvalidState, failureCode: 0 }
|
|
1957
|
-
: (0, framework_errors_internal_1.internalFrameworkWireReply)((0, framework_errors_internal_1.createInternalFrameworkException)(kind, message));
|
|
1993
|
+
const replyBindingFailure = (kind) => {
|
|
1994
|
+
const terminal = (0, framework_errors_internal_1.internalFrameworkWireReply)(kind);
|
|
1958
1995
|
if (record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== runtime_values_1.SubmitResult.Ok) {
|
|
1959
1996
|
throw new ConfigurationException_1.ZLinkConfigurationException(`MeshNode Actor binding target '${binding.actor.actorId}' failure acknowledgement failed.`);
|
|
1960
1997
|
}
|
|
@@ -1970,11 +2007,11 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1970
2007
|
nativeActorRef === undefined ||
|
|
1971
2008
|
nativeActorRef.actorId !== binding.actor.actorId ||
|
|
1972
2009
|
!(0, routing_id_1.routingIdsEqual)(nativeActorRef.nodeRid, binding.actor.nodeRid)) {
|
|
1973
|
-
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale
|
|
2010
|
+
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
1974
2011
|
return;
|
|
1975
2012
|
}
|
|
1976
2013
|
if (nativeActorRef.generation !== binding.actor.generation) {
|
|
1977
|
-
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorGenerationStale
|
|
2014
|
+
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
|
|
1978
2015
|
return;
|
|
1979
2016
|
}
|
|
1980
2017
|
const node = state.meshName === meshName ? this.spotNodeRuntime?.meshNode(meshName) : undefined;
|
|
@@ -1986,7 +2023,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1986
2023
|
localStatus.lifecycleGeneration !== binding.actorNodeGeneration ||
|
|
1987
2024
|
state.locationGeneration !== binding.authorityOwnerGeneration ||
|
|
1988
2025
|
state.isMoving) {
|
|
1989
|
-
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale
|
|
2026
|
+
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
1990
2027
|
return;
|
|
1991
2028
|
}
|
|
1992
2029
|
const sessionOwnerIsLocal = (0, routing_id_1.routingIdsEqual)(localStatus.routingId, binding.sessionNodeRid) &&
|
|
@@ -1999,6 +2036,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1999
2036
|
nodeRid: binding.actor.nodeRid
|
|
2000
2037
|
};
|
|
2001
2038
|
if (sessionOwnerIsLocal) {
|
|
2039
|
+
(0, application_job_queue_scope_1.releaseApplicationJobPermitBeforeHandler)();
|
|
2002
2040
|
await this.streamBindingRuntime.retireRemoteBinding(actorRef, binding.sessionRid, binding.bindingGeneration, signal);
|
|
2003
2041
|
}
|
|
2004
2042
|
state.retireBoundSessionBinding(binding);
|
|
@@ -2007,7 +2045,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2007
2045
|
}
|
|
2008
2046
|
const target = this.boundSessionRelay.boundSessions.resolveRemoteBoundSessionTarget(binding.sessionNodeRid, binding.sessionRid);
|
|
2009
2047
|
if (target === undefined) {
|
|
2010
|
-
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale
|
|
2048
|
+
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2011
2049
|
return;
|
|
2012
2050
|
}
|
|
2013
2051
|
const installed = state.installBoundSessionBinding({
|
|
@@ -2020,7 +2058,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2020
2058
|
bindingGeneration: binding.bindingGeneration
|
|
2021
2059
|
});
|
|
2022
2060
|
if (!installed) {
|
|
2023
|
-
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale
|
|
2061
|
+
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2024
2062
|
return;
|
|
2025
2063
|
}
|
|
2026
2064
|
replyBindingSuccess();
|
|
@@ -2047,7 +2085,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2047
2085
|
return;
|
|
2048
2086
|
}
|
|
2049
2087
|
if (record.kind === service_runtime_contracts_1.ReceiveKind.NodeRequest && record.parts.length === 1) {
|
|
2050
|
-
const terminal = (0,
|
|
2088
|
+
const terminal = (0, actors_1.decodeRemoteActorSourceLeaveTerminal)(record.parts[0].data());
|
|
2051
2089
|
if (terminal !== undefined) {
|
|
2052
2090
|
if ((await this.spotManager?.completeFormalSourceLeaveTerminal(terminal.actorId, terminal.transferId, terminal.succeeded)) !== true) {
|
|
2053
2091
|
throw new ConfigurationException_1.ZLinkConfigurationException(`Actor '${terminal.actorId}' has no matching formal transfer terminal gate.`);
|
|
@@ -2231,7 +2269,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2231
2269
|
const resolver = authority === undefined
|
|
2232
2270
|
? legacy
|
|
2233
2271
|
: new locations_1.ZLinkAuthoritySpotRouteResolver(authority, this.meshRouters.spotRouterChannelIdByMesh(), legacy, this.locationOwner.currentLeaseTracker, this.options.registration.locations.options.routeCacheMaxAgeMs, undefined, async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
|
|
2234
|
-
const descriptor = (await
|
|
2272
|
+
const descriptor = (await (0, location_store_pages_1.listAllMeshNodeDescriptors)(authority, meshName, signal)).find((candidate) => (0, routing_id_1.routingIdsEqual)(candidate.rid, nodeRid) &&
|
|
2235
2273
|
candidate.lifecycleGeneration === expectedLifecycleGeneration);
|
|
2236
2274
|
return descriptor?.state;
|
|
2237
2275
|
});
|
|
@@ -2282,12 +2320,13 @@ function hasExactPeerReadiness(descriptors, local, peers) {
|
|
|
2282
2320
|
replacementDescriptors.some((descriptor) => peers.some((peer) => peer.routingId !== null &&
|
|
2283
2321
|
String(peer.routingId) === String(descriptor.rid) &&
|
|
2284
2322
|
peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
2285
|
-
peer.state ===
|
|
2323
|
+
peer.state === service_runtime_contracts_1.MeshPeerRuntimeState.Serving)));
|
|
2286
2324
|
}
|
|
2287
2325
|
var actor_transfer_authority_runtime_2 = require("./actor-transfer-authority-runtime");
|
|
2288
2326
|
Object.defineProperty(exports, "ZLinkActorTransferAuthorityRuntime", { enumerable: true, get: function () { return actor_transfer_authority_runtime_2.ZLinkActorTransferAuthorityRuntime; } });
|
|
2289
2327
|
Object.defineProperty(exports, "transferIdString", { enumerable: true, get: function () { return actor_transfer_authority_runtime_2.transferIdString; } });
|
|
2290
2328
|
var route_mesh_runtime_2 = require("./route-mesh-runtime");
|
|
2329
|
+
Object.defineProperty(exports, "ZLinkDrainingStatePublishError", { enumerable: true, get: function () { return route_mesh_runtime_2.ZLinkDrainingStatePublishError; } });
|
|
2291
2330
|
Object.defineProperty(exports, "ZLinkRetiringRollbackError", { enumerable: true, get: function () { return route_mesh_runtime_2.ZLinkRetiringRollbackError; } });
|
|
2292
2331
|
Object.defineProperty(exports, "ZLinkRouteMeshRuntimeCoordinator", { enumerable: true, get: function () { return route_mesh_runtime_2.ZLinkRouteMeshRuntimeCoordinator; } });
|
|
2293
2332
|
var service_relocation_host_runtime_2 = require("./service-relocation-host-runtime");
|
|
@@ -2301,7 +2340,7 @@ async function waitForForcedSessionNotification(operation) {
|
|
|
2301
2340
|
return;
|
|
2302
2341
|
let timeoutHandle;
|
|
2303
2342
|
const timeout = new Promise((resolve) => {
|
|
2304
|
-
timeoutHandle = setTimeout(resolve,
|
|
2343
|
+
timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
|
|
2305
2344
|
});
|
|
2306
2345
|
try {
|
|
2307
2346
|
await Promise.race([operation.catch(() => undefined), timeout]);
|
|
@@ -2330,12 +2369,6 @@ async function awaitWithDrainSignal(operation, signal) {
|
|
|
2330
2369
|
});
|
|
2331
2370
|
});
|
|
2332
2371
|
}
|
|
2333
|
-
class ZLinkDrainingStatePublishError extends Error {
|
|
2334
|
-
constructor(cause) {
|
|
2335
|
-
super('Failed to publish draining peer rows.', { cause });
|
|
2336
|
-
this.name = 'ZLinkDrainingStatePublishError';
|
|
2337
|
-
}
|
|
2338
|
-
}
|
|
2339
2372
|
function resolveBackendAdapterFactory(internalOptions) {
|
|
2340
2373
|
if (typeof internalOptions === 'object' &&
|
|
2341
2374
|
internalOptions !== null &&
|
|
@@ -2465,7 +2498,7 @@ function waitForPlacementReadiness(signal) {
|
|
|
2465
2498
|
const timer = setTimeout(() => {
|
|
2466
2499
|
signal?.removeEventListener('abort', abort);
|
|
2467
2500
|
resolve();
|
|
2468
|
-
},
|
|
2501
|
+
}, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
|
|
2469
2502
|
const abort = () => {
|
|
2470
2503
|
clearTimeout(timer);
|
|
2471
2504
|
signal?.removeEventListener('abort', abort);
|
|
@@ -2503,8 +2536,8 @@ function relocationReason(reason) {
|
|
|
2503
2536
|
}
|
|
2504
2537
|
function rewriteAuthorityPayloadForOwner(payload, owner) {
|
|
2505
2538
|
const applicationPayload = (0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(payload);
|
|
2506
|
-
const rewritten = (0,
|
|
2507
|
-
? (0,
|
|
2539
|
+
const rewritten = (0, actors_1.isActorAuthorityPayload)(applicationPayload)
|
|
2540
|
+
? (0, actors_1.rewriteActorAuthorityOwner)(applicationPayload, owner)
|
|
2508
2541
|
: ((0, service_authority_payload_codec_1.rewriteServiceAuthorityOwner)(applicationPayload, owner) ?? applicationPayload);
|
|
2509
2542
|
return (0, service_relocation_runtime_1.replaceServiceRelocationAuthorityApplicationPayload)(payload, rewritten);
|
|
2510
2543
|
}
|