@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 type { ZLinkMeshDispatchAdmission } from '../admission';
|
|
1
2
|
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
2
3
|
import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkChannelClient, type ZLinkFanoutClient, type ZLinkMeshNodeDescriptor, type ZLinkMessage, type ZLinkMessageSerializer, type ZLinkSpotPublisherClient, ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
3
4
|
import type { Message } from '../../contracts/Common/Message';
|
|
@@ -9,7 +10,7 @@ import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
|
9
10
|
import type { ZLinkBackendAdapterFactory, ZLinkBackendContext, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
10
11
|
import { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
11
12
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
12
|
-
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
13
|
+
import { type ZLinkFrameworkRegistration, type ZLinkSpotNodeOptions } from '../configuration';
|
|
13
14
|
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
14
15
|
import type { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
15
16
|
import { type ZLinkMessageFollowOrigin, type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
@@ -75,6 +76,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
75
76
|
constructor(options: ZLinkSpotNodeRuntimeManagerOptions);
|
|
76
77
|
createTopicMessage(): import("../backend/runtime-values").ZLinkBackendTopicMessage;
|
|
77
78
|
configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
|
|
79
|
+
requestPeerReconcile(meshName: string, peerRid: string): Promise<void>;
|
|
78
80
|
startLocationAutoConnect(signal?: AbortSignal): Promise<void>;
|
|
79
81
|
/**
|
|
80
82
|
* Fences transport connections that were created under an owner token which
|
|
@@ -85,6 +87,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
85
87
|
start(): Promise<void>;
|
|
86
88
|
publishMeshNodeState(state: ZLinkFrameworkRuntimeState, signal?: AbortSignal, selectedMeshName?: string): Promise<void>;
|
|
87
89
|
private publishMeshNodeStateCore;
|
|
90
|
+
private localDescriptorFields;
|
|
88
91
|
reconcileAndPublishMeshNodeState(state: ZLinkFrameworkRuntimeState, meshName: string, signal?: AbortSignal): Promise<void>;
|
|
89
92
|
private entrySpotId;
|
|
90
93
|
get meshNodesByName(): ReadonlyMap<string, ZLinkBackendMeshNode>;
|
|
@@ -112,13 +115,21 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
112
115
|
serverChannels(meshName: string): [string, import("../configuration").ZLinkMeshChannelOptions][];
|
|
113
116
|
dispose(signal?: AbortSignal, deadline?: Date): Promise<void>;
|
|
114
117
|
private disposeCore;
|
|
118
|
+
/**
|
|
119
|
+
* Node and Channel records go straight to the framework dispatcher in the
|
|
120
|
+
* pump's turn. Only Spot and Actor records addressed to the Entry Spot wait
|
|
121
|
+
* for its activation first.
|
|
122
|
+
*/
|
|
115
123
|
private dispatchMeshRecord;
|
|
116
|
-
|
|
124
|
+
private targetsEntrySpot;
|
|
125
|
+
private dispatchFrameworkRecord;
|
|
126
|
+
dispatchEntrySpotRecord(meshName: string, owner: ReadyRecord, record: ReceiveRecord, admit?: ZLinkMeshDispatchAdmission): Promise<boolean>;
|
|
117
127
|
private ensureEntryActivation;
|
|
118
128
|
private initializeEntrySpot;
|
|
119
129
|
private primaryEntryActivation;
|
|
120
130
|
dispatchEntryActorPacket(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
|
|
121
131
|
dispatchEntryActorJoin(meshName: string, actor: ZLinkActor, handoffBacklog?: readonly ZLinkActorHandoffPacket[]): Promise<void>;
|
|
132
|
+
admitEntryActorPacketPrefix(meshName: string, actorId: string, records: readonly import('../actors/actor-handoff').ZLinkActorHandoffPrefixRecord[]): import('../actors/actor-handoff').ZLinkActorHandoffPrefixAdmission;
|
|
122
133
|
executeEntryActor<T>(meshName: string, actorId: string, operation: () => Promise<T>): Promise<T>;
|
|
123
134
|
publish(meshName: string, channelName: string, topic: string, packetName: string | undefined, event: Message, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
124
135
|
private executePublish;
|
|
@@ -126,3 +137,9 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
126
137
|
private publishWithFlags;
|
|
127
138
|
}
|
|
128
139
|
export declare function createFrameworkEntrySpotId(prefix: string): string;
|
|
140
|
+
/**
|
|
141
|
+
* The one decision for creating a new Actor on this node (Actor model §6.3): the node registered
|
|
142
|
+
* an Entry Spot type that accepts the Actor type and an Actor factory for it. Publication and the
|
|
143
|
+
* target refusal both read it.
|
|
144
|
+
*/
|
|
145
|
+
export declare function registrationAcceptsNewActor(registration: ZLinkSpotNodeOptions, stableType: string): boolean;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotNodeRuntimeManager = void 0;
|
|
4
4
|
exports.createFrameworkEntrySpotId = createFrameworkEntrySpotId;
|
|
5
|
+
exports.registrationAcceptsNewActor = registrationAcceptsNewActor;
|
|
5
6
|
const disposal_1 = require("../disposal");
|
|
6
7
|
const node_crypto_1 = require("node:crypto");
|
|
7
8
|
const contracts_1 = require("../../contracts");
|
|
@@ -68,6 +69,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
68
69
|
configureLocationAutoConnect(runtime, stores, options, events) {
|
|
69
70
|
this.locationAutoConnect = (0, spot_node_autoconnect_1.createSpotNodeLocationAutoConnectContext)(runtime, stores, options, events);
|
|
70
71
|
}
|
|
72
|
+
async requestPeerReconcile(meshName, peerRid) {
|
|
73
|
+
await Promise.all(this.autoConnectLoops.map((loop) => loop.requestPeerReconcile(meshName, peerRid)));
|
|
74
|
+
}
|
|
71
75
|
async startLocationAutoConnect(signal) {
|
|
72
76
|
const location = this.locationAutoConnect;
|
|
73
77
|
if (location === undefined || this.autoConnectLoops.length > 0) {
|
|
@@ -82,6 +86,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
82
86
|
const capability = (0, spot_node_autoconnect_1.spotNodeAutoConnectCapability)(spotNodeName, spotNode, node);
|
|
83
87
|
if (capability === undefined)
|
|
84
88
|
continue;
|
|
89
|
+
node.setRequestSourceAcceptance?.((nodeRid, nodeGeneration, nodeRidStorageHex, sourceSignal) => location.requestSources.accept(capability.local.meshName, nodeRid, nodeGeneration, nodeRidStorageHex, sourceSignal));
|
|
85
90
|
const reconciler = new locations_1.ZLinkAutoConnectReconciler({
|
|
86
91
|
local: capability.local,
|
|
87
92
|
localRow: capability.localRow,
|
|
@@ -152,6 +157,22 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
152
157
|
if (this.options.dispatchErrors !== undefined) {
|
|
153
158
|
node.setDispatchErrorReporter?.(this.options.dispatchErrors, spotNodeName);
|
|
154
159
|
}
|
|
160
|
+
// Session-Actor binding §4: the Session owner identity comes from the
|
|
161
|
+
// host's own descriptor or from a peer descriptor that passed the
|
|
162
|
+
// Location runtime §4.1 owner lease check.
|
|
163
|
+
node.setSessionOwnerDescriptors?.({
|
|
164
|
+
local: () => this.locationAutoConnect?.runtime.currentOwnerToken,
|
|
165
|
+
peer: async (peerRid, peerGeneration) => {
|
|
166
|
+
const location = this.locationAutoConnect;
|
|
167
|
+
if (location === undefined)
|
|
168
|
+
return undefined;
|
|
169
|
+
const descriptor = (await location.runtime.listLiveMeshNodes(spotNodeName)).find((candidate) => (0, routing_id_1.routingIdsEqual)(candidate.rid, peerRid) &&
|
|
170
|
+
candidate.lifecycleGeneration === peerGeneration);
|
|
171
|
+
return descriptor === undefined
|
|
172
|
+
? undefined
|
|
173
|
+
: { ownerId: descriptor.ownerId, leaseGeneration: descriptor.leaseGeneration };
|
|
174
|
+
}
|
|
175
|
+
});
|
|
155
176
|
node.setMailboxRecordDroppedHandler?.((record) => this.options.dispatchErrors?.report({
|
|
156
177
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
|
|
157
178
|
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
@@ -257,7 +278,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
257
278
|
this.meshNodes.delete(spotNodeName);
|
|
258
279
|
completions.dispose(error);
|
|
259
280
|
await pump?.dispose();
|
|
260
|
-
node.close();
|
|
281
|
+
await node.close();
|
|
261
282
|
throw error;
|
|
262
283
|
}
|
|
263
284
|
}
|
|
@@ -283,9 +304,8 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
283
304
|
return;
|
|
284
305
|
const ownerChanged = this.publishedOwnerToken !== undefined && !sameOwnerToken(this.publishedOwnerToken, owner);
|
|
285
306
|
if (ownerChanged) {
|
|
286
|
-
// A
|
|
287
|
-
//
|
|
288
|
-
// Renew against a row that no longer exists.
|
|
307
|
+
// A descriptor confirmed under the previous lease must not supply
|
|
308
|
+
// cached population data for a new owner token.
|
|
289
309
|
this.publishedMeshNodeDescriptors.clear();
|
|
290
310
|
}
|
|
291
311
|
for (const [meshName, registration] of this.options.registration.spotNodes) {
|
|
@@ -301,7 +321,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
301
321
|
const capabilities = [
|
|
302
322
|
...userSpots.map(([stableType, factory]) => objectCapability('user_spot', stableType, factory)),
|
|
303
323
|
...instanceSpots.map(([stableType, factory]) => objectCapability('instance_spot', stableType, factory)),
|
|
304
|
-
...actors.map(([stableType, factory]) => objectCapability('actor', stableType, factory))
|
|
324
|
+
...actors.map(([stableType, factory]) => objectCapability('actor', stableType, factory, registrationAcceptsNewActor(registration, stableType)))
|
|
305
325
|
].sort((left, right) => {
|
|
306
326
|
const kindOrder = left.objectKind.localeCompare(right.objectKind);
|
|
307
327
|
return kindOrder !== 0 ? kindOrder : left.stableType.localeCompare(right.stableType);
|
|
@@ -316,9 +336,8 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
316
336
|
// The raw MeshNode resolves port zero and applies AdvertiseHost once.
|
|
317
337
|
// Discovery and RouteMesh hello must publish that same public identity.
|
|
318
338
|
endpoint: status.localEndpoint,
|
|
319
|
-
|
|
339
|
+
...this.localDescriptorFields(meshName, registration, state),
|
|
320
340
|
entrySpotId: this.entrySpotId(meshName, registration),
|
|
321
|
-
placementWeight: this.placementWeight(meshName),
|
|
322
341
|
populationCapacity: {
|
|
323
342
|
actors: {
|
|
324
343
|
active: current?.populationCapacity.actors.active ?? 0,
|
|
@@ -348,13 +367,6 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
348
367
|
active: 0,
|
|
349
368
|
limit: registration.activationConcurrencyLimit ?? InternalDefaults_1.DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
|
|
350
369
|
},
|
|
351
|
-
channelWeights: Object.fromEntries(this.serverChannels(meshName).map(([channelName, channel]) => [
|
|
352
|
-
channelName,
|
|
353
|
-
state === contracts_1.ZLinkFrameworkRuntimeState.Draining
|
|
354
|
-
? 0
|
|
355
|
-
: this.effectiveChannelWeight(meshName, channelName, channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT)
|
|
356
|
-
])),
|
|
357
|
-
applicationVersion: this.options.registration.applicationVersion,
|
|
358
370
|
maintenanceWave: this.options.registration.maintenanceWave,
|
|
359
371
|
spotTypes: [
|
|
360
372
|
...userSpots.map(([stableType]) => stableType),
|
|
@@ -365,11 +377,12 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
365
377
|
state,
|
|
366
378
|
securityIdentity: 'default'
|
|
367
379
|
};
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
380
|
+
// Revision is issued before submission: an unconfirmed Store write may
|
|
381
|
+
// already have applied, so the next publication must not reuse it.
|
|
382
|
+
this.descriptorRevisionByMesh.set(meshName, descriptor.descriptorRevision);
|
|
383
|
+
const result = await location.runtime.writeMeshNode(descriptor, previousRevision === 0n
|
|
384
|
+
? Locations_1.ZLinkLocationWriteIntent.NewClaim
|
|
385
|
+
: Locations_1.ZLinkLocationWriteIntent.Renew, signal);
|
|
373
386
|
if (result.status !== Locations_1.ZLinkLocationWriteStatus.Stored) {
|
|
374
387
|
throw new configuration_1.ZLinkConfigurationException(`MeshNode '${meshName}' descriptor publication failed: ${result.status}.`);
|
|
375
388
|
}
|
|
@@ -379,10 +392,22 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
379
392
|
leaseGeneration: location.runtime.currentOwnerToken.leaseGeneration,
|
|
380
393
|
updatedAt: result.updatedAt
|
|
381
394
|
});
|
|
382
|
-
this.descriptorRevisionByMesh.set(meshName, descriptor.descriptorRevision);
|
|
383
395
|
}
|
|
384
396
|
this.publishedOwnerToken = owner;
|
|
385
397
|
}
|
|
398
|
+
localDescriptorFields(meshName, registration, state) {
|
|
399
|
+
return {
|
|
400
|
+
objectRole: effectiveObjectRole(registration),
|
|
401
|
+
placementWeight: this.placementWeight(meshName),
|
|
402
|
+
channelWeights: Object.fromEntries(this.serverChannels(meshName).map(([channelName, channel]) => [
|
|
403
|
+
channelName,
|
|
404
|
+
state === contracts_1.ZLinkFrameworkRuntimeState.Draining
|
|
405
|
+
? 0
|
|
406
|
+
: this.effectiveChannelWeight(meshName, channelName, channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT)
|
|
407
|
+
])),
|
|
408
|
+
applicationVersion: this.options.registration.applicationVersion
|
|
409
|
+
};
|
|
410
|
+
}
|
|
386
411
|
async reconcileAndPublishMeshNodeState(state, meshName, signal) {
|
|
387
412
|
const location = this.locationAutoConnect;
|
|
388
413
|
const node = this.meshNodes.get(meshName);
|
|
@@ -392,12 +417,15 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
392
417
|
const owner = location.runtime.currentOwnerToken;
|
|
393
418
|
if (owner === undefined)
|
|
394
419
|
return;
|
|
395
|
-
const current = (await location.runtime.listLiveMeshNodes(meshName, signal)).find((descriptor) =>
|
|
420
|
+
const current = (await location.runtime.listLiveMeshNodes(meshName, signal)).find((descriptor) => (0, routing_id_1.routingIdsEqual)(descriptor.rid, status.routingId) &&
|
|
396
421
|
descriptor.lifecycleGeneration === status.lifecycleGeneration &&
|
|
397
422
|
descriptor.ownerId === owner.ownerId &&
|
|
398
423
|
descriptor.leaseGeneration === owner.leaseGeneration);
|
|
399
424
|
if (current !== undefined) {
|
|
400
|
-
this.publishedMeshNodeDescriptors.set(meshName,
|
|
425
|
+
this.publishedMeshNodeDescriptors.set(meshName, {
|
|
426
|
+
...current,
|
|
427
|
+
...this.localDescriptorFields(meshName, this.options.registration.spotNodes.get(meshName), state)
|
|
428
|
+
});
|
|
401
429
|
this.descriptorRevisionByMesh.set(meshName, maxBigInt(this.descriptorRevisionByMesh.get(meshName) ?? 0n, current.descriptorRevision));
|
|
402
430
|
this.publishedOwnerToken = owner;
|
|
403
431
|
}
|
|
@@ -583,11 +611,13 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
583
611
|
};
|
|
584
612
|
await settle(publishers.map(async (publisher) => publisher.close()));
|
|
585
613
|
await settle(autoConnectLoops.map((loop) => loop.prepareTransportShutdown()));
|
|
586
|
-
await settle(entryActivations
|
|
587
|
-
|
|
614
|
+
await settle(entryActivations
|
|
615
|
+
.reverse()
|
|
616
|
+
.map((activation) => (0, abort_1.awaitWithAbort)(activation.dispose(deadline), signal)));
|
|
617
|
+
await settle(meshPumps.reverse().map((pump) => pump.dispose(signal)));
|
|
588
618
|
await settle(meshNodes.reverse().map(async (node) => {
|
|
589
|
-
node.shutdown(DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS);
|
|
590
|
-
node.close();
|
|
619
|
+
await node.shutdown(DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS);
|
|
620
|
+
await node.close();
|
|
591
621
|
}));
|
|
592
622
|
for (const completions of meshCompletions) {
|
|
593
623
|
completions.dispose();
|
|
@@ -604,26 +634,37 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
604
634
|
this.meshNodes.clear();
|
|
605
635
|
this.meshCompletions.clear();
|
|
606
636
|
}
|
|
607
|
-
|
|
637
|
+
/**
|
|
638
|
+
* Node and Channel records go straight to the framework dispatcher in the
|
|
639
|
+
* pump's turn. Only Spot and Actor records addressed to the Entry Spot wait
|
|
640
|
+
* for its activation first.
|
|
641
|
+
*/
|
|
642
|
+
dispatchMeshRecord(meshName, owner, record) {
|
|
643
|
+
if ((record.kind === service_runtime_contracts_1.ReceiveKind.ActorSend ||
|
|
644
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.ActorRequest ||
|
|
645
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend ||
|
|
646
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.SpotRequest ||
|
|
647
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.SpotMulticast) &&
|
|
648
|
+
this.targetsEntrySpot(meshName, owner)) {
|
|
649
|
+
return this.ensureEntryActivation(meshName).then(() => this.dispatchFrameworkRecord(meshName, owner, record));
|
|
650
|
+
}
|
|
651
|
+
return this.dispatchFrameworkRecord(meshName, owner, record);
|
|
652
|
+
}
|
|
653
|
+
targetsEntrySpot(meshName, owner) {
|
|
654
|
+
if (owner.spotId === null)
|
|
655
|
+
return true;
|
|
608
656
|
const node = this.meshNodes.get(meshName);
|
|
609
|
-
|
|
610
|
-
(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
(record.kind === service_runtime_contracts_1.ReceiveKind.ActorSend ||
|
|
614
|
-
record.kind === service_runtime_contracts_1.ReceiveKind.ActorRequest ||
|
|
615
|
-
record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend ||
|
|
616
|
-
record.kind === service_runtime_contracts_1.ReceiveKind.SpotRequest ||
|
|
617
|
-
record.kind === service_runtime_contracts_1.ReceiveKind.SpotMulticast)) {
|
|
618
|
-
await this.ensureEntryActivation(meshName);
|
|
619
|
-
}
|
|
657
|
+
return (node !== undefined &&
|
|
658
|
+
(0, routing_id_1.routingIdsEqual)(owner.spotId, String(node.status().routingId)));
|
|
659
|
+
}
|
|
660
|
+
dispatchFrameworkRecord(meshName, owner, record) {
|
|
620
661
|
const dispatcher = this.options.meshRecordDispatcher;
|
|
621
662
|
if (dispatcher === undefined) {
|
|
622
|
-
|
|
663
|
+
return Promise.reject(new configuration_1.ZLinkConfigurationException(`MeshNode '${meshName}' received a record before its framework dispatcher was registered.`));
|
|
623
664
|
}
|
|
624
|
-
|
|
665
|
+
return dispatcher(meshName, owner, record);
|
|
625
666
|
}
|
|
626
|
-
async dispatchEntrySpotRecord(meshName, owner, record) {
|
|
667
|
+
async dispatchEntrySpotRecord(meshName, owner, record, admit) {
|
|
627
668
|
if (record.kind !== service_runtime_contracts_1.ReceiveKind.SpotSend &&
|
|
628
669
|
record.kind !== service_runtime_contracts_1.ReceiveKind.SpotRequest &&
|
|
629
670
|
record.kind !== service_runtime_contracts_1.ReceiveKind.SpotMulticast) {
|
|
@@ -638,7 +679,8 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
638
679
|
if (record.topic === null || record.topic.length === 0) {
|
|
639
680
|
throw new configuration_1.ZLinkConfigurationException('MeshNode Entry Spot multicast record is missing its topic.');
|
|
640
681
|
}
|
|
641
|
-
|
|
682
|
+
const dispatch = () => activation.dispatchSubscriptionRecord(record.topic, record.parts, record.sourceNodeRid);
|
|
683
|
+
await (admit === undefined ? dispatch() : admit(dispatch));
|
|
642
684
|
return true;
|
|
643
685
|
}
|
|
644
686
|
const envelope = (0, channel_envelope_1.decodeChannelEnvelope)(record.parts, undefined, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
|
|
@@ -648,15 +690,20 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
648
690
|
channelName: envelope.header.channelName,
|
|
649
691
|
contentType: envelope.header.contentType
|
|
650
692
|
};
|
|
651
|
-
if (record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend) {
|
|
652
|
-
await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, false);
|
|
653
|
-
return true;
|
|
654
|
-
}
|
|
655
693
|
try {
|
|
656
|
-
const
|
|
657
|
-
|
|
694
|
+
const dispatch = async () => {
|
|
695
|
+
if (record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend) {
|
|
696
|
+
await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, false);
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
const response = await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, true);
|
|
700
|
+
requireEntrySpotReply(record.reply((0, channel_envelope_1.encodeChannelReplyParts)(envelope.header, response, codecs)));
|
|
701
|
+
};
|
|
702
|
+
await (admit === undefined ? dispatch() : admit(dispatch));
|
|
658
703
|
}
|
|
659
704
|
catch (error) {
|
|
705
|
+
if (record.kind !== service_runtime_contracts_1.ReceiveKind.SpotRequest)
|
|
706
|
+
throw error;
|
|
660
707
|
requireEntrySpotReply(record.reply((0, channel_envelope_1.encodeChannelErrorReplyParts)(envelope.header, error)));
|
|
661
708
|
}
|
|
662
709
|
return true;
|
|
@@ -784,6 +831,13 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
784
831
|
}
|
|
785
832
|
await activation.commitServiceActorJoin(actor, handoffBacklog);
|
|
786
833
|
}
|
|
834
|
+
admitEntryActorPacketPrefix(meshName, actorId, records) {
|
|
835
|
+
const activation = this.entryActivations.get(meshName);
|
|
836
|
+
if (activation === undefined) {
|
|
837
|
+
throw new configuration_1.ZLinkConfigurationException(`Entry Spot Actor '${actorId}' has no activation for MeshNode '${meshName}'.`);
|
|
838
|
+
}
|
|
839
|
+
return activation.admitActorPacketPrefix(actorId, records);
|
|
840
|
+
}
|
|
787
841
|
executeEntryActor(meshName, actorId, operation) {
|
|
788
842
|
const activation = this.entryActivations.get(meshName);
|
|
789
843
|
if (activation === undefined) {
|
|
@@ -910,16 +964,27 @@ function effectiveObjectRole(registration) {
|
|
|
910
964
|
? contracts_1.ZLinkObjectRole.Server
|
|
911
965
|
: contracts_1.ZLinkObjectRole.None;
|
|
912
966
|
}
|
|
913
|
-
function objectCapability(objectKind, stableType, factory) {
|
|
967
|
+
function objectCapability(objectKind, stableType, factory, entryAccepted = false) {
|
|
914
968
|
const policy = factory.relocation?.kind ?? 'disabled';
|
|
915
969
|
return {
|
|
916
970
|
objectKind,
|
|
917
971
|
stableType,
|
|
918
972
|
policy,
|
|
919
973
|
hasSnapshotAdapter: policy === 'snapshot',
|
|
920
|
-
limit: objectKind === 'actor' ? 0 : (factory.options?.stableTypeLimit ?? 0)
|
|
974
|
+
limit: objectKind === 'actor' ? 0 : (factory.options?.stableTypeLimit ?? 0),
|
|
975
|
+
entryAccepted
|
|
921
976
|
};
|
|
922
977
|
}
|
|
978
|
+
/**
|
|
979
|
+
* The one decision for creating a new Actor on this node (Actor model §6.3): the node registered
|
|
980
|
+
* an Entry Spot type that accepts the Actor type and an Actor factory for it. Publication and the
|
|
981
|
+
* target refusal both read it.
|
|
982
|
+
*/
|
|
983
|
+
function registrationAcceptsNewActor(registration, stableType) {
|
|
984
|
+
return (registration.entrySpotType !== undefined &&
|
|
985
|
+
registration.entrySpotActorType === stableType &&
|
|
986
|
+
effectiveActorRegistrations(registration).some(([type]) => type === stableType));
|
|
987
|
+
}
|
|
923
988
|
function aggregatePlacementCapacity(actorLimit, spotLimit) {
|
|
924
989
|
const unlimited = RegistrationBuilderPolicy_1.ZLINK_MAX_CAPACITY;
|
|
925
990
|
const actors = actorLimit === 0 ? unlimited : actorLimit;
|
|
@@ -35,6 +35,7 @@ export declare class DefaultZLinkSpotOutbound implements ZLinkSpotOutbound {
|
|
|
35
35
|
private requireAddressTransport;
|
|
36
36
|
}
|
|
37
37
|
export interface ZLinkSpotAddressCallOptions {
|
|
38
|
+
readonly onAdmitted?: () => void;
|
|
38
39
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
39
40
|
readonly instanceSpot: boolean;
|
|
40
41
|
readonly instanceSpotType?: string;
|
|
@@ -63,10 +64,12 @@ export interface ZLinkSpotRoutedSendOptions {
|
|
|
63
64
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
64
65
|
}
|
|
65
66
|
export interface ZLinkSpotRoutedRequestOptions extends ZLinkSpotRoutedSendOptions {
|
|
67
|
+
readonly onAdmitted?: () => void;
|
|
66
68
|
readonly timeoutMs?: number;
|
|
67
69
|
readonly signal?: AbortSignal;
|
|
68
70
|
}
|
|
69
71
|
export interface ZLinkSpotHandleCallOptions {
|
|
72
|
+
readonly onAdmitted?: () => void;
|
|
70
73
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
71
74
|
readonly timeoutMs?: number;
|
|
72
75
|
readonly signal?: AbortSignal;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DefaultZLinkSpotOutbound = void 0;
|
|
4
4
|
exports.sendToSpotHandle = sendToSpotHandle;
|
|
5
5
|
exports.requestToSpotHandle = requestToSpotHandle;
|
|
6
|
+
const request_result_1 = require("../messaging/request-result");
|
|
6
7
|
const contracts_1 = require("../../contracts");
|
|
7
8
|
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
8
9
|
const configuration_1 = require("../configuration");
|
|
@@ -115,14 +116,13 @@ function createAddressedSpotSendCall(serial, transport, spotId, message, sourceS
|
|
|
115
116
|
}
|
|
116
117
|
function createAddressedSpotRequestCall(serial, transport, spotId, request, sourceSpotProvider) {
|
|
117
118
|
const options = newAddressCallOptions();
|
|
118
|
-
const begin = (
|
|
119
|
-
markSubmitted(options);
|
|
120
|
-
rejectSameSpotAsyncRequest(serial, spotId, waitPolicy);
|
|
119
|
+
const begin = (signal, onAdmitted) => {
|
|
121
120
|
return startRequestOnSerial(serial, () => ({
|
|
122
121
|
pending: transport.requestToSpotAddress(spotId, request, {
|
|
123
122
|
...freezeAddressCallOptions(options, sourceSpotProvider?.()),
|
|
124
123
|
timeoutMs: options.timeoutMs,
|
|
125
|
-
signal
|
|
124
|
+
signal,
|
|
125
|
+
onAdmitted
|
|
126
126
|
})
|
|
127
127
|
}));
|
|
128
128
|
};
|
|
@@ -153,13 +153,16 @@ function createAddressedSpotRequestCall(serial, transport, spotId, request, sour
|
|
|
153
153
|
return this;
|
|
154
154
|
},
|
|
155
155
|
submit(signal) {
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
markSubmitted(options);
|
|
157
|
+
rejectSameSpotAsyncRequest(serial, spotId, 'async');
|
|
158
|
+
return (0, request_result_1.createZLinkRequest)((onAdmitted) => begin(signal, onAdmitted), (pending) => (serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending)));
|
|
158
159
|
},
|
|
159
160
|
yield(signal) {
|
|
160
161
|
const turn = (0, execution_1.requireZLinkYieldTurn)();
|
|
161
|
-
|
|
162
|
-
|
|
162
|
+
markSubmitted(options);
|
|
163
|
+
rejectSameSpotAsyncRequest(serial, spotId, 'yield');
|
|
164
|
+
const pending = begin(signal);
|
|
165
|
+
return turn.yieldFrameworkPromise(pending);
|
|
163
166
|
}
|
|
164
167
|
};
|
|
165
168
|
}
|
|
@@ -250,7 +253,12 @@ function wrapPublishCall(serial, inner) {
|
|
|
250
253
|
};
|
|
251
254
|
}
|
|
252
255
|
function wrapRequestCall(serial, inner) {
|
|
253
|
-
const begin = (signal) => startRequestOnSerial(serial, () =>
|
|
256
|
+
const begin = (signal, onAdmitted) => startRequestOnSerial(serial, () => {
|
|
257
|
+
const pending = inner.submit(signal);
|
|
258
|
+
if (onAdmitted !== undefined)
|
|
259
|
+
void pending.admitted.then(onAdmitted, () => undefined);
|
|
260
|
+
return { pending };
|
|
261
|
+
});
|
|
254
262
|
return {
|
|
255
263
|
metadata(key, value) {
|
|
256
264
|
if (typeof key === 'string')
|
|
@@ -264,13 +272,12 @@ function wrapRequestCall(serial, inner) {
|
|
|
264
272
|
return this;
|
|
265
273
|
},
|
|
266
274
|
submit(signal) {
|
|
267
|
-
|
|
268
|
-
return serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending);
|
|
275
|
+
return (0, request_result_1.createZLinkRequest)((onAdmitted) => begin(signal, onAdmitted), (pending) => (serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending)));
|
|
269
276
|
},
|
|
270
277
|
yield(signal) {
|
|
271
278
|
const turn = (0, execution_1.requireZLinkYieldTurn)();
|
|
272
279
|
const pending = begin(signal);
|
|
273
|
-
return turn.
|
|
280
|
+
return turn.yieldFrameworkPromise(pending);
|
|
274
281
|
}
|
|
275
282
|
};
|
|
276
283
|
}
|
|
@@ -320,15 +327,15 @@ function wrapRoutedSpotSendCall(serial, transport, spot, message, spotRouterChan
|
|
|
320
327
|
function wrapRoutedSpotRequestCall(serial, transport, spot, request, spotRouterChannelIdForMesh, sourceSpotProvider) {
|
|
321
328
|
let selectedTimeoutMs;
|
|
322
329
|
const metadata = new Map();
|
|
323
|
-
const begin = (
|
|
330
|
+
const begin = (signal, onAdmitted) => {
|
|
324
331
|
// A request to the current Spot would wait behind the handler that owns
|
|
325
332
|
// the same Spot claim. Reject it before resolving a route or submitting
|
|
326
333
|
// transport work; one-way self-send remains a valid FIFO admission.
|
|
327
|
-
rejectSameSpotAsyncRequest(serial, spot.spotId, waitPolicy);
|
|
328
334
|
return startRequestOnSerial(serial, () => ({
|
|
329
335
|
pending: requestToSpotHandle(transport, spot, request, {
|
|
330
336
|
timeoutMs: selectedTimeoutMs,
|
|
331
337
|
signal,
|
|
338
|
+
onAdmitted,
|
|
332
339
|
metadata,
|
|
333
340
|
spotRouterChannelIdForMesh,
|
|
334
341
|
sourceSpot: sourceSpotProvider?.()
|
|
@@ -352,13 +359,14 @@ function wrapRoutedSpotRequestCall(serial, transport, spot, request, spotRouterC
|
|
|
352
359
|
return this;
|
|
353
360
|
},
|
|
354
361
|
submit(signal) {
|
|
355
|
-
|
|
356
|
-
return serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending);
|
|
362
|
+
rejectSameSpotAsyncRequest(serial, spot.spotId, 'async');
|
|
363
|
+
return (0, request_result_1.createZLinkRequest)((onAdmitted) => begin(signal, onAdmitted), (pending) => (serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending)));
|
|
357
364
|
},
|
|
358
365
|
yield(signal) {
|
|
359
366
|
const turn = (0, execution_1.requireZLinkYieldTurn)();
|
|
360
|
-
|
|
361
|
-
|
|
367
|
+
rejectSameSpotAsyncRequest(serial, spot.spotId, 'yield');
|
|
368
|
+
const pending = begin(signal);
|
|
369
|
+
return turn.yieldFrameworkPromise(pending);
|
|
362
370
|
}
|
|
363
371
|
};
|
|
364
372
|
}
|
|
@@ -395,6 +403,7 @@ async function requestToSpotHandle(transport, spot, request, options = {}) {
|
|
|
395
403
|
packetName,
|
|
396
404
|
timeoutMs: options.timeoutMs,
|
|
397
405
|
signal: options.signal,
|
|
406
|
+
onAdmitted: options.onAdmitted,
|
|
398
407
|
metadata: options.metadata
|
|
399
408
|
};
|
|
400
409
|
if (options.sourceSpot !== undefined && transport.requestFromSpotToSpot !== undefined) {
|
|
@@ -85,7 +85,11 @@ function decodeHandoffBacklog(value) {
|
|
|
85
85
|
BigInt(source.ownerLeaseGeneration) <= 0n ||
|
|
86
86
|
source.nodeRid.length === 0 ||
|
|
87
87
|
BigInt(source.nodeGeneration) <= 0n ||
|
|
88
|
-
source.replyRouteId !==
|
|
88
|
+
source.replyRouteId !==
|
|
89
|
+
(packet.messageFollowOrigin !== undefined &&
|
|
90
|
+
(0, routing_id_1.routingIdsEqual)((0, routing_id_1.decodeRoutingId)(source.nodeRid, source.nodeRidHex), packet.messageFollowOrigin.sourceNodeRid)
|
|
91
|
+
? packet.messageFollowOrigin.originalReplyRouteId.toString()
|
|
92
|
+
: messageFollowContext.replyRouteId))) ||
|
|
89
93
|
(!packet.returnResponse && source !== undefined)) {
|
|
90
94
|
throw new Error('Remote actor handoff request source fence is invalid.');
|
|
91
95
|
}
|
|
@@ -23,6 +23,7 @@ interface ZLinkRoutedSpotPacketDispatchOptions {
|
|
|
23
23
|
}
|
|
24
24
|
interface ZLinkRoutedSpotPacketContext {
|
|
25
25
|
readonly channelName: string;
|
|
26
|
+
readonly onAdmitted?: () => void;
|
|
26
27
|
readonly contentType?: string;
|
|
27
28
|
readonly workOptions?: ZLinkSerialWorkOptions;
|
|
28
29
|
readonly admissionTimeoutMs?: number;
|
|
@@ -151,7 +151,7 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
151
151
|
if (activation.serial.isCurrentTurn) {
|
|
152
152
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Spot '${spotId}' cannot await a request to its current serial turn.`);
|
|
153
153
|
}
|
|
154
|
-
await activation.serial.execute(runHandler, context.workOptions, instanceIntent ? runHandler : undefined);
|
|
154
|
+
await activation.serial.execute(runHandler, { ...context.workOptions, onAdmitted: context.onAdmitted }, instanceIntent ? runHandler : undefined);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
catch (error) {
|
|
@@ -8,6 +8,7 @@ import type { ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
|
|
|
8
8
|
import type { ZLinkRemoteActorJoinActor, ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
|
|
9
9
|
import type { ZLinkBackendSpotNode } from '../backend/contracts';
|
|
10
10
|
export interface ZLinkEntryActorRuntime {
|
|
11
|
+
releaseMembers?(meshName: string): Promise<void>;
|
|
11
12
|
resolveActor(actorId: string): ZLinkActor | undefined;
|
|
12
13
|
commitActorTransaction(actor: ZLinkActor, onJoined: () => Promise<void>): Promise<void>;
|
|
13
14
|
destroyActor(node: ZLinkBackendSpotNode, entryNodeRid: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
@@ -32,7 +33,6 @@ export interface ZLinkSpotActorTransferRuntime {
|
|
|
32
33
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
|
|
33
34
|
clearRoutedActor(actor: ZLinkActor): void;
|
|
34
35
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
35
|
-
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
36
36
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
37
37
|
}
|
|
38
38
|
export interface ZLinkSpotBoundSessionRuntime {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { ZLinkUserSpotExecutionMode } from '../../contracts';
|
|
2
|
+
import type { ZLinkActorHandoffDispatch, ZLinkActorHandoffPrefixAdmission, ZLinkActorHandoffPrefixRecord } from '../actors/actor-handoff';
|
|
2
3
|
import type { ZLinkExecutionBarrier } from '../execution';
|
|
3
4
|
import type { ZLinkSerialSchedulerOptions, ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
|
|
4
5
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
6
|
+
export type ZLinkSpotPreparationCompletion = 'publication' | 'first-terminal';
|
|
7
|
+
export type ZLinkActorPacketTurnDispatch = (serial: ZLinkSpotSerialTurnExecutor, ...args: Parameters<ZLinkActorHandoffDispatch>) => ReturnType<ZLinkActorHandoffDispatch>;
|
|
5
8
|
/**
|
|
6
9
|
* Owns every application serial unit that belongs to one Spot activation.
|
|
7
10
|
*
|
|
@@ -19,11 +22,18 @@ export declare class ZLinkSpotSerialExecutor {
|
|
|
19
22
|
private executionBarrier;
|
|
20
23
|
private closing;
|
|
21
24
|
private closePromise;
|
|
25
|
+
private preparation?;
|
|
22
26
|
constructor(spotSerial: ZLinkSpotSerialTurnExecutor, executionMode: ZLinkUserSpotExecutionMode, sourceSpotId: unknown, actorOptions?: ZLinkSerialSchedulerOptions | undefined);
|
|
23
27
|
setExecutionBarrier(barrier: ZLinkExecutionBarrier): void;
|
|
28
|
+
get isPreparing(): boolean;
|
|
29
|
+
beginPreparation(kind?: 'activation' | 'relocation'): void;
|
|
30
|
+
openPreparationAdmission(): void;
|
|
31
|
+
finishPreparation(terminal?: () => Promise<void>): Promise<void>;
|
|
24
32
|
executeSpot<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
25
33
|
executeActor<T>(actorId: string, operation: (serial: ZLinkSpotSerialTurnExecutor) => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
26
34
|
executeTimer<T>(timerName: string, operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
35
|
+
/** Admits held packets through the same Actor FIFO as ordinary ingress. */
|
|
36
|
+
admitActorPacketPrefix(actorId: string, records: readonly ZLinkActorHandoffPrefixRecord[], dispatch: ZLinkActorPacketTurnDispatch): ZLinkActorHandoffPrefixAdmission;
|
|
27
37
|
isTimerExecuting(timerName: string): boolean;
|
|
28
38
|
executeLifecycle<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
29
39
|
terminateActor(actorId: string, terminal: () => Promise<void>): Promise<void>;
|