@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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createZLinkRequest } from '../messaging/request-result';
|
|
1
2
|
import {
|
|
2
3
|
type RoutingId,
|
|
3
4
|
type ZLinkChannelClient,
|
|
@@ -174,6 +175,7 @@ export class DefaultZLinkSpotOutbound implements ZLinkSpotOutbound {
|
|
|
174
175
|
}
|
|
175
176
|
|
|
176
177
|
export interface ZLinkSpotAddressCallOptions {
|
|
178
|
+
readonly onAdmitted?: () => void;
|
|
177
179
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
178
180
|
readonly instanceSpot: boolean;
|
|
179
181
|
readonly instanceSpotType?: string;
|
|
@@ -232,6 +234,7 @@ export interface ZLinkSpotRoutedSendOptions {
|
|
|
232
234
|
}
|
|
233
235
|
|
|
234
236
|
export interface ZLinkSpotRoutedRequestOptions extends ZLinkSpotRoutedSendOptions {
|
|
237
|
+
readonly onAdmitted?: () => void;
|
|
235
238
|
readonly timeoutMs?: number;
|
|
236
239
|
readonly signal?: AbortSignal;
|
|
237
240
|
}
|
|
@@ -308,14 +311,13 @@ function createAddressedSpotRequestCall(
|
|
|
308
311
|
sourceSpotProvider?: () => ZLinkBackendSpot | undefined
|
|
309
312
|
): ZLinkSpotRequestCall {
|
|
310
313
|
const options = newAddressCallOptions();
|
|
311
|
-
const begin = <TReply>(
|
|
312
|
-
markSubmitted(options);
|
|
313
|
-
rejectSameSpotAsyncRequest(serial, spotId, waitPolicy);
|
|
314
|
+
const begin = <TReply>(signal?: AbortSignal, onAdmitted?: () => void) => {
|
|
314
315
|
return startRequestOnSerial<TReply>(serial, () => ({
|
|
315
316
|
pending: transport.requestToSpotAddress<TReply>(spotId, request, {
|
|
316
317
|
...freezeAddressCallOptions(options, sourceSpotProvider?.()),
|
|
317
318
|
timeoutMs: options.timeoutMs,
|
|
318
|
-
signal
|
|
319
|
+
signal,
|
|
320
|
+
onAdmitted
|
|
319
321
|
})
|
|
320
322
|
}));
|
|
321
323
|
};
|
|
@@ -356,13 +358,19 @@ function createAddressedSpotRequestCall(
|
|
|
356
358
|
return this;
|
|
357
359
|
},
|
|
358
360
|
submit<TReply>(signal?: AbortSignal) {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
+
markSubmitted(options);
|
|
362
|
+
rejectSameSpotAsyncRequest(serial, spotId, 'async');
|
|
363
|
+
return createZLinkRequest(
|
|
364
|
+
(onAdmitted) => begin<TReply>(signal, onAdmitted),
|
|
365
|
+
(pending) => (serial.isCurrentTurn ? pending : deliverOnSerial(serial, pending))
|
|
366
|
+
);
|
|
361
367
|
},
|
|
362
368
|
yield<TReply>(signal?: AbortSignal) {
|
|
363
369
|
const turn = requireZLinkYieldTurn();
|
|
364
|
-
|
|
365
|
-
|
|
370
|
+
markSubmitted(options);
|
|
371
|
+
rejectSameSpotAsyncRequest(serial, spotId, 'yield');
|
|
372
|
+
const pending = begin<TReply>(signal);
|
|
373
|
+
return turn.yieldFrameworkPromise(pending);
|
|
366
374
|
}
|
|
367
375
|
};
|
|
368
376
|
}
|
|
@@ -475,8 +483,12 @@ function wrapRequestCall(
|
|
|
475
483
|
serial: ZLinkSpotSerialTurnExecutor,
|
|
476
484
|
inner: ZLinkChannelRequestCall
|
|
477
485
|
): ZLinkChannelRequestCall {
|
|
478
|
-
const begin = <TReply>(signal?: AbortSignal) =>
|
|
479
|
-
startRequestOnSerial(serial, () =>
|
|
486
|
+
const begin = <TReply>(signal?: AbortSignal, onAdmitted?: () => void) =>
|
|
487
|
+
startRequestOnSerial(serial, () => {
|
|
488
|
+
const pending = inner.submit<TReply>(signal);
|
|
489
|
+
if (onAdmitted !== undefined) void pending.admitted.then(onAdmitted, () => undefined);
|
|
490
|
+
return { pending };
|
|
491
|
+
});
|
|
480
492
|
return {
|
|
481
493
|
metadata(key: string | ZLinkMessageMetadata, value?: string) {
|
|
482
494
|
if (typeof key === 'string') inner.metadata(key, value!);
|
|
@@ -488,13 +500,15 @@ function wrapRequestCall(
|
|
|
488
500
|
return this;
|
|
489
501
|
},
|
|
490
502
|
submit<TReply>(signal?: AbortSignal) {
|
|
491
|
-
|
|
492
|
-
|
|
503
|
+
return createZLinkRequest(
|
|
504
|
+
(onAdmitted) => begin<TReply>(signal, onAdmitted),
|
|
505
|
+
(pending) => (serial.isCurrentTurn ? pending : deliverOnSerial(serial, pending))
|
|
506
|
+
);
|
|
493
507
|
},
|
|
494
508
|
yield<TReply>(signal?: AbortSignal) {
|
|
495
509
|
const turn = requireZLinkYieldTurn();
|
|
496
510
|
const pending = begin<TReply>(signal);
|
|
497
|
-
return turn.
|
|
511
|
+
return turn.yieldFrameworkPromise(pending);
|
|
498
512
|
}
|
|
499
513
|
};
|
|
500
514
|
}
|
|
@@ -571,15 +585,15 @@ function wrapRoutedSpotRequestCall(
|
|
|
571
585
|
): ZLinkRequestCall & Pick<ZLinkChannelRequestCall, 'yield'> {
|
|
572
586
|
let selectedTimeoutMs: number | undefined;
|
|
573
587
|
const metadata = new Map<string, string>();
|
|
574
|
-
const begin = <TReply>(
|
|
588
|
+
const begin = <TReply>(signal?: AbortSignal, onAdmitted?: () => void) => {
|
|
575
589
|
// A request to the current Spot would wait behind the handler that owns
|
|
576
590
|
// the same Spot claim. Reject it before resolving a route or submitting
|
|
577
591
|
// transport work; one-way self-send remains a valid FIFO admission.
|
|
578
|
-
rejectSameSpotAsyncRequest(serial, spot.spotId, waitPolicy);
|
|
579
592
|
return startRequestOnSerial<TReply>(serial, () => ({
|
|
580
593
|
pending: requestToSpotHandle<TReply>(transport, spot, request, {
|
|
581
594
|
timeoutMs: selectedTimeoutMs,
|
|
582
595
|
signal,
|
|
596
|
+
onAdmitted,
|
|
583
597
|
metadata,
|
|
584
598
|
spotRouterChannelIdForMesh,
|
|
585
599
|
sourceSpot: sourceSpotProvider?.()
|
|
@@ -602,13 +616,17 @@ function wrapRoutedSpotRequestCall(
|
|
|
602
616
|
return this;
|
|
603
617
|
},
|
|
604
618
|
submit<TReply>(signal?: AbortSignal) {
|
|
605
|
-
|
|
606
|
-
return
|
|
619
|
+
rejectSameSpotAsyncRequest(serial, spot.spotId, 'async');
|
|
620
|
+
return createZLinkRequest(
|
|
621
|
+
(onAdmitted) => begin<TReply>(signal, onAdmitted),
|
|
622
|
+
(pending) => (serial.isCurrentTurn ? pending : deliverOnSerial(serial, pending))
|
|
623
|
+
);
|
|
607
624
|
},
|
|
608
625
|
yield<TReply>(signal?: AbortSignal) {
|
|
609
626
|
const turn = requireZLinkYieldTurn();
|
|
610
|
-
|
|
611
|
-
|
|
627
|
+
rejectSameSpotAsyncRequest(serial, spot.spotId, 'yield');
|
|
628
|
+
const pending = begin<TReply>(signal);
|
|
629
|
+
return turn.yieldFrameworkPromise(pending);
|
|
612
630
|
}
|
|
613
631
|
};
|
|
614
632
|
}
|
|
@@ -628,6 +646,7 @@ function rejectSameSpotAsyncRequest(
|
|
|
628
646
|
}
|
|
629
647
|
|
|
630
648
|
export interface ZLinkSpotHandleCallOptions {
|
|
649
|
+
readonly onAdmitted?: () => void;
|
|
631
650
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
632
651
|
readonly timeoutMs?: number;
|
|
633
652
|
readonly signal?: AbortSignal;
|
|
@@ -672,6 +691,7 @@ export async function requestToSpotHandle<TReply = unknown>(
|
|
|
672
691
|
packetName,
|
|
673
692
|
timeoutMs: options.timeoutMs,
|
|
674
693
|
signal: options.signal,
|
|
694
|
+
onAdmitted: options.onAdmitted,
|
|
675
695
|
metadata: options.metadata
|
|
676
696
|
};
|
|
677
697
|
if (options.sourceSpot !== undefined && transport.requestFromSpotToSpot !== undefined) {
|
|
@@ -8,7 +8,7 @@ import type { Message } from '../../contracts/Common/Message';
|
|
|
8
8
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
9
9
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
10
10
|
import { decodeChannelEnvelope } from '../channels/channel-envelope';
|
|
11
|
-
import { decodeRoutingId as decodeWireRoutingId } from '../routing-id';
|
|
11
|
+
import { decodeRoutingId as decodeWireRoutingId, routingIdsEqual } from '../routing-id';
|
|
12
12
|
import {
|
|
13
13
|
REMOTE_ACTOR_JOIN_PACKET,
|
|
14
14
|
type ZLinkRemoteActorJoinWirePayload
|
|
@@ -176,7 +176,14 @@ export function decodeHandoffBacklog(value: unknown): readonly ZLinkActorHandoff
|
|
|
176
176
|
BigInt(source.ownerLeaseGeneration) <= 0n ||
|
|
177
177
|
source.nodeRid.length === 0 ||
|
|
178
178
|
BigInt(source.nodeGeneration) <= 0n ||
|
|
179
|
-
source.replyRouteId !==
|
|
179
|
+
source.replyRouteId !==
|
|
180
|
+
(packet.messageFollowOrigin !== undefined &&
|
|
181
|
+
routingIdsEqual(
|
|
182
|
+
decodeWireRoutingId(source.nodeRid, source.nodeRidHex),
|
|
183
|
+
packet.messageFollowOrigin.sourceNodeRid
|
|
184
|
+
)
|
|
185
|
+
? packet.messageFollowOrigin.originalReplyRouteId.toString()
|
|
186
|
+
: messageFollowContext.replyRouteId))) ||
|
|
180
187
|
(!packet.returnResponse && source !== undefined)
|
|
181
188
|
) {
|
|
182
189
|
throw new Error('Remote actor handoff request source fence is invalid.');
|
|
@@ -50,6 +50,7 @@ interface ZLinkRoutedSpotPacketDispatchOptions {
|
|
|
50
50
|
|
|
51
51
|
interface ZLinkRoutedSpotPacketContext {
|
|
52
52
|
readonly channelName: string;
|
|
53
|
+
readonly onAdmitted?: () => void;
|
|
53
54
|
readonly contentType?: string;
|
|
54
55
|
readonly workOptions?: ZLinkSerialWorkOptions;
|
|
55
56
|
readonly admissionTimeoutMs?: number;
|
|
@@ -265,7 +266,7 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
265
266
|
}
|
|
266
267
|
await activation.serial.execute(
|
|
267
268
|
runHandler,
|
|
268
|
-
context.workOptions,
|
|
269
|
+
{ ...context.workOptions, onAdmitted: context.onAdmitted },
|
|
269
270
|
instanceIntent ? runHandler : undefined
|
|
270
271
|
);
|
|
271
272
|
}
|
|
@@ -22,6 +22,7 @@ import type {
|
|
|
22
22
|
import type { ZLinkBackendSpotNode } from '../backend/contracts';
|
|
23
23
|
|
|
24
24
|
export interface ZLinkEntryActorRuntime {
|
|
25
|
+
releaseMembers?(meshName: string): Promise<void>;
|
|
25
26
|
resolveActor(actorId: string): ZLinkActor | undefined;
|
|
26
27
|
commitActorTransaction(actor: ZLinkActor, onJoined: () => Promise<void>): Promise<void>;
|
|
27
28
|
destroyActor(
|
|
@@ -91,7 +92,6 @@ export interface ZLinkSpotActorTransferRuntime {
|
|
|
91
92
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
|
|
92
93
|
clearRoutedActor(actor: ZLinkActor): void;
|
|
93
94
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
94
|
-
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
95
95
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
import { ZLinkUserSpotExecutionMode } from '../../contracts';
|
|
2
2
|
import { ZLinkActorSerialExecutor } from '../actors';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
ZLinkActorHandoffDispatch,
|
|
5
|
+
ZLinkActorHandoffPrefixAdmission,
|
|
6
|
+
ZLinkActorHandoffPrefixRecord
|
|
7
|
+
} from '../actors/actor-handoff';
|
|
8
|
+
import type { ZLinkExecutionBarrier, ZLinkExecutionBarrierSeal } from '../execution';
|
|
4
9
|
import type {
|
|
5
10
|
ZLinkSerialSchedulerOptions,
|
|
6
|
-
ZLinkSerialWorkPreparation,
|
|
7
11
|
ZLinkSerialWorkOptions
|
|
8
12
|
} from '../execution/serial-execution-queue';
|
|
9
13
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
10
14
|
|
|
15
|
+
export type ZLinkSpotPreparationCompletion = 'publication' | 'first-terminal';
|
|
16
|
+
|
|
17
|
+
export type ZLinkActorPacketTurnDispatch = (
|
|
18
|
+
serial: ZLinkSpotSerialTurnExecutor,
|
|
19
|
+
...args: Parameters<ZLinkActorHandoffDispatch>
|
|
20
|
+
) => ReturnType<ZLinkActorHandoffDispatch>;
|
|
21
|
+
|
|
11
22
|
/**
|
|
12
23
|
* Owns every application serial unit that belongs to one Spot activation.
|
|
13
24
|
*
|
|
@@ -21,6 +32,11 @@ export class ZLinkSpotSerialExecutor {
|
|
|
21
32
|
private executionBarrier: ZLinkExecutionBarrier | undefined;
|
|
22
33
|
private closing = false;
|
|
23
34
|
private closePromise: Promise<void> | undefined;
|
|
35
|
+
private preparation?: {
|
|
36
|
+
readonly seal: ZLinkExecutionBarrierSeal;
|
|
37
|
+
readonly complete: (terminal?: () => Promise<void>) => void;
|
|
38
|
+
readonly execution: Promise<void>;
|
|
39
|
+
};
|
|
24
40
|
|
|
25
41
|
constructor(
|
|
26
42
|
private readonly spotSerial: ZLinkSpotSerialTurnExecutor,
|
|
@@ -39,6 +55,54 @@ export class ZLinkSpotSerialExecutor {
|
|
|
39
55
|
for (const serial of this.timerSerials.values()) serial.setExecutionBarrier(barrier);
|
|
40
56
|
}
|
|
41
57
|
|
|
58
|
+
get isPreparing(): boolean {
|
|
59
|
+
return this.preparation !== undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
beginPreparation(kind: 'activation' | 'relocation' = 'activation'): void {
|
|
63
|
+
if (this.preparation !== undefined || this.executionBarrier === undefined)
|
|
64
|
+
throw new Error('Activation preparation requires one unowned execution barrier.');
|
|
65
|
+
const barrier = this.executionBarrier;
|
|
66
|
+
const seal = barrier.seal(kind);
|
|
67
|
+
let complete!: (terminal?: () => Promise<void>) => void;
|
|
68
|
+
const terminal = new Promise<(() => Promise<void>) | undefined>((resolve) => {
|
|
69
|
+
complete = resolve;
|
|
70
|
+
});
|
|
71
|
+
// The staging seal itself owns target preparation. No normal preparation
|
|
72
|
+
// item is admitted in addition to this lifecycle owner.
|
|
73
|
+
const execution = this.spotSerial.executeControlLifecycleOperation(
|
|
74
|
+
async () => {
|
|
75
|
+
const finish = await terminal;
|
|
76
|
+
await finish?.();
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
canExecuteApplication: (record) => record.context === undefined || !barrier.isCurrent(seal)
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
this.preparation = { seal, complete, execution };
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
openPreparationAdmission(): void {
|
|
86
|
+
if (this.preparation !== undefined) this.executionBarrier!.abort(this.preparation.seal);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async finishPreparation(terminal?: () => Promise<void>): Promise<void> {
|
|
90
|
+
const preparation = this.preparation;
|
|
91
|
+
if (preparation === undefined) {
|
|
92
|
+
await terminal?.();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
preparation.complete(terminal);
|
|
96
|
+
try {
|
|
97
|
+
await preparation.execution;
|
|
98
|
+
} finally {
|
|
99
|
+
if (this.preparation === preparation) {
|
|
100
|
+
this.executionBarrier!.abort(preparation.seal);
|
|
101
|
+
this.preparation = undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
42
106
|
executeSpot<T>(
|
|
43
107
|
operation: () => Promise<T> | T,
|
|
44
108
|
workOptions?: ZLinkSerialWorkOptions
|
|
@@ -55,35 +119,43 @@ export class ZLinkSpotSerialExecutor {
|
|
|
55
119
|
return this.actorExecutor(actorId).execute(() => operation(serial), workOptions);
|
|
56
120
|
}
|
|
57
121
|
|
|
58
|
-
|
|
59
|
-
|
|
122
|
+
executeTimer<T>(
|
|
123
|
+
timerName: string,
|
|
124
|
+
operation: () => Promise<T> | T,
|
|
125
|
+
workOptions?: ZLinkSerialWorkOptions
|
|
126
|
+
): Promise<T> {
|
|
127
|
+
return this.timerSerial(timerName).post(operation, workOptions);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Admits held packets through the same Actor FIFO as ordinary ingress. */
|
|
131
|
+
admitActorPacketPrefix(
|
|
60
132
|
actorId: string,
|
|
61
|
-
records: readonly
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
child: (serial: ZLinkSpotSerialTurnExecutor) => Promise<TChild> | TChild
|
|
65
|
-
) => Promise<TChild>
|
|
66
|
-
) => Promise<void>;
|
|
67
|
-
readonly preparation?: ZLinkSerialWorkPreparation;
|
|
68
|
-
readonly workOptions?: ZLinkSerialWorkOptions;
|
|
69
|
-
}[]
|
|
70
|
-
): readonly Promise<void>[] {
|
|
133
|
+
records: readonly ZLinkActorHandoffPrefixRecord[],
|
|
134
|
+
dispatch: ZLinkActorPacketTurnDispatch
|
|
135
|
+
): ZLinkActorHandoffPrefixAdmission {
|
|
71
136
|
const serial = this.actorSerial(actorId);
|
|
72
|
-
|
|
137
|
+
const terminals = this.actorExecutor(actorId).admitDurablePrefix(
|
|
73
138
|
records.map((record) => ({
|
|
74
|
-
operation: (executeChild) =>
|
|
139
|
+
operation: (executeChild) =>
|
|
140
|
+
record.drain((parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) =>
|
|
141
|
+
executeChild(() =>
|
|
142
|
+
dispatch(serial, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef)
|
|
143
|
+
)
|
|
144
|
+
),
|
|
75
145
|
preparation: record.preparation,
|
|
76
|
-
workOptions: record.
|
|
146
|
+
workOptions: { payloadBytes: record.payloadBytes, onWithdrawable: record.onWithdrawable }
|
|
77
147
|
}))
|
|
78
148
|
);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
149
|
+
const terminal = Promise.allSettled(terminals).then((outcomes) => {
|
|
150
|
+
const errors = outcomes.flatMap((outcome) =>
|
|
151
|
+
outcome.status === 'rejected' ? [outcome.reason] : []
|
|
152
|
+
);
|
|
153
|
+
if (errors.length === 1) throw errors[0];
|
|
154
|
+
if (errors.length > 1) {
|
|
155
|
+
throw new AggregateError(errors, `Actor '${actorId}' durable prefix replay failed.`);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
return { terminal };
|
|
87
159
|
}
|
|
88
160
|
|
|
89
161
|
isTimerExecuting(timerName: string): boolean {
|
|
@@ -153,7 +153,7 @@ export class ZLinkSpotSerialTurnExecutor {
|
|
|
153
153
|
* this so they never run inline inside another callback's turn.
|
|
154
154
|
*/
|
|
155
155
|
post<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T> {
|
|
156
|
-
return this.enqueueApplicationTurn(operation, workOptions);
|
|
156
|
+
return this.enqueueApplicationTurn(operation, workOptions, undefined, true);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
/**
|
|
@@ -260,12 +260,25 @@ export class ZLinkSpotSerialTurnExecutor {
|
|
|
260
260
|
private async enqueueApplicationTurn<T>(
|
|
261
261
|
operation: () => Promise<T> | T,
|
|
262
262
|
workOptions: ZLinkSerialWorkOptions = {},
|
|
263
|
-
replay?: (failure?: unknown) => Promise<T
|
|
263
|
+
replay?: (failure?: unknown) => Promise<T>,
|
|
264
|
+
retainWhilePreparing = false
|
|
264
265
|
): Promise<T> {
|
|
265
266
|
this.lastActivityAtMs = performance.now();
|
|
266
267
|
let barrierClaim: ZLinkExecutionBarrierClaim | undefined;
|
|
267
268
|
try {
|
|
268
269
|
const entry = this.executionBarrier?.enter();
|
|
270
|
+
if (
|
|
271
|
+
entry instanceof Promise &&
|
|
272
|
+
retainWhilePreparing &&
|
|
273
|
+
this.scheduler.retainsApplicationForLifecycle
|
|
274
|
+
) {
|
|
275
|
+
try {
|
|
276
|
+
return await this.submitQueuedTurn(operation, workOptions, entry);
|
|
277
|
+
} catch (error) {
|
|
278
|
+
(await entry).release();
|
|
279
|
+
throw error;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
269
282
|
barrierClaim = entry instanceof Promise ? await entry : entry;
|
|
270
283
|
const refusal = this.applicationAdmissionRefusal(replay !== undefined);
|
|
271
284
|
if (refusal !== undefined) throw refusal;
|
|
@@ -300,7 +313,7 @@ export class ZLinkSpotSerialTurnExecutor {
|
|
|
300
313
|
private submitQueuedTurn<T>(
|
|
301
314
|
operation: () => Promise<T> | T,
|
|
302
315
|
workOptions: ZLinkSerialWorkOptions,
|
|
303
|
-
barrierClaim?: ZLinkExecutionBarrierClaim
|
|
316
|
+
barrierClaim?: ZLinkExecutionBarrierClaim | Promise<ZLinkExecutionBarrierClaim>
|
|
304
317
|
): Promise<T> {
|
|
305
318
|
const options = {
|
|
306
319
|
...workOptions,
|
|
@@ -313,6 +326,12 @@ export class ZLinkSpotSerialTurnExecutor {
|
|
|
313
326
|
}
|
|
314
327
|
|
|
315
328
|
private runQueuedRecord(record: ZLinkSerialWorkRecord<unknown>): Promise<void> {
|
|
329
|
+
if (record.context instanceof Promise) {
|
|
330
|
+
return record.context.then((claim: ZLinkExecutionBarrierClaim) => {
|
|
331
|
+
Object.assign(record, { context: claim });
|
|
332
|
+
return this.runQueuedRecord(record);
|
|
333
|
+
});
|
|
334
|
+
}
|
|
316
335
|
const context = record.context as ZLinkSpotApplicationTurnContext | undefined;
|
|
317
336
|
if (context?.replay !== undefined && record.operation === context.replay) {
|
|
318
337
|
context.release();
|
|
@@ -68,9 +68,6 @@ export class ZLinkSpotSubscriptionDispatch {
|
|
|
68
68
|
}
|
|
69
69
|
const key = subscriptionKey(registration.channelName, registration.topic);
|
|
70
70
|
const existing = this.handlers.get(key) ?? [];
|
|
71
|
-
if (existing.some((entry) => entry.handlerType === registration.handlerType)) {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
71
|
existing.push(registration);
|
|
75
72
|
this.handlers.set(key, existing);
|
|
76
73
|
this.options.nativeSpot.setSubscription(registration.channelName, registration.topic);
|
|
@@ -191,7 +188,7 @@ export class ZLinkSpotSubscriptionDispatch {
|
|
|
191
188
|
undefined
|
|
192
189
|
);
|
|
193
190
|
try {
|
|
194
|
-
await this.options.serial.
|
|
191
|
+
await this.options.serial.post(
|
|
195
192
|
() =>
|
|
196
193
|
runWithFlow(inboundFlow, async () => {
|
|
197
194
|
// Payload deserialization belongs to the Spot serial turn. Queue
|