@zlink-systems/framework 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -11,20 +11,14 @@ import type {
|
|
|
11
11
|
ZLinkActorCreateCall,
|
|
12
12
|
ZLinkActorCreateResult,
|
|
13
13
|
ZLinkActorGetOrCreateCall,
|
|
14
|
-
ZLinkActorManager
|
|
15
|
-
} from '../../contracts';
|
|
16
|
-
import {
|
|
17
|
-
ZLinkEncodedPayload,
|
|
18
|
-
ZLinkFrameworkException
|
|
14
|
+
ZLinkActorManager
|
|
19
15
|
} from '../../contracts';
|
|
16
|
+
import { ZLinkEncodedPayload, ZLinkFrameworkException } from '../../contracts';
|
|
20
17
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
21
18
|
import { ZLinkMessage } from '../../contracts';
|
|
22
19
|
import { ZLinkConfigurationException } from '../configuration';
|
|
23
20
|
import { throwIfAborted } from '../abort';
|
|
24
|
-
import type {
|
|
25
|
-
ZLinkBackendActorRef,
|
|
26
|
-
ZLinkBackendSpotNode
|
|
27
|
-
} from '../backend/contracts';
|
|
21
|
+
import type { ZLinkBackendActorRef, ZLinkBackendSpotNode } from '../backend/contracts';
|
|
28
22
|
import { closeMeshCompletion } from '../backend/mesh-completion-table';
|
|
29
23
|
import {
|
|
30
24
|
captureZLinkSpotSerialTurn,
|
|
@@ -39,20 +33,10 @@ export {
|
|
|
39
33
|
type ZLinkActorClientOptions
|
|
40
34
|
} from './actor-client';
|
|
41
35
|
|
|
42
|
-
import {
|
|
43
|
-
|
|
44
|
-
} from '
|
|
45
|
-
export {
|
|
46
|
-
DefaultZLinkActorContext,
|
|
47
|
-
ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME
|
|
48
|
-
} from './actor-context';
|
|
49
|
-
import {
|
|
50
|
-
ZLinkActorCreationCoordinator,
|
|
51
|
-
type ZLinkActorCreateRequest
|
|
52
|
-
} from './actor-creation';
|
|
53
|
-
export {
|
|
54
|
-
ZLinkActorSerialExecutor
|
|
55
|
-
} from './actor-mailbox';
|
|
36
|
+
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
37
|
+
export { DefaultZLinkActorContext, ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME } from './actor-context';
|
|
38
|
+
import { ZLinkActorCreationCoordinator, type ZLinkActorCreateRequest } from './actor-creation';
|
|
39
|
+
export { ZLinkActorSerialExecutor } from './actor-mailbox';
|
|
56
40
|
export {
|
|
57
41
|
DEFAULT_MESSAGE_FOLLOW_DURATION_MS,
|
|
58
42
|
ZLinkActorHandoffCoordinator,
|
|
@@ -164,12 +148,15 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
164
148
|
|
|
165
149
|
constructor(private readonly options: ZLinkActorManagerOptions) {
|
|
166
150
|
this.creation = new ZLinkActorCreationCoordinator(options);
|
|
167
|
-
this.transferredActorRollback = new ZLinkTransferredActorRollbackCoordinator(
|
|
151
|
+
this.transferredActorRollback = new ZLinkTransferredActorRollbackCoordinator(
|
|
152
|
+
this.states,
|
|
153
|
+
options
|
|
154
|
+
);
|
|
168
155
|
}
|
|
169
156
|
|
|
170
157
|
create(actorId: string, actorType: string): ZLinkActorCreateCall {
|
|
171
|
-
return new ZLinkActorCreateCallRuntime(
|
|
172
|
-
|
|
158
|
+
return new ZLinkActorCreateCallRuntime((options, signal) =>
|
|
159
|
+
this.submitCreate(actorId, actorType, true, options, signal)
|
|
173
160
|
);
|
|
174
161
|
}
|
|
175
162
|
|
|
@@ -184,8 +171,8 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
184
171
|
}
|
|
185
172
|
|
|
186
173
|
getOrCreate(actorId: string, actorType: string): ZLinkActorGetOrCreateCall {
|
|
187
|
-
return new ZLinkActorGetOrCreateCallRuntime(
|
|
188
|
-
|
|
174
|
+
return new ZLinkActorGetOrCreateCallRuntime((options, signal) =>
|
|
175
|
+
this.submitCreate(actorId, actorType, false, options, signal)
|
|
189
176
|
);
|
|
190
177
|
}
|
|
191
178
|
|
|
@@ -227,10 +214,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
227
214
|
if (node === undefined || completions === undefined) return false;
|
|
228
215
|
const destroyTask = state.getOrStartDestroy(entryNodeRid, async (nativeRef) => {
|
|
229
216
|
if (nativeRef !== undefined) {
|
|
230
|
-
const completion = await completions.submit(
|
|
231
|
-
() => node.destroyActor(nativeRef, 0),
|
|
232
|
-
signal
|
|
233
|
-
);
|
|
217
|
+
const completion = await completions.submit(() => node.destroyActor(nativeRef, 0), signal);
|
|
234
218
|
try {
|
|
235
219
|
if (completion.terminalResult !== 0 || completion.failureErrno !== 0) {
|
|
236
220
|
// Classify the (terminal, fine) pair via the shared translator
|
|
@@ -284,10 +268,8 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
284
268
|
await disposeLifecycleHandlers(state.actor);
|
|
285
269
|
}
|
|
286
270
|
state.prepareForRemoteReentry();
|
|
287
|
-
const operation = state.getOrStartCreation(
|
|
288
|
-
|
|
289
|
-
false,
|
|
290
|
-
() => this.creation.materializeTransferredActor(
|
|
271
|
+
const operation = state.getOrStartCreation(actorType, false, () =>
|
|
272
|
+
this.creation.materializeTransferredActor(
|
|
291
273
|
actorId,
|
|
292
274
|
actorType,
|
|
293
275
|
state,
|
|
@@ -339,13 +321,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
339
321
|
requireActorMeshName(meshName);
|
|
340
322
|
this.ensureActorTypeBelongsToMesh(meshName, actorType);
|
|
341
323
|
if (this.options.placementCreate !== undefined) {
|
|
342
|
-
return await this.options.placementCreate(
|
|
343
|
-
actorId,
|
|
344
|
-
actorType,
|
|
345
|
-
failIfExists,
|
|
346
|
-
options,
|
|
347
|
-
signal
|
|
348
|
-
);
|
|
324
|
+
return await this.options.placementCreate(actorId, actorType, failIfExists, options, signal);
|
|
349
325
|
}
|
|
350
326
|
const localState = this.states.get(actorId);
|
|
351
327
|
if (localState?.actorType !== undefined && localState.actorType !== actorType) {
|
|
@@ -467,15 +443,8 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
467
443
|
this.rememberActorMeshFromType(actorId, actorType);
|
|
468
444
|
const state = this.getOrCreateState(actorId);
|
|
469
445
|
state.setNativeActorRef(nativeRef);
|
|
470
|
-
const operation = state.getOrStartCreation(
|
|
471
|
-
actorType,
|
|
472
|
-
false,
|
|
473
|
-
() => this.creation.materializeTransferredActor(
|
|
474
|
-
actorId,
|
|
475
|
-
actorType,
|
|
476
|
-
state,
|
|
477
|
-
undefined
|
|
478
|
-
)
|
|
446
|
+
const operation = state.getOrStartCreation(actorType, false, () =>
|
|
447
|
+
this.creation.materializeTransferredActor(actorId, actorType, state, undefined)
|
|
479
448
|
);
|
|
480
449
|
const result = await operation.task;
|
|
481
450
|
if (result.status !== 'created') {
|
|
@@ -487,12 +456,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
487
456
|
if (registry === undefined) {
|
|
488
457
|
throw new ZLinkConfigurationException('Actor transfer registry is not configured.');
|
|
489
458
|
}
|
|
490
|
-
await registry.restore(
|
|
491
|
-
transfer.adapterKey,
|
|
492
|
-
actor,
|
|
493
|
-
transfer.state,
|
|
494
|
-
signal
|
|
495
|
-
);
|
|
459
|
+
await registry.restore(transfer.adapterKey, actor, transfer.state, signal);
|
|
496
460
|
}
|
|
497
461
|
state.setLocationGeneration(authorityOwnerGeneration);
|
|
498
462
|
state.setJoinedSpot(spotId, undefined, membershipEpoch);
|
|
@@ -559,7 +523,11 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
559
523
|
this.relocationStaged.delete(actorId);
|
|
560
524
|
}
|
|
561
525
|
|
|
562
|
-
async getOrCreateActor(
|
|
526
|
+
async getOrCreateActor(
|
|
527
|
+
actorId: string,
|
|
528
|
+
actorType: string,
|
|
529
|
+
signal?: AbortSignal
|
|
530
|
+
): Promise<ZLinkActor> {
|
|
563
531
|
this.rememberActorMeshFromType(actorId, actorType);
|
|
564
532
|
const result = await this.createOrGet(actorId, actorType, false, undefined, signal);
|
|
565
533
|
return requireCreatedActor(result, actorId);
|
|
@@ -632,8 +600,8 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
632
600
|
}
|
|
633
601
|
|
|
634
602
|
activeActorCount(meshName: string): number {
|
|
635
|
-
return [...this.states.values()].filter(
|
|
636
|
-
state.meshName === meshName && state.actor !== undefined
|
|
603
|
+
return [...this.states.values()].filter(
|
|
604
|
+
(state) => state.meshName === meshName && state.actor !== undefined
|
|
637
605
|
).length;
|
|
638
606
|
}
|
|
639
607
|
|
|
@@ -656,9 +624,8 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
656
624
|
);
|
|
657
625
|
}
|
|
658
626
|
const destroyTask = state.getOrStartDestroy(entryNodeRid, async (actorRef) => {
|
|
659
|
-
const destroyedActorRef =
|
|
660
|
-
? undefined
|
|
661
|
-
: toFrameworkActorRef(actorRef, state.meshName ?? '');
|
|
627
|
+
const destroyedActorRef =
|
|
628
|
+
actorRef === undefined ? undefined : toFrameworkActorRef(actorRef, state.meshName ?? '');
|
|
662
629
|
if (actorRef !== undefined) {
|
|
663
630
|
await node.destroyActor(actorRef, 0, destroySignal);
|
|
664
631
|
state.markNativeActorDestroyed(actorRef);
|
|
@@ -720,17 +687,8 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
720
687
|
if (request !== undefined && createRequest.nativeRequest !== undefined) {
|
|
721
688
|
state.setCreateRequestPayload(createRequest.nativeRequest.data());
|
|
722
689
|
}
|
|
723
|
-
const operation = state.getOrStartCreation(
|
|
724
|
-
actorType,
|
|
725
|
-
failIfExists,
|
|
726
|
-
() => this.creation.createActor(
|
|
727
|
-
actorId,
|
|
728
|
-
actorType,
|
|
729
|
-
state,
|
|
730
|
-
createRequest,
|
|
731
|
-
claimLocation,
|
|
732
|
-
signal
|
|
733
|
-
)
|
|
690
|
+
const operation = state.getOrStartCreation(actorType, failIfExists, () =>
|
|
691
|
+
this.creation.createActor(actorId, actorType, state, createRequest, claimLocation, signal)
|
|
734
692
|
);
|
|
735
693
|
if (operation.created) {
|
|
736
694
|
void operation.task.then(
|
|
@@ -839,11 +797,9 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
|
|
|
839
797
|
actorId: state.actorId,
|
|
840
798
|
objectGeneration: 1n,
|
|
841
799
|
meshName: state.meshName ?? '',
|
|
842
|
-
nodeRid: this.options.actorCreatedNodeRidProvider?.()
|
|
843
|
-
?? 'local'
|
|
800
|
+
nodeRid: this.options.actorCreatedNodeRidProvider?.() ?? 'local'
|
|
844
801
|
};
|
|
845
802
|
}
|
|
846
|
-
|
|
847
803
|
}
|
|
848
804
|
|
|
849
805
|
interface ZLinkActorCreateCallOptions {
|
|
@@ -911,11 +867,14 @@ class ZLinkActorCreateCallRuntime implements ZLinkActorCreateCall {
|
|
|
911
867
|
private executeOnce(signal?: AbortSignal): Promise<ZLinkActorCreateResult> {
|
|
912
868
|
this.requireMutable();
|
|
913
869
|
this.submitted = true;
|
|
914
|
-
return this.execute(
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
870
|
+
return this.execute(
|
|
871
|
+
{
|
|
872
|
+
...(this.meshNameValue === undefined ? {} : { meshName: this.meshNameValue }),
|
|
873
|
+
...(this.requestConfigured ? { request: this.requestValue } : {}),
|
|
874
|
+
timeoutMs: this.timeoutMsValue
|
|
875
|
+
},
|
|
876
|
+
signal
|
|
877
|
+
);
|
|
919
878
|
}
|
|
920
879
|
|
|
921
880
|
private requireMutable(): void {
|
|
@@ -993,8 +952,6 @@ async function waitForCreationRetry(signal?: AbortSignal): Promise<void> {
|
|
|
993
952
|
|
|
994
953
|
function requireActorMeshName(meshName: string): void {
|
|
995
954
|
if (meshName.length === 0 || meshName !== meshName.trim()) {
|
|
996
|
-
throw new ZLinkConfigurationException(
|
|
997
|
-
'Actor RouteMesh name must not be empty or padded.'
|
|
998
|
-
);
|
|
955
|
+
throw new ZLinkConfigurationException('Actor RouteMesh name must not be empty or padded.');
|
|
999
956
|
}
|
|
1000
957
|
}
|
|
@@ -24,12 +24,14 @@ export class ZLinkPostCommitActorBinder {
|
|
|
24
24
|
const existing = this.tasks.get(actorRef.actorId);
|
|
25
25
|
if (existing !== undefined) return existing;
|
|
26
26
|
let task!: Promise<void>;
|
|
27
|
-
task = this.run(actorRef.actorId)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.tasks.
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
task = this.run(actorRef.actorId).finally(
|
|
28
|
+
async () =>
|
|
29
|
+
await this.lane.run(() => {
|
|
30
|
+
if (this.tasks.get(actorRef.actorId) === task) {
|
|
31
|
+
this.tasks.delete(actorRef.actorId);
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
);
|
|
33
35
|
this.tasks.set(actorRef.actorId, task);
|
|
34
36
|
return task;
|
|
35
37
|
}
|
|
@@ -51,15 +53,13 @@ export class ZLinkPostCommitActorBinder {
|
|
|
51
53
|
retryDelay.reset();
|
|
52
54
|
} catch (error) {
|
|
53
55
|
this.options.reportError?.(error);
|
|
54
|
-
if (!await retryDelay.wait(signal)) return;
|
|
56
|
+
if (!(await retryDelay.wait(signal))) return;
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
private signal(): AbortSignal | undefined {
|
|
60
|
-
return typeof this.options.signal === 'function'
|
|
61
|
-
? this.options.signal()
|
|
62
|
-
: this.options.signal;
|
|
62
|
+
return typeof this.options.signal === 'function' ? this.options.signal() : this.options.signal;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
private completeBindCore(actorId: string, actorRef: ActorRef): boolean {
|
|
@@ -31,15 +31,17 @@ export class ZLinkPostCommitActorLocation {
|
|
|
31
31
|
membershipEpoch: bigint,
|
|
32
32
|
ownerNodeGeneration: bigint
|
|
33
33
|
): void {
|
|
34
|
-
this.enqueue(actorId, () =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
this.enqueue(actorId, () =>
|
|
35
|
+
this.options.lifecycle.notifyActorJoinedSpot(
|
|
36
|
+
actorType,
|
|
37
|
+
actorId,
|
|
38
|
+
meshName,
|
|
39
|
+
spotId,
|
|
40
|
+
spotGeneration,
|
|
41
|
+
membershipEpoch,
|
|
42
|
+
ownerNodeGeneration
|
|
43
|
+
)
|
|
44
|
+
);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
leftEventually(
|
|
@@ -50,14 +52,16 @@ export class ZLinkPostCommitActorLocation {
|
|
|
50
52
|
membershipEpoch: bigint,
|
|
51
53
|
ownerNodeGeneration: bigint
|
|
52
54
|
): void {
|
|
53
|
-
this.enqueue(actorId, () =>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
this.enqueue(actorId, () =>
|
|
56
|
+
this.options.lifecycle.notifyActorLeftSpot(
|
|
57
|
+
actorType,
|
|
58
|
+
actorId,
|
|
59
|
+
entrySpotId,
|
|
60
|
+
entrySpotGeneration,
|
|
61
|
+
membershipEpoch,
|
|
62
|
+
ownerNodeGeneration
|
|
63
|
+
)
|
|
64
|
+
);
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
private enqueue(actorId: string, operation: () => Promise<void>): void {
|
|
@@ -69,11 +73,14 @@ export class ZLinkPostCommitActorLocation {
|
|
|
69
73
|
return;
|
|
70
74
|
}
|
|
71
75
|
let task!: Promise<void>;
|
|
72
|
-
task = this.run(actorId).finally(
|
|
73
|
-
|
|
74
|
-
this.
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
task = this.run(actorId).finally(
|
|
77
|
+
async () =>
|
|
78
|
+
await this.lane.run(() => {
|
|
79
|
+
if (this.tasks.get(actorId) === task) {
|
|
80
|
+
this.tasks.delete(actorId);
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
);
|
|
77
84
|
this.tasks.set(actorId, task);
|
|
78
85
|
}
|
|
79
86
|
|
|
@@ -92,7 +99,7 @@ export class ZLinkPostCommitActorLocation {
|
|
|
92
99
|
retryDelay.reset();
|
|
93
100
|
} catch (error) {
|
|
94
101
|
this.options.reportError?.(error);
|
|
95
|
-
if (!await retryDelay.wait(this.options.signal)) {
|
|
102
|
+
if (!(await retryDelay.wait(this.options.signal))) {
|
|
96
103
|
return;
|
|
97
104
|
}
|
|
98
105
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
2
5
|
import type {
|
|
3
6
|
Type,
|
|
4
7
|
ZLinkActor,
|
|
@@ -10,10 +13,7 @@ import type {
|
|
|
10
13
|
ZLinkSpotActorSendHandler
|
|
11
14
|
} from '../../contracts';
|
|
12
15
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
13
|
-
import {
|
|
14
|
-
ZLinkFrameworkException,
|
|
15
|
-
ZLinkMessageMetadataEmpty
|
|
16
|
-
} from '../../contracts';
|
|
16
|
+
import { ZLinkFrameworkException, ZLinkMessageMetadataEmpty } from '../../contracts';
|
|
17
17
|
import type { Message } from '../../contracts/Common/Message';
|
|
18
18
|
import { ZLinkConfigurationException } from '../configuration';
|
|
19
19
|
import { readZLinkDecoratorMetadata } from '../../contracts/Handlers/Attributes';
|
|
@@ -40,8 +40,9 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
|
|
|
40
40
|
private readonly packets = new Map<string, ZLinkActorPacketDescriptor>();
|
|
41
41
|
|
|
42
42
|
addHandler<THandler>(handlerType: Type<THandler>, packetName?: string): this {
|
|
43
|
-
const metadata = readZLinkDecoratorMetadata(handlerType).find(
|
|
44
|
-
entry.kind === 'spotActorSend' || entry.kind === 'spotActorRequest'
|
|
43
|
+
const metadata = readZLinkDecoratorMetadata(handlerType).find(
|
|
44
|
+
(entry) => entry.kind === 'spotActorSend' || entry.kind === 'spotActorRequest'
|
|
45
|
+
);
|
|
45
46
|
const resolvedPacketName = packetName ?? metadata?.packetName;
|
|
46
47
|
if (metadata === undefined || resolvedPacketName === undefined) {
|
|
47
48
|
throw new ZLinkConfigurationException(
|
|
@@ -49,9 +50,10 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
|
|
|
49
50
|
);
|
|
50
51
|
}
|
|
51
52
|
return this.addPacket({
|
|
52
|
-
kind:
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
kind:
|
|
54
|
+
metadata.kind === 'spotActorSend'
|
|
55
|
+
? ZLinkActorPacketKind.Send
|
|
56
|
+
: ZLinkActorPacketKind.Request,
|
|
55
57
|
packetName: resolvedPacketName,
|
|
56
58
|
actorType: Object as unknown as Type<ZLinkActor>,
|
|
57
59
|
handlerType
|
|
@@ -79,23 +81,24 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
|
|
|
79
81
|
if (exact !== undefined) {
|
|
80
82
|
return exact;
|
|
81
83
|
}
|
|
82
|
-
const wildcard = this.packets.get(
|
|
84
|
+
const wildcard = this.packets.get(
|
|
85
|
+
packetKey(kind, Object as unknown as Type<ZLinkActor>, packetName)
|
|
86
|
+
);
|
|
83
87
|
if (wildcard !== undefined) {
|
|
84
88
|
return wildcard;
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
for (const descriptor of this.packets.values()) {
|
|
88
92
|
if (
|
|
89
|
-
descriptor.kind === kind
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
descriptor.kind === kind &&
|
|
94
|
+
descriptor.packetName === packetName &&
|
|
95
|
+
actor instanceof descriptor.actorType
|
|
92
96
|
) {
|
|
93
97
|
return descriptor;
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
return undefined;
|
|
97
101
|
}
|
|
98
|
-
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
export interface ZLinkSpotActorDispatcherOptions {
|
|
@@ -138,17 +141,19 @@ export class ZLinkSpotActorDispatcher {
|
|
|
138
141
|
const descriptor = this.requirePacket(ZLinkActorPacketKind.Send, actor, packetName);
|
|
139
142
|
const message = decode();
|
|
140
143
|
this.options.onHandlerStart?.();
|
|
141
|
-
await this.invokeHandler<
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
144
|
+
await this.invokeHandler<ZLinkSpotActorSendHandler<ZLinkSpot, ZLinkActor, TMessage>, void>(
|
|
145
|
+
actor,
|
|
146
|
+
descriptor,
|
|
147
|
+
(handler) =>
|
|
148
|
+
runActorHandlerWithDeferredJoins(() =>
|
|
149
|
+
handler.handle(
|
|
150
|
+
this.options.spot,
|
|
151
|
+
actor,
|
|
152
|
+
this.createContext(packetName, context),
|
|
153
|
+
message
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
);
|
|
152
157
|
});
|
|
153
158
|
}
|
|
154
159
|
|
|
@@ -187,8 +192,14 @@ export class ZLinkSpotActorDispatcher {
|
|
|
187
192
|
packetName: string,
|
|
188
193
|
request: TRequest,
|
|
189
194
|
context: Partial<ZLinkMessageContext> = {},
|
|
190
|
-
afterReply: (
|
|
191
|
-
|
|
195
|
+
afterReply: (
|
|
196
|
+
reply: TReply,
|
|
197
|
+
options: ZLinkSpotActorReplyOptionsSnapshot
|
|
198
|
+
) => Promise<TResult> | TResult,
|
|
199
|
+
beforeReply?: (
|
|
200
|
+
reply: TReply,
|
|
201
|
+
options: ZLinkSpotActorReplyOptionsSnapshot
|
|
202
|
+
) => Promise<void> | void
|
|
192
203
|
): Promise<TResult> {
|
|
193
204
|
return this.dispatchRequestThenDecoded(
|
|
194
205
|
actor,
|
|
@@ -205,8 +216,14 @@ export class ZLinkSpotActorDispatcher {
|
|
|
205
216
|
packetName: string,
|
|
206
217
|
decode: () => TRequest,
|
|
207
218
|
context: Partial<ZLinkMessageContext> = {},
|
|
208
|
-
afterReply: (
|
|
209
|
-
|
|
219
|
+
afterReply: (
|
|
220
|
+
reply: TReply,
|
|
221
|
+
options: ZLinkSpotActorReplyOptionsSnapshot
|
|
222
|
+
) => Promise<TResult> | TResult,
|
|
223
|
+
beforeReply?: (
|
|
224
|
+
reply: TReply,
|
|
225
|
+
options: ZLinkSpotActorReplyOptionsSnapshot
|
|
226
|
+
) => Promise<void> | void
|
|
210
227
|
): Promise<TResult> {
|
|
211
228
|
return this.execute(async () => {
|
|
212
229
|
const descriptor = this.requirePacket(ZLinkActorPacketKind.Request, actor, packetName);
|
|
@@ -217,23 +234,27 @@ export class ZLinkSpotActorDispatcher {
|
|
|
217
234
|
TResult
|
|
218
235
|
>(actor, descriptor, (handler) =>
|
|
219
236
|
runActorHandlerWithDeferredJoins(
|
|
220
|
-
() =>
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
237
|
+
() =>
|
|
238
|
+
handler.handle(
|
|
239
|
+
this.options.spot,
|
|
240
|
+
actor,
|
|
241
|
+
this.createContext(packetName, context),
|
|
242
|
+
request
|
|
243
|
+
),
|
|
244
|
+
(reply) =>
|
|
245
|
+
afterReply(reply, {
|
|
246
|
+
metadata: new Map<string, string>(),
|
|
247
|
+
compressPayload: false
|
|
248
|
+
}),
|
|
230
249
|
beforeReply === undefined
|
|
231
250
|
? undefined
|
|
232
|
-
: (reply) =>
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
251
|
+
: (reply) =>
|
|
252
|
+
beforeReply(reply, {
|
|
253
|
+
metadata: new Map<string, string>(),
|
|
254
|
+
compressPayload: false
|
|
255
|
+
})
|
|
256
|
+
)
|
|
257
|
+
);
|
|
237
258
|
});
|
|
238
259
|
}
|
|
239
260
|
|
|
@@ -268,10 +289,7 @@ export class ZLinkSpotActorDispatcher {
|
|
|
268
289
|
});
|
|
269
290
|
}
|
|
270
291
|
|
|
271
|
-
commitActorJoin(
|
|
272
|
-
actor: ZLinkActor,
|
|
273
|
-
commit: () => Promise<void> | void
|
|
274
|
-
): Promise<void> {
|
|
292
|
+
commitActorJoin(actor: ZLinkActor, commit: () => Promise<void> | void): Promise<void> {
|
|
275
293
|
return this.execute(async () => {
|
|
276
294
|
await commit();
|
|
277
295
|
await this.options.spot.onJoinedActor(actor);
|
|
@@ -297,7 +315,9 @@ export class ZLinkSpotActorDispatcher {
|
|
|
297
315
|
): ZLinkActorPacketDescriptor {
|
|
298
316
|
const descriptor = this.options.registry.resolvePacket(kind, actor, packetName);
|
|
299
317
|
if (descriptor === undefined) {
|
|
300
|
-
throw actorDispatchHandlerNotFound(
|
|
318
|
+
throw actorDispatchHandlerNotFound(
|
|
319
|
+
`No Spot actor ${kind} handler is registered for '${packetName}'.`
|
|
320
|
+
);
|
|
301
321
|
}
|
|
302
322
|
this.ensureActorType(descriptor, actor);
|
|
303
323
|
return descriptor;
|
|
@@ -329,8 +349,9 @@ export class ZLinkSpotActorDispatcher {
|
|
|
329
349
|
}
|
|
330
350
|
|
|
331
351
|
private execute<T>(operation: () => Promise<T> | T): Promise<T> {
|
|
332
|
-
const pending =
|
|
333
|
-
|
|
352
|
+
const pending =
|
|
353
|
+
this.options.serial?.execute(operation, this.options.serialWorkOptions) ??
|
|
354
|
+
Promise.resolve().then(operation);
|
|
334
355
|
this.options.onAdmitted?.();
|
|
335
356
|
return pending;
|
|
336
357
|
}
|
|
@@ -350,7 +371,11 @@ export class ZLinkSpotActorDispatcher {
|
|
|
350
371
|
}
|
|
351
372
|
}
|
|
352
373
|
|
|
353
|
-
function packetKey(
|
|
374
|
+
function packetKey(
|
|
375
|
+
kind: ZLinkActorPacketKind,
|
|
376
|
+
actorType: Type<ZLinkActor>,
|
|
377
|
+
packetName: string
|
|
378
|
+
): string {
|
|
354
379
|
return `${kind}:${actorType.name}:${packetName}`;
|
|
355
380
|
}
|
|
356
381
|
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { ZLinkActor } from '../../contracts';
|
|
2
|
-
import type {
|
|
3
|
-
ZLinkBackendActorRef,
|
|
4
|
-
ZLinkBackendMeshNode
|
|
5
|
-
} from '../backend/contracts';
|
|
2
|
+
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
6
3
|
import { closeMeshCompletion } from '../backend';
|
|
7
4
|
import { RequestResult } from '../backend/runtime-values';
|
|
8
5
|
import type { ZLinkActorManagerOptions } from './actor-runtime-contracts';
|
|
@@ -60,8 +57,9 @@ export class ZLinkTransferredActorRollbackCoordinator {
|
|
|
60
57
|
if (this.tasks.has(actor.context.actorId)) {
|
|
61
58
|
return;
|
|
62
59
|
}
|
|
63
|
-
const task = this.retry(actor, state, node, actorRef)
|
|
64
|
-
|
|
60
|
+
const task = this.retry(actor, state, node, actorRef).finally(() =>
|
|
61
|
+
this.tasks.delete(actor.context.actorId)
|
|
62
|
+
);
|
|
65
63
|
this.tasks.set(actor.context.actorId, task);
|
|
66
64
|
}
|
|
67
65
|
|
|
@@ -72,8 +70,11 @@ export class ZLinkTransferredActorRollbackCoordinator {
|
|
|
72
70
|
actorRef: ZLinkBackendActorRef | undefined
|
|
73
71
|
): Promise<void> {
|
|
74
72
|
const retryDelay = new ZLinkActorRetryDelay();
|
|
75
|
-
while (
|
|
76
|
-
|
|
73
|
+
while (
|
|
74
|
+
this.states.get(actor.context.actorId) === state &&
|
|
75
|
+
this.options.shutdownSignal?.aborted !== true
|
|
76
|
+
) {
|
|
77
|
+
if (!(await retryDelay.wait(this.options.shutdownSignal))) return;
|
|
77
78
|
try {
|
|
78
79
|
if (node !== undefined && actorRef !== undefined) {
|
|
79
80
|
await this.destroyNativeActor(node, actorRef);
|
|
@@ -95,11 +96,15 @@ export class ZLinkTransferredActorRollbackCoordinator {
|
|
|
95
96
|
if (completions === undefined) {
|
|
96
97
|
throw new Error('Actor rollback requires a running MeshNode completion table.');
|
|
97
98
|
}
|
|
98
|
-
const completion = await completions.submit(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
const completion = await completions.submit(
|
|
100
|
+
() =>
|
|
101
|
+
node.destroyActor({
|
|
102
|
+
nodeRid: actorRef.nodeRid,
|
|
103
|
+
actorId: actorRef.actorId,
|
|
104
|
+
generation: actorRef.generation
|
|
105
|
+
}),
|
|
106
|
+
signal
|
|
107
|
+
);
|
|
103
108
|
try {
|
|
104
109
|
if (completion.terminalResult !== RequestResult.Ok) {
|
|
105
110
|
throw new Error(
|