@zlink-systems/framework 0.30.0 → 0.30.2
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/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -62,29 +62,27 @@ export class ZLinkSpotActivationRegistry {
|
|
|
62
62
|
|
|
63
63
|
resolve(meshName: string, spotId: RoutingId): ZLinkSpotActivation | undefined {
|
|
64
64
|
const key = spotActivationKey(meshName, spotId);
|
|
65
|
-
return this.staged.has(key) ? undefined : this.activations.get(key);
|
|
65
|
+
return this.staged.has(key) || this.pending.has(key) ? undefined : this.activations.get(key);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
resolveUnique(spotId: RoutingId): ZLinkSpotActivation | undefined {
|
|
69
69
|
const matches = [...this.activations.values()].filter(
|
|
70
70
|
(activation) =>
|
|
71
71
|
String(activation.spotId) === String(spotId) &&
|
|
72
|
-
|
|
72
|
+
this.has(activation.meshName, activation.spotId)
|
|
73
73
|
);
|
|
74
74
|
return matches.length === 1 ? matches[0] : undefined;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
has(meshName: string, spotId: RoutingId): boolean {
|
|
78
|
-
|
|
79
|
-
return !this.staged.has(key) && this.activations.has(key);
|
|
78
|
+
return this.resolve(meshName, spotId) !== undefined;
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
list(meshName: string): readonly ZLinkSpotInfo[] {
|
|
83
82
|
return [...this.activations.values()]
|
|
84
83
|
.filter((activation) => {
|
|
85
84
|
if (activation.meshName !== meshName) return false;
|
|
86
|
-
|
|
87
|
-
return !this.staged.has(key);
|
|
85
|
+
return this.has(activation.meshName, activation.spotId);
|
|
88
86
|
})
|
|
89
87
|
.map((activation) => String(activation.spotId))
|
|
90
88
|
.sort((left, right) => left.localeCompare(right))
|
|
@@ -155,24 +153,38 @@ export class ZLinkSpotActivationRegistry {
|
|
|
155
153
|
});
|
|
156
154
|
}
|
|
157
155
|
|
|
158
|
-
|
|
156
|
+
registerPreparing(activation: ZLinkSpotActivation): void {
|
|
157
|
+
this.registerIncarnation(activation);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
register(activation: ZLinkSpotActivation): ZLinkSpotActivation | undefined {
|
|
161
|
+
return this.registerIncarnation(activation);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private registerIncarnation(activation: ZLinkSpotActivation): ZLinkSpotActivation | undefined {
|
|
159
165
|
const key = spotActivationKey(activation.meshName, activation.spotId);
|
|
160
|
-
|
|
166
|
+
const existing = this.activations.get(key);
|
|
167
|
+
if (existing !== undefined && existing !== activation) {
|
|
161
168
|
throw createInternalFrameworkException(
|
|
162
169
|
ZLinkFrameworkInternalErrorKind.SpotTypeMismatch,
|
|
163
170
|
`Spot '${activation.spotId}' was activated more than once.`
|
|
164
171
|
);
|
|
165
172
|
}
|
|
166
|
-
|
|
167
|
-
|
|
173
|
+
if (existing === undefined) {
|
|
174
|
+
this.activations.set(key, activation);
|
|
175
|
+
this.lifecycleMetrics.opened('user');
|
|
176
|
+
}
|
|
177
|
+
return this.staged.has(key) ? undefined : activation;
|
|
168
178
|
}
|
|
169
179
|
|
|
170
180
|
stage(meshName: string, spotId: RoutingId): void {
|
|
171
181
|
this.staged.add(spotActivationKey(meshName, spotId));
|
|
172
182
|
}
|
|
173
183
|
|
|
174
|
-
publish(meshName: string, spotId: RoutingId):
|
|
175
|
-
|
|
184
|
+
publish(meshName: string, spotId: RoutingId): ZLinkSpotActivation | undefined {
|
|
185
|
+
const key = spotActivationKey(meshName, spotId);
|
|
186
|
+
this.staged.delete(key);
|
|
187
|
+
return this.activations.get(key);
|
|
176
188
|
}
|
|
177
189
|
|
|
178
190
|
detachRelocated(meshName: string, spotId: RoutingId): ZLinkSpotActivation | undefined {
|
|
@@ -250,7 +262,7 @@ export class ZLinkSpotActivationRegistry {
|
|
|
250
262
|
): ZLinkSpotActivationOperation {
|
|
251
263
|
const key = spotActivationKey(meshName, spotId);
|
|
252
264
|
const existing = this.activations.get(key);
|
|
253
|
-
if (existing !== undefined) {
|
|
265
|
+
if (existing !== undefined && !this.pending.has(key)) {
|
|
254
266
|
return {
|
|
255
267
|
owner: false,
|
|
256
268
|
ready: existing.serial.execute(() => {
|
|
@@ -16,7 +16,7 @@ import type { ZLinkBackendSpot } from '../backend/contracts';
|
|
|
16
16
|
import type { ZLinkSpotActorHandlerRegistryRuntime } from '../actors';
|
|
17
17
|
import type { DefaultZLinkSpotHandlerRegistry } from './spot-handler-registry';
|
|
18
18
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
19
|
-
import { ZLinkSpotSerialExecutor } from './spot-serial-executor';
|
|
19
|
+
import { ZLinkSpotSerialExecutor, type ZLinkActorPacketTurnDispatch } from './spot-serial-executor';
|
|
20
20
|
import type { ZLinkSpotTimerRegistry } from './spot-timer';
|
|
21
21
|
import type { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
|
|
22
22
|
import { ZLinkExecutionBarrier, type ZLinkExecutionBarrierSeal } from '../execution';
|
|
@@ -229,37 +229,30 @@ export class ZLinkSpotActivation {
|
|
|
229
229
|
if (!this.relocationBoundaryConsumed) return;
|
|
230
230
|
this.relocationBoundaryConsumed = false;
|
|
231
231
|
this.relocationReadyDeferredTurnId = undefined;
|
|
232
|
-
await this.serial.
|
|
232
|
+
await this.serial.postBarrierTurn(() => this.notifyRelocationReadyCompleted(outcome));
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
async notifyRelocatedBoundary(): Promise<void> {
|
|
236
|
-
await this.serial.
|
|
236
|
+
await this.serial.postBarrierTurn(() =>
|
|
237
237
|
this.notifyRelocationReadyCompleted(ZLinkSpotRelocationReadyOutcome.Relocated)
|
|
238
238
|
);
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
executeActor<T>(
|
|
242
242
|
actorId: string,
|
|
243
|
-
operation: (serial: ZLinkSpotSerialTurnExecutor) => Promise<T> | T
|
|
243
|
+
operation: (serial: ZLinkSpotSerialTurnExecutor) => Promise<T> | T,
|
|
244
|
+
workOptions?: import('../execution/serial-execution-queue').ZLinkSerialWorkOptions
|
|
244
245
|
): Promise<T> {
|
|
245
|
-
return this.serialExecutor.executeActor(actorId, operation);
|
|
246
|
+
return this.serialExecutor.executeActor(actorId, operation, workOptions);
|
|
246
247
|
}
|
|
247
248
|
|
|
248
249
|
/** @internal Restores a non-executing durable prefix into one Actor FIFO. */
|
|
249
|
-
|
|
250
|
+
admitActorPacketPrefix(
|
|
250
251
|
actorId: string,
|
|
251
|
-
records: readonly
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
serial: import('./spot-serial-turn-executor').ZLinkSpotSerialTurnExecutor
|
|
256
|
-
) => Promise<TChild> | TChild
|
|
257
|
-
) => Promise<TChild>
|
|
258
|
-
) => Promise<void>;
|
|
259
|
-
readonly workOptions?: import('../execution/serial-execution-queue').ZLinkSerialWorkOptions;
|
|
260
|
-
}[]
|
|
261
|
-
): readonly Promise<void>[] {
|
|
262
|
-
return this.serialExecutor.admitActorDurablePrefix(actorId, records);
|
|
252
|
+
records: readonly import('../actors/actor-handoff').ZLinkActorHandoffPrefixRecord[],
|
|
253
|
+
dispatch: ZLinkActorPacketTurnDispatch
|
|
254
|
+
): import('../actors/actor-handoff').ZLinkActorHandoffPrefixAdmission {
|
|
255
|
+
return this.serialExecutor.admitActorPacketPrefix(actorId, records, dispatch);
|
|
263
256
|
}
|
|
264
257
|
|
|
265
258
|
sealExecution(kind: ZLinkExecutionBarrierSeal['kind'] = 'relocation'): ZLinkExecutionBarrierSeal {
|
|
@@ -294,7 +287,7 @@ export class ZLinkSpotActivation {
|
|
|
294
287
|
|
|
295
288
|
abortRelocation(capture: ZLinkSpotRelocationCapture): boolean {
|
|
296
289
|
if (!this.executionBarrier.isCurrent(capture.seal)) return false;
|
|
297
|
-
this.timers.abortRelocation(
|
|
290
|
+
this.timers.abortRelocation();
|
|
298
291
|
return this.abortExecutionSeal(capture.seal);
|
|
299
292
|
}
|
|
300
293
|
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
} from '../../contracts';
|
|
31
31
|
import type { Message } from '../../contracts/Common/Message';
|
|
32
32
|
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
33
|
-
import { throwIfAborted } from '../abort';
|
|
33
|
+
import { createAbortError, isAbortError, throwIfAborted } from '../abort';
|
|
34
34
|
import { ZLinkConfigurationException } from '../configuration';
|
|
35
35
|
import {
|
|
36
36
|
ZLinkFrameworkInternalErrorKind,
|
|
@@ -70,7 +70,8 @@ import {
|
|
|
70
70
|
import {
|
|
71
71
|
addSpotTimerRegistrations,
|
|
72
72
|
ZLinkSpotTimerRegistry,
|
|
73
|
-
type ZLinkTimerClock
|
|
73
|
+
type ZLinkTimerClock,
|
|
74
|
+
type ZLinkTimerRelocationState
|
|
74
75
|
} from './spot-timer';
|
|
75
76
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
76
77
|
import { ZLinkSpotSerialExecutor } from './spot-serial-executor';
|
|
@@ -101,6 +102,7 @@ export interface ZLinkSpotActivationLifecycleOptions {
|
|
|
101
102
|
readonly nodeRid?: RoutingId;
|
|
102
103
|
readonly nodeRidProvider?: (meshName: string) => RoutingId | undefined;
|
|
103
104
|
readonly actorCountProvider?: (spotId: RoutingId) => number;
|
|
105
|
+
readonly releaseActorMembers?: (meshName: string, spotId: RoutingId) => Promise<void>;
|
|
104
106
|
readonly userSpotExecutionMode?: (
|
|
105
107
|
meshName: string,
|
|
106
108
|
spotType: Type<ZLinkSpot>
|
|
@@ -148,7 +150,9 @@ export interface ZLinkSpotActivationLifecycleOptions {
|
|
|
148
150
|
objectGeneration: bigint,
|
|
149
151
|
signal?: AbortSignal
|
|
150
152
|
) => Promise<boolean>;
|
|
151
|
-
readonly registerActivation: (activation: ZLinkSpotActivation) => void
|
|
153
|
+
readonly registerActivation: (activation: ZLinkSpotActivation) => void | Promise<void>;
|
|
154
|
+
readonly stageActivation?: (activation: ZLinkSpotActivation) => void;
|
|
155
|
+
readonly discardActivation?: (activation: ZLinkSpotActivation) => void;
|
|
152
156
|
readonly routeToActorJoinPrewarm?: ZLinkRouteToActorJoinPrewarm;
|
|
153
157
|
readonly releaseLocation: (
|
|
154
158
|
activation: ZLinkSpotActivation,
|
|
@@ -200,6 +204,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
200
204
|
spotId: RoutingId,
|
|
201
205
|
objectGeneration: bigint,
|
|
202
206
|
authorityOwnerGeneration: bigint,
|
|
207
|
+
restoredTimers: readonly ZLinkTimerRelocationState[],
|
|
203
208
|
signal?: AbortSignal
|
|
204
209
|
): Promise<ZLinkSpotActivation> {
|
|
205
210
|
const executionMode =
|
|
@@ -215,7 +220,10 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
215
220
|
);
|
|
216
221
|
const serialExecutor = new ZLinkSpotSerialExecutor(serial, executionMode, spotId);
|
|
217
222
|
const actorHandlers = new ZLinkSpotActorHandlerRegistryRuntime();
|
|
218
|
-
const handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
223
|
+
const handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
224
|
+
actorHandlers,
|
|
225
|
+
this.options.providerResolver
|
|
226
|
+
);
|
|
219
227
|
applySpotHandlerRegistrations(
|
|
220
228
|
handlers,
|
|
221
229
|
implementation as unknown as Type<ZLinkSpot>,
|
|
@@ -237,6 +245,9 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
237
245
|
(name) => serialExecutor.isTimerExecuting(name),
|
|
238
246
|
this.options.timerClock
|
|
239
247
|
);
|
|
248
|
+
// Spot timer §1: the source schedule exists before Configure so its
|
|
249
|
+
// registrations reattach to the restored keys.
|
|
250
|
+
timers.stageRelocation(restoredTimers);
|
|
240
251
|
const outbound = new DefaultZLinkSpotOutbound({
|
|
241
252
|
serial,
|
|
242
253
|
channelClient: this.options.channelClient,
|
|
@@ -301,20 +312,6 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
301
312
|
enumerable: false,
|
|
302
313
|
value: context
|
|
303
314
|
});
|
|
304
|
-
await instance.configure?.();
|
|
305
|
-
await addSpotTimerRegistrations(
|
|
306
|
-
timers,
|
|
307
|
-
implementation as unknown as Type<ZLinkSpot>,
|
|
308
|
-
spotId,
|
|
309
|
-
instance as unknown as ZLinkSpot,
|
|
310
|
-
serial,
|
|
311
|
-
{ timerHandlers: this.options.spotTimerHandlers },
|
|
312
|
-
{
|
|
313
|
-
providerResolver: this.options.providerResolver,
|
|
314
|
-
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
315
|
-
signal
|
|
316
|
-
}
|
|
317
|
-
);
|
|
318
315
|
activation = new ZLinkSpotActivation({
|
|
319
316
|
meshName,
|
|
320
317
|
spotId,
|
|
@@ -342,9 +339,42 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
342
339
|
nativeSpot,
|
|
343
340
|
metrics: this.options.metrics
|
|
344
341
|
});
|
|
345
|
-
|
|
342
|
+
serialExecutor.beginPreparation('relocation');
|
|
343
|
+
const configured = instance;
|
|
344
|
+
await serial.postBarrierTurn(() =>
|
|
345
|
+
timers.runRelocationInitialization(async () => {
|
|
346
|
+
await configured.configure?.();
|
|
347
|
+
await addSpotTimerRegistrations(
|
|
348
|
+
timers,
|
|
349
|
+
implementation as unknown as Type<ZLinkSpot>,
|
|
350
|
+
spotId,
|
|
351
|
+
configured as unknown as ZLinkSpot,
|
|
352
|
+
serial,
|
|
353
|
+
{ timerHandlers: this.options.spotTimerHandlers },
|
|
354
|
+
{
|
|
355
|
+
providerResolver: this.options.providerResolver,
|
|
356
|
+
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
357
|
+
signal
|
|
358
|
+
}
|
|
359
|
+
);
|
|
360
|
+
// Node timer relocation: restored handlers resolve by name among the
|
|
361
|
+
// constructors announced in Configure (addTimer or addTimerHandler).
|
|
362
|
+
await timers.resolveRelocationHandlers(
|
|
363
|
+
handlers
|
|
364
|
+
.snapshot()
|
|
365
|
+
.filter((entry) => entry.kind === 'timer')
|
|
366
|
+
.map((entry) => entry.handlerType),
|
|
367
|
+
(name, periodMs, handlerType) =>
|
|
368
|
+
context.addTimer(name, periodMs, handlerType as never, undefined, signal)
|
|
369
|
+
);
|
|
370
|
+
})
|
|
371
|
+
);
|
|
372
|
+
await this.options.registerActivation(activation);
|
|
346
373
|
return activation;
|
|
347
374
|
} catch (error) {
|
|
375
|
+
const preparation = await Promise.allSettled(
|
|
376
|
+
activation === undefined ? [] : [this.discardPreparation(activation)]
|
|
377
|
+
);
|
|
348
378
|
const cleanup = await Promise.allSettled([
|
|
349
379
|
timers.dispose(),
|
|
350
380
|
...(instance === undefined
|
|
@@ -352,7 +382,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
352
382
|
: [disposeLifecycleHandlers(instance, this.options.detachedTaskRunner)]),
|
|
353
383
|
...(nativeSpot === undefined ? [] : [Promise.resolve().then(() => nativeSpot.dispose())])
|
|
354
384
|
]);
|
|
355
|
-
const cleanupErrors = cleanup
|
|
385
|
+
const cleanupErrors = [...preparation, ...cleanup]
|
|
356
386
|
.filter((result): result is PromiseRejectedResult => result.status === 'rejected')
|
|
357
387
|
.map((result) => result.reason);
|
|
358
388
|
if (cleanupErrors.length > 0) {
|
|
@@ -374,6 +404,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
374
404
|
signal?: AbortSignal,
|
|
375
405
|
serialOwner?: ZLinkSpotActivation
|
|
376
406
|
): Promise<ZLinkSpotActivation> {
|
|
407
|
+
throwIfAborted(signal);
|
|
377
408
|
const serial = serialOwner?.serial ?? new ZLinkSpotSerialTurnExecutor(true, spotId);
|
|
378
409
|
const serialExecutor = new ZLinkSpotSerialExecutor(
|
|
379
410
|
serial,
|
|
@@ -381,7 +412,10 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
381
412
|
spotId
|
|
382
413
|
);
|
|
383
414
|
const actorHandlers = new ZLinkSpotActorHandlerRegistryRuntime();
|
|
384
|
-
const handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
415
|
+
const handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
416
|
+
actorHandlers,
|
|
417
|
+
this.options.providerResolver
|
|
418
|
+
);
|
|
385
419
|
const instanceHandlers = new DefaultZLinkInstanceSpotHandlerRegistry(handlers);
|
|
386
420
|
applySpotHandlerRegistrations(handlers, implementation as unknown as Type<ZLinkSpot>, {
|
|
387
421
|
packetHandlers: this.options.spotPacketHandlers
|
|
@@ -446,35 +480,52 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
446
480
|
externalActorCount: () => this.options.actorCountProvider?.(spotId) ?? 0
|
|
447
481
|
});
|
|
448
482
|
try {
|
|
449
|
-
|
|
450
|
-
await
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
483
|
+
if (serialOwner === undefined) serialExecutor.beginPreparation();
|
|
484
|
+
await serial.postBarrierTurn(async () => {
|
|
485
|
+
throwIfAborted(signal);
|
|
486
|
+
await instance.configure?.();
|
|
487
|
+
await addSpotTimerRegistrations(
|
|
488
|
+
timers,
|
|
489
|
+
implementation as unknown as Type<ZLinkSpot>,
|
|
490
|
+
spotId,
|
|
491
|
+
instance as unknown as ZLinkSpot,
|
|
492
|
+
serial,
|
|
493
|
+
{ timerHandlers: this.options.spotTimerHandlers },
|
|
494
|
+
{
|
|
495
|
+
providerResolver: this.options.providerResolver,
|
|
496
|
+
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
497
|
+
signal
|
|
498
|
+
}
|
|
499
|
+
);
|
|
500
|
+
throwIfAborted(signal);
|
|
501
|
+
await instance!.onInitialize?.(signal);
|
|
502
|
+
});
|
|
503
|
+
throwIfAborted(signal);
|
|
504
|
+
await this.options.registerActivation(activation);
|
|
467
505
|
return activation;
|
|
468
506
|
} catch (error) {
|
|
469
|
-
const
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
]
|
|
473
|
-
|
|
474
|
-
.
|
|
475
|
-
|
|
507
|
+
const failure = signal?.aborted === true ? createAbortError() : error;
|
|
508
|
+
const cancelled = isAbortError(failure);
|
|
509
|
+
if (cancelled && serialOwner === undefined) serial.closeAdmission();
|
|
510
|
+
const cleanupErrors: unknown[] = [];
|
|
511
|
+
try {
|
|
512
|
+
await serialExecutor.finishPreparation(async () => {
|
|
513
|
+
const cleanup = await Promise.allSettled([
|
|
514
|
+
timers.dispose(),
|
|
515
|
+
disposeLifecycleHandlers(instance, this.options.detachedTaskRunner)
|
|
516
|
+
]);
|
|
517
|
+
cleanupErrors.push(
|
|
518
|
+
...cleanup
|
|
519
|
+
.filter((result): result is PromiseRejectedResult => result.status === 'rejected')
|
|
520
|
+
.map((result) => result.reason)
|
|
521
|
+
);
|
|
522
|
+
});
|
|
523
|
+
} catch (cleanupError) {
|
|
524
|
+
cleanupErrors.push(cleanupError);
|
|
525
|
+
}
|
|
526
|
+
if (cancelled && cleanupErrors.length === 0) throw failure;
|
|
476
527
|
throw new AggregateError(
|
|
477
|
-
[
|
|
528
|
+
[failure, ...cleanupErrors],
|
|
478
529
|
`Instance Spot '${instanceType}' materialization failed for '${String(spotId)}'.`
|
|
479
530
|
);
|
|
480
531
|
}
|
|
@@ -482,6 +533,11 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
482
533
|
|
|
483
534
|
async discardInstance(activation: ZLinkSpotActivation): Promise<void> {
|
|
484
535
|
const errors: unknown[] = [];
|
|
536
|
+
try {
|
|
537
|
+
await this.discardPreparation(activation);
|
|
538
|
+
} catch (error) {
|
|
539
|
+
errors.push(error);
|
|
540
|
+
}
|
|
485
541
|
try {
|
|
486
542
|
await activation.serial.execute(() =>
|
|
487
543
|
invokeSpotClosing(
|
|
@@ -524,6 +580,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
524
580
|
signal?: AbortSignal,
|
|
525
581
|
authority?: ZLinkNativeSpotAuthority
|
|
526
582
|
): Promise<ZLinkLocalSpotCreateResult> {
|
|
583
|
+
throwIfAborted(signal);
|
|
527
584
|
const executionMode =
|
|
528
585
|
this.options.userSpotExecutionMode?.(meshName, spotType) ??
|
|
529
586
|
ZLinkUserSpotExecutionMode.SpotWide;
|
|
@@ -533,7 +590,10 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
533
590
|
);
|
|
534
591
|
const serialExecutor = new ZLinkSpotSerialExecutor(serial, executionMode, spotId);
|
|
535
592
|
const actorHandlers = new ZLinkSpotActorHandlerRegistryRuntime();
|
|
536
|
-
const handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
593
|
+
const handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
594
|
+
actorHandlers,
|
|
595
|
+
this.options.providerResolver
|
|
596
|
+
);
|
|
537
597
|
applySpotHandlerRegistrations(handlers, spotType, {
|
|
538
598
|
actorSendHandlers: this.options.spotActorSendHandlers,
|
|
539
599
|
actorRequestHandlers: this.options.spotActorRequestHandlers,
|
|
@@ -678,12 +738,8 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
678
738
|
const cleanupErrors: unknown[] = [];
|
|
679
739
|
try {
|
|
680
740
|
if (activation !== undefined) {
|
|
681
|
-
|
|
682
|
-
activation,
|
|
683
|
-
locationClaim.meshName,
|
|
684
|
-
lifecycleStarted,
|
|
685
|
-
signal
|
|
686
|
-
);
|
|
741
|
+
if (!lifecycleStarted)
|
|
742
|
+
await this.cleanupActivation(activation, locationClaim.meshName, false);
|
|
687
743
|
} else {
|
|
688
744
|
const partialCleanup = await Promise.allSettled([
|
|
689
745
|
timers.dispose(),
|
|
@@ -853,7 +909,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
853
909
|
undefined,
|
|
854
910
|
ZLinkSpotCloseReason.ExplicitClose,
|
|
855
911
|
undefined,
|
|
856
|
-
|
|
912
|
+
!activation.serialExecutor.isPreparing
|
|
857
913
|
);
|
|
858
914
|
}
|
|
859
915
|
|
|
@@ -920,59 +976,69 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
920
976
|
signal?: AbortSignal
|
|
921
977
|
): Promise<ZLinkLocalSpotCreateResult> {
|
|
922
978
|
try {
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
await addSpotTimerRegistrations(
|
|
926
|
-
activation.timers,
|
|
927
|
-
spotType,
|
|
928
|
-
activation.spotId,
|
|
929
|
-
activation.spot,
|
|
930
|
-
activation.serial,
|
|
931
|
-
{ timerHandlers: this.options.spotTimerHandlers },
|
|
932
|
-
{
|
|
933
|
-
providerResolver: this.options.providerResolver,
|
|
934
|
-
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
935
|
-
signal
|
|
936
|
-
}
|
|
937
|
-
);
|
|
979
|
+
activation.serialExecutor.beginPreparation();
|
|
980
|
+
this.options.stageActivation?.(activation);
|
|
938
981
|
let createResponse: ZLinkSpotCreateResponse | undefined;
|
|
939
|
-
await activation.serial.
|
|
982
|
+
await activation.serial.postBarrierTurn(async () => {
|
|
983
|
+
throwIfAborted(signal);
|
|
984
|
+
await activation.spot.configure?.();
|
|
985
|
+
nativeDispatch?.configureSubscriptions(activation.handlers.snapshot());
|
|
986
|
+
await addSpotTimerRegistrations(
|
|
987
|
+
activation.timers,
|
|
988
|
+
spotType,
|
|
989
|
+
activation.spotId,
|
|
990
|
+
activation.spot,
|
|
991
|
+
activation.serial,
|
|
992
|
+
{ timerHandlers: this.options.spotTimerHandlers },
|
|
993
|
+
{
|
|
994
|
+
providerResolver: this.options.providerResolver,
|
|
995
|
+
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
996
|
+
signal
|
|
997
|
+
}
|
|
998
|
+
);
|
|
999
|
+
throwIfAborted(signal);
|
|
940
1000
|
createResponse = await activation.spot.onCreate?.(
|
|
941
1001
|
wrapFrameworkPayloadMessage(
|
|
942
1002
|
request,
|
|
943
1003
|
this.options.messageSerializers,
|
|
944
1004
|
frameworkPayloadContentType(request)
|
|
945
|
-
)
|
|
1005
|
+
),
|
|
1006
|
+
signal
|
|
946
1007
|
);
|
|
947
1008
|
if (createResponse?.accepted === false) {
|
|
948
1009
|
return;
|
|
949
1010
|
}
|
|
950
|
-
|
|
1011
|
+
throwIfAborted(signal);
|
|
1012
|
+
await activation.spot.onInitialize?.(signal);
|
|
951
1013
|
});
|
|
1014
|
+
throwIfAborted(signal);
|
|
952
1015
|
if (createResponse?.accepted === false) {
|
|
953
|
-
await this.cleanupActivation(activation, locationClaim.meshName, false
|
|
1016
|
+
await this.cleanupActivation(activation, locationClaim.meshName, false);
|
|
954
1017
|
return {
|
|
955
1018
|
spotId: activation.spotId,
|
|
956
1019
|
state: ZLinkSpotCreateState.Rejected,
|
|
957
1020
|
reply: this.decodeCreateReply(createResponse.reply)
|
|
958
1021
|
};
|
|
959
1022
|
}
|
|
960
|
-
this.options.registerActivation(activation);
|
|
1023
|
+
await this.options.registerActivation(activation);
|
|
961
1024
|
return {
|
|
962
1025
|
spotId: activation.spotId,
|
|
963
1026
|
state: ZLinkSpotCreateState.Created,
|
|
964
1027
|
reply: this.decodeCreateReply(createResponse?.reply)
|
|
965
1028
|
};
|
|
966
1029
|
} catch (error) {
|
|
1030
|
+
const failure = signal?.aborted === true ? createAbortError() : error;
|
|
1031
|
+
const cancelled = isAbortError(failure);
|
|
1032
|
+
if (cancelled) activation.serial.closeAdmission();
|
|
967
1033
|
try {
|
|
968
|
-
await this.cleanupActivation(activation, locationClaim.meshName,
|
|
1034
|
+
await this.cleanupActivation(activation, locationClaim.meshName, !cancelled);
|
|
969
1035
|
} catch (cleanupError) {
|
|
970
1036
|
throw new AggregateError(
|
|
971
|
-
[
|
|
1037
|
+
[failure, cleanupError],
|
|
972
1038
|
`Spot '${activation.spotId}' creation cleanup failed.`
|
|
973
1039
|
);
|
|
974
1040
|
}
|
|
975
|
-
throw
|
|
1041
|
+
throw failure;
|
|
976
1042
|
}
|
|
977
1043
|
}
|
|
978
1044
|
|
|
@@ -997,20 +1063,48 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
997
1063
|
};
|
|
998
1064
|
this.cleanupStates.set(activation, state);
|
|
999
1065
|
if (state.inFlight !== undefined) return await state.inFlight;
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1066
|
+
let result: unknown;
|
|
1067
|
+
const cleanup = async (ownsLifecycle: boolean) => {
|
|
1068
|
+
try {
|
|
1069
|
+
result = await this.runCleanup(
|
|
1070
|
+
activation,
|
|
1071
|
+
locationMeshName,
|
|
1072
|
+
notifyClosing,
|
|
1073
|
+
reason,
|
|
1074
|
+
state,
|
|
1075
|
+
deadline,
|
|
1076
|
+
ownsLifecycle
|
|
1077
|
+
);
|
|
1078
|
+
} finally {
|
|
1079
|
+
if (activation.serialExecutor.isPreparing) {
|
|
1080
|
+
activation.serial.closeAdmission();
|
|
1081
|
+
// The receive pump releases retained payloads when these records finish.
|
|
1082
|
+
activation.serial.visitPendingApplication((record) => {
|
|
1083
|
+
record.operation = () => undefined;
|
|
1084
|
+
});
|
|
1085
|
+
this.options.discardActivation?.(activation);
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
};
|
|
1089
|
+
state.inFlight = (
|
|
1090
|
+
!owningLifecycle && activation.serialExecutor.isPreparing
|
|
1091
|
+
? activation.serialExecutor.finishPreparation(() => cleanup(true))
|
|
1092
|
+
: cleanup(owningLifecycle)
|
|
1093
|
+
)
|
|
1094
|
+
.then(() => result)
|
|
1095
|
+
.finally(() => {
|
|
1096
|
+
state.inFlight = undefined;
|
|
1097
|
+
});
|
|
1011
1098
|
return await state.inFlight;
|
|
1012
1099
|
}
|
|
1013
1100
|
|
|
1101
|
+
async discardPreparation(activation: ZLinkSpotActivation): Promise<void> {
|
|
1102
|
+
if (!activation.serialExecutor.isPreparing) return;
|
|
1103
|
+
// Clear timer generations before opening admission, so an already due
|
|
1104
|
+
// dispatch can finish without invoking application code.
|
|
1105
|
+
await activation.serialExecutor.finishPreparation(() => activation.timers.dispose());
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1014
1108
|
private async runCleanup(
|
|
1015
1109
|
activation: ZLinkSpotActivation,
|
|
1016
1110
|
locationMeshName: string,
|
|
@@ -1049,10 +1143,12 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1049
1143
|
} catch (error) {
|
|
1050
1144
|
// An OnClosing failure is diagnostic and cleanup continues. It is
|
|
1051
1145
|
// returned so host shutdown can classify its teardown outcome.
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1146
|
+
if (reason !== ZLinkSpotCloseReason.HostShutdown) {
|
|
1147
|
+
this.options.closeErrorSink?.reportRuntimeTaskException(
|
|
1148
|
+
`spot ${String(activation.spotId)} onClosing`,
|
|
1149
|
+
error
|
|
1150
|
+
);
|
|
1151
|
+
}
|
|
1056
1152
|
closingFailure = error;
|
|
1057
1153
|
}
|
|
1058
1154
|
}
|
|
@@ -1093,7 +1189,12 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1093
1189
|
}
|
|
1094
1190
|
if (!state.nativeDisposed) {
|
|
1095
1191
|
await cleanup(
|
|
1096
|
-
() =>
|
|
1192
|
+
async () => {
|
|
1193
|
+
if (reason === ZLinkSpotCloseReason.HostShutdown) {
|
|
1194
|
+
await this.options.releaseActorMembers?.(locationMeshName, activation.spotId);
|
|
1195
|
+
}
|
|
1196
|
+
await activation.nativeSpot?.dispose();
|
|
1197
|
+
},
|
|
1097
1198
|
() => {
|
|
1098
1199
|
state.nativeDisposed = true;
|
|
1099
1200
|
}
|
|
@@ -1121,8 +1222,9 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1121
1222
|
}
|
|
1122
1223
|
);
|
|
1123
1224
|
}
|
|
1124
|
-
if (errors.length
|
|
1125
|
-
|
|
1225
|
+
if (errors.length > 0) {
|
|
1226
|
+
if (closingFailure !== undefined) errors.unshift(closingFailure);
|
|
1227
|
+
if (errors.length === 1) throw errors[0];
|
|
1126
1228
|
throw new AggregateError(errors, `Spot '${activation.spotId}' cleanup failed.`);
|
|
1127
1229
|
}
|
|
1128
1230
|
return closingFailure;
|