@zlink-systems/framework 0.21.0 → 0.23.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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- 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 +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- 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 +160 -130
- 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/contracts/index.d.ts +1 -0
- 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.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- 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 +12 -20
- 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 +46 -42
- 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.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- 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/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- 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 -27
- 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.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- 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-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- 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 +245 -228
- 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/protocol/service_wire_pilot_codec.generated.js +20 -18
- 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 +209 -220
- 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.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -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 +79 -86
- 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 +17 -15
- 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 +2 -3
- 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 +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- 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.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- 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 +2 -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 +2 -2
- 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 +142 -134
- 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 +1 -32
- 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 +353 -326
- 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 +77 -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 +370 -390
- 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 +44 -44
- 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 +218 -206
- 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 +12 -47
- 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/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- 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 +107 -79
- 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 -55
- 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 +364 -396
- 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 +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -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 +19 -18
- 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 +595 -564
- 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 +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -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 +235 -222
- 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 +129 -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 +13 -18
- 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 +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- 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 +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -16,7 +16,6 @@ const service_wire_pilot_codec_generated_1 = require("../protocol/service_wire_p
|
|
|
16
16
|
const RETENTION_MS = 24 * 60 * 60 * 1_000;
|
|
17
17
|
const ROOT_VERSION = 2;
|
|
18
18
|
const ROOT_MAGIC = Buffer.from('ZLJR');
|
|
19
|
-
const MAX_ROOT_BYTES = 1024 * 1024;
|
|
20
19
|
const JOURNAL_INVENTORY_DOMAIN = Buffer.from('zlink-node-deferred-join-authority-v1\0', 'utf8');
|
|
21
20
|
/** Identifies whether an authority slot points at a deferred Join journal root. */
|
|
22
21
|
async function isDeferredJoinAcceptedRootPublication(relocation, reference, checksumCrc32c, expected, signal) {
|
|
@@ -28,22 +27,22 @@ async function isDeferredJoinAcceptedRootPublication(relocation, reference, chec
|
|
|
28
27
|
if (hasJournalRootMagic(read.bytes)) {
|
|
29
28
|
try {
|
|
30
29
|
const root = decodeRoot(read.bytes);
|
|
31
|
-
return expected.aggregateId === operationAggregateId(root.operationId)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
return (expected.aggregateId === operationAggregateId(root.operationId) &&
|
|
31
|
+
expected.aggregateGeneration === root.actor.objectGeneration &&
|
|
32
|
+
expected.authorityKey === (0, authority_key_codec_1.encodeAuthorityKey)('actor', root.actor.actorId).value &&
|
|
33
|
+
expected.objectGeneration === root.actor.objectGeneration);
|
|
35
34
|
}
|
|
36
35
|
catch {
|
|
37
36
|
return false;
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
const root = await readCanonicalDeferredJoinRoot(relocation, read.bytes, signal);
|
|
41
|
-
return root !== undefined
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
return (root !== undefined &&
|
|
41
|
+
root.identity.aggregateId === expected.aggregateId &&
|
|
42
|
+
root.identity.aggregateGeneration === expected.aggregateGeneration &&
|
|
43
|
+
root.identity.authorityKey === expected.authorityKey &&
|
|
44
|
+
root.identity.objectKind === expected.objectKind &&
|
|
45
|
+
root.identity.objectGeneration === expected.objectGeneration);
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
48
|
* Keeps a cross-node Accepted Join completion under the Actor authority.
|
|
@@ -90,12 +89,10 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
90
89
|
};
|
|
91
90
|
const initialPublication = decodeAuthorityPublication(read.payload);
|
|
92
91
|
const initialCanonicalIdentity = (0, service_relocation_runtime_1.serviceRelocationAuthoritySlotIdentity)(read.payload);
|
|
93
|
-
const canonicalPublication = initialPublication?.canonical === true
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
&& (canonicalInventoryDigest !== undefined
|
|
98
|
-
|| !canonicalPublication.reference.value.startsWith('zlink-direct:'))
|
|
92
|
+
const canonicalPublication = initialPublication?.canonical === true ? initialPublication : undefined;
|
|
93
|
+
const root = canonicalPublication !== undefined &&
|
|
94
|
+
(canonicalInventoryDigest !== undefined ||
|
|
95
|
+
!canonicalPublication.reference.value.startsWith('zlink-direct:'))
|
|
99
96
|
? await this.storeCanonicalRoot(rootValue, read, canonicalPublication, signal, canonicalInventoryDigest)
|
|
100
97
|
: await this.storeRoot(rootValue, signal);
|
|
101
98
|
if (initialCanonicalIdentity !== undefined && canonicalInventoryDigest !== undefined) {
|
|
@@ -109,8 +106,8 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
109
106
|
const currentPublication = decodeAuthorityPublication(expected.payload);
|
|
110
107
|
const canonicalIdentity = (0, service_relocation_runtime_1.serviceRelocationAuthoritySlotIdentity)(expected.payload);
|
|
111
108
|
const publication = {
|
|
112
|
-
applicationPayload: Buffer.from(currentPublication?.applicationPayload
|
|
113
|
-
|
|
109
|
+
applicationPayload: Buffer.from(currentPublication?.applicationPayload ??
|
|
110
|
+
(0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(expected.payload)),
|
|
114
111
|
reference: root.reference,
|
|
115
112
|
checksumCrc32c: root.checksumCrc32c,
|
|
116
113
|
aggregateId: canonicalIdentity !== undefined
|
|
@@ -157,9 +154,7 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
157
154
|
}
|
|
158
155
|
async recover(actorId, signal) {
|
|
159
156
|
const read = await this.authority.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('actor', actorId), signal);
|
|
160
|
-
return read.kind === 'snapshot'
|
|
161
|
-
? await this.readPublished(read, signal)
|
|
162
|
-
: undefined;
|
|
157
|
+
return read.kind === 'snapshot' ? await this.readPublished(read, signal) : undefined;
|
|
163
158
|
}
|
|
164
159
|
markCommitted(root, actor, signal) {
|
|
165
160
|
if (actor !== undefined)
|
|
@@ -279,12 +274,13 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
279
274
|
let current = await this.readPublished(read, signal);
|
|
280
275
|
if (current === undefined) {
|
|
281
276
|
const retainedRoot = await this.relocation.read(root.reference, signal);
|
|
282
|
-
if (retainedRoot.kind === 'found'
|
|
283
|
-
&& (0, service_relocation_runtime_1.crc32c)(retainedRoot.bytes) === root.checksumCrc32c) {
|
|
277
|
+
if (retainedRoot.kind === 'found' && (0, service_relocation_runtime_1.crc32c)(retainedRoot.bytes) === root.checksumCrc32c) {
|
|
284
278
|
const retained = hasJournalRootMagic(retainedRoot.bytes)
|
|
285
279
|
? decodeRoot(retainedRoot.bytes)
|
|
286
|
-
: (await readCanonicalDeferredJoinRoot(this.relocation, retainedRoot.bytes, signal))
|
|
287
|
-
|
|
280
|
+
: (await readCanonicalDeferredJoinRoot(this.relocation, retainedRoot.bytes, signal))
|
|
281
|
+
?.completion;
|
|
282
|
+
if (retained?.cursor === 'delivered' &&
|
|
283
|
+
isSameOperation({ ...root, ...retained }, root.operationId, root.actor)) {
|
|
288
284
|
current = {
|
|
289
285
|
authority: read,
|
|
290
286
|
reference: root.reference,
|
|
@@ -294,11 +290,11 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
294
290
|
}
|
|
295
291
|
}
|
|
296
292
|
if (current === undefined &&
|
|
297
|
-
next === 'committed'
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.Unavailable, `Actor '${root.actor.actorId}' Join completion delivery is indeterminate: `
|
|
301
|
-
|
|
293
|
+
next === 'committed' &&
|
|
294
|
+
actor !== undefined &&
|
|
295
|
+
authorityMatchesActor(read.payload, actor)) {
|
|
296
|
+
throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.Unavailable, `Actor '${root.actor.actorId}' Join completion delivery is indeterminate: ` +
|
|
297
|
+
'the authority no longer references the operation and no matching retained root exists.');
|
|
302
298
|
}
|
|
303
299
|
if (current === undefined) {
|
|
304
300
|
throw new Error(`Actor '${root.actor.actorId}' no longer references its Join completion root.`);
|
|
@@ -364,12 +360,12 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
364
360
|
if (canonicalPhase === 1 || canonicalPhase === 2)
|
|
365
361
|
return undefined;
|
|
366
362
|
const read = await this.relocation.read(publication.reference, signal);
|
|
367
|
-
if (read.kind !== 'found' &&
|
|
368
|
-
|
|
363
|
+
if (read.kind !== 'found' &&
|
|
364
|
+
publication.canonical === true &&
|
|
365
|
+
publication.reference.value.startsWith('zlink-direct:')) {
|
|
369
366
|
return undefined;
|
|
370
367
|
}
|
|
371
|
-
if (read.kind !== 'found'
|
|
372
|
-
|| (0, service_relocation_runtime_1.crc32c)(read.bytes) !== publication.checksumCrc32c) {
|
|
368
|
+
if (read.kind !== 'found' || (0, service_relocation_runtime_1.crc32c)(read.bytes) !== publication.checksumCrc32c) {
|
|
373
369
|
throw new Error('Published deferred Join completion root is missing or corrupt.');
|
|
374
370
|
}
|
|
375
371
|
if (publication.canonical === true && !hasJournalRootMagic(read.bytes)) {
|
|
@@ -379,9 +375,9 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
379
375
|
// the embedded slot. A root without a completion remains Host-owned.
|
|
380
376
|
return undefined;
|
|
381
377
|
}
|
|
382
|
-
if (root.identity.aggregateId !== publication.aggregateId
|
|
383
|
-
|
|
384
|
-
|
|
378
|
+
if (root.identity.aggregateId !== publication.aggregateId ||
|
|
379
|
+
root.identity.aggregateGeneration !== publication.aggregateGeneration ||
|
|
380
|
+
root.identity.objectGeneration !== authority.objectGeneration) {
|
|
385
381
|
throw new Error('Published deferred Join completion root identity does not match its authority slot.');
|
|
386
382
|
}
|
|
387
383
|
return {
|
|
@@ -407,8 +403,7 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
407
403
|
throw new Error('Relocation Store returned an invalid deferred Join root receipt.');
|
|
408
404
|
}
|
|
409
405
|
const read = await this.relocation.read(stored.reference, signal);
|
|
410
|
-
if (read.kind !== 'found'
|
|
411
|
-
|| !Buffer.from(read.bytes).equals(payload)) {
|
|
406
|
+
if (read.kind !== 'found' || !Buffer.from(read.bytes).equals(payload)) {
|
|
412
407
|
await this.deleteBestEffort(stored.reference);
|
|
413
408
|
throw new Error('Relocation Store failed deferred Join root verification.');
|
|
414
409
|
}
|
|
@@ -429,8 +424,7 @@ class ZLinkDeferredJoinAcceptedJournal {
|
|
|
429
424
|
}
|
|
430
425
|
else {
|
|
431
426
|
const current = await this.relocation.read(publication.reference, signal);
|
|
432
|
-
if (current.kind !== 'found'
|
|
433
|
-
|| (0, service_relocation_runtime_1.crc32c)(current.bytes) !== publication.checksumCrc32c) {
|
|
427
|
+
if (current.kind !== 'found' || (0, service_relocation_runtime_1.crc32c)(current.bytes) !== publication.checksumCrc32c) {
|
|
434
428
|
throw new Error('Canonical relocation manifest is missing or corrupt.');
|
|
435
429
|
}
|
|
436
430
|
inventory = decodeCanonicalTreeManifest(current.bytes).inventoryDigest;
|
|
@@ -463,21 +457,20 @@ function authorityMatchesActor(payload, actor) {
|
|
|
463
457
|
const publication = decodeAuthorityPublication(payload);
|
|
464
458
|
const applications = publication === undefined
|
|
465
459
|
? [(0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(payload)]
|
|
466
|
-
: [
|
|
467
|
-
|
|
468
|
-
(0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(payload)
|
|
469
|
-
];
|
|
470
|
-
return applications.some(application => {
|
|
460
|
+
: [publication.applicationPayload, (0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(payload)];
|
|
461
|
+
return applications.some((application) => {
|
|
471
462
|
const identity = (0, actor_authority_publication_1.decodeRelocatingActorAuthorityIdentity)(application, actor.objectGeneration);
|
|
472
|
-
return identity !== undefined
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
463
|
+
return (identity !== undefined &&
|
|
464
|
+
identity.actor.actorId === actor.actorId &&
|
|
465
|
+
identity.actor.objectGeneration === actor.objectGeneration &&
|
|
466
|
+
(0, routing_id_1.routingIdWireHex)(identity.actor.nodeRid) === (0, routing_id_1.routingIdWireHex)(actor.nodeRid));
|
|
476
467
|
});
|
|
477
468
|
}
|
|
478
469
|
function encodeRoot(value) {
|
|
479
470
|
const nodeRidHex = (0, routing_id_1.routingIdWireHex)(value.actor.nodeRid);
|
|
480
|
-
const encoded = Buffer.concat([
|
|
471
|
+
const encoded = Buffer.concat([
|
|
472
|
+
ROOT_MAGIC,
|
|
473
|
+
Buffer.from(JSON.stringify({
|
|
481
474
|
version: ROOT_VERSION,
|
|
482
475
|
operationHigh: value.operationId.high.toString(),
|
|
483
476
|
operationLow: value.operationId.low.toString(),
|
|
@@ -491,32 +484,28 @@ function encodeRoot(value) {
|
|
|
491
484
|
? {}
|
|
492
485
|
: { replyContentType: value.replyContentType }),
|
|
493
486
|
cursor: value.cursor
|
|
494
|
-
}), 'utf8')
|
|
495
|
-
|
|
496
|
-
throw new Error('Deferred Join completion root exceeds 1 MiB.');
|
|
497
|
-
}
|
|
487
|
+
}), 'utf8')
|
|
488
|
+
]);
|
|
498
489
|
return encoded;
|
|
499
490
|
}
|
|
500
491
|
function decodeRoot(payload) {
|
|
501
|
-
if (payload.byteLength === 0
|
|
502
|
-
throw new Error('Deferred Join completion root
|
|
492
|
+
if (payload.byteLength === 0) {
|
|
493
|
+
throw new Error('Deferred Join completion root is empty.');
|
|
503
494
|
}
|
|
504
495
|
const bytes = Buffer.from(payload);
|
|
505
|
-
const encoded = hasJournalRootMagic(bytes)
|
|
506
|
-
? bytes.subarray(ROOT_MAGIC.byteLength)
|
|
507
|
-
: bytes;
|
|
496
|
+
const encoded = hasJournalRootMagic(bytes) ? bytes.subarray(ROOT_MAGIC.byteLength) : bytes;
|
|
508
497
|
const value = JSON.parse(encoded.toString('utf8'));
|
|
509
|
-
if (value.version !== ROOT_VERSION
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
498
|
+
if (value.version !== ROOT_VERSION ||
|
|
499
|
+
typeof value.operationHigh !== 'string' ||
|
|
500
|
+
typeof value.operationLow !== 'string' ||
|
|
501
|
+
typeof value.actorId !== 'string' ||
|
|
502
|
+
typeof value.actorGeneration !== 'string' ||
|
|
503
|
+
typeof value.actorMeshName !== 'string' ||
|
|
504
|
+
typeof value.actorNodeRid !== 'string' ||
|
|
505
|
+
typeof value.rawReply !== 'string' ||
|
|
506
|
+
(value.replyContentType !== undefined &&
|
|
507
|
+
(typeof value.replyContentType !== 'string' || value.replyContentType.length === 0)) ||
|
|
508
|
+
!isCursor(value.cursor)) {
|
|
520
509
|
throw new Error('Deferred Join completion root is invalid.');
|
|
521
510
|
}
|
|
522
511
|
const rawReply = Buffer.from(value.rawReply, 'base64');
|
|
@@ -576,16 +565,15 @@ function replaceDeferredJoinAuthorityPublication(payload, replacement) {
|
|
|
576
565
|
const codec = new service_relocation_runtime_1.ServiceRelocationAuthorityPayloadCodec();
|
|
577
566
|
const currentPublication = codec.read(payload);
|
|
578
567
|
const replacementPublication = codec.read(replacement);
|
|
579
|
-
if (currentPublication?.canonical === true
|
|
580
|
-
|| replacementPublication?.canonical === true) {
|
|
568
|
+
if (currentPublication?.canonical === true || replacementPublication?.canonical === true) {
|
|
581
569
|
// Canonical authority has exactly one embedded relocation slot. A journal
|
|
582
570
|
// cursor replaces that slot atomically; it must never be wrapped or nested
|
|
583
571
|
// under an older ZLAR/application layer.
|
|
584
572
|
return Buffer.from(replacement);
|
|
585
573
|
}
|
|
586
574
|
const outerApplication = (0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(payload);
|
|
587
|
-
if (!Buffer.from(outerApplication).equals(Buffer.from(payload))
|
|
588
|
-
|
|
575
|
+
if (!Buffer.from(outerApplication).equals(Buffer.from(payload)) &&
|
|
576
|
+
decodeDirectAuthorityPublication(outerApplication) !== undefined) {
|
|
589
577
|
return (0, service_relocation_runtime_1.replaceServiceRelocationAuthorityApplicationPayload)(payload, replacement);
|
|
590
578
|
}
|
|
591
579
|
return decodeDirectAuthorityPublication(payload) === undefined
|
|
@@ -597,8 +585,8 @@ function decodeDirectAuthorityPublication(payload) {
|
|
|
597
585
|
if (publication === undefined)
|
|
598
586
|
return undefined;
|
|
599
587
|
const applicationPayload = (0, service_relocation_runtime_1.serviceRelocationAuthorityApplicationPayload)(payload);
|
|
600
|
-
return publication.canonical === true
|
|
601
|
-
|
|
588
|
+
return publication.canonical === true ||
|
|
589
|
+
publication.inventoryDigest === journalInventoryDigest(applicationPayload)
|
|
602
590
|
? deferredJoinPublication(applicationPayload, publication)
|
|
603
591
|
: undefined;
|
|
604
592
|
}
|
|
@@ -617,8 +605,8 @@ function deferredJoinPublication(applicationPayload, publication) {
|
|
|
617
605
|
}
|
|
618
606
|
function hasJournalRootMagic(payload) {
|
|
619
607
|
const bytes = Buffer.from(payload);
|
|
620
|
-
return bytes.byteLength >= ROOT_MAGIC.byteLength
|
|
621
|
-
|
|
608
|
+
return (bytes.byteLength >= ROOT_MAGIC.byteLength &&
|
|
609
|
+
bytes.subarray(0, ROOT_MAGIC.byteLength).equals(ROOT_MAGIC));
|
|
622
610
|
}
|
|
623
611
|
function journalInventoryDigest(applicationPayload) {
|
|
624
612
|
return (0, node_crypto_1.createHash)('sha256')
|
|
@@ -628,10 +616,10 @@ function journalInventoryDigest(applicationPayload) {
|
|
|
628
616
|
}
|
|
629
617
|
function operationAggregateId(operationId) {
|
|
630
618
|
const encoded = [operationId.high, operationId.low]
|
|
631
|
-
.map(value => BigInt.asUintN(64, value).toString(16).padStart(16, '0'))
|
|
619
|
+
.map((value) => BigInt.asUintN(64, value).toString(16).padStart(16, '0'))
|
|
632
620
|
.join('');
|
|
633
|
-
return `${encoded.slice(0, 8)}-${encoded.slice(8, 12)}-${encoded.slice(12, 16)}`
|
|
634
|
-
|
|
621
|
+
return (`${encoded.slice(0, 8)}-${encoded.slice(8, 12)}-${encoded.slice(12, 16)}` +
|
|
622
|
+
`-${encoded.slice(16, 20)}-${encoded.slice(20)}`);
|
|
635
623
|
}
|
|
636
624
|
function requireCanonicalAggregateGeneration(value) {
|
|
637
625
|
if (value === 0n) {
|
|
@@ -655,8 +643,7 @@ function decodeCanonicalTreeManifest(payload) {
|
|
|
655
643
|
if (chunks.length === 0) {
|
|
656
644
|
throw new Error('Canonical relocation chunk count is invalid.');
|
|
657
645
|
}
|
|
658
|
-
if (chunks.reduce((total, value) => total + value.length, 0n)
|
|
659
|
-
!== generated.totalLength) {
|
|
646
|
+
if (chunks.reduce((total, value) => total + value.length, 0n) !== generated.totalLength) {
|
|
660
647
|
throw new Error('Canonical relocation manifest length is invalid.');
|
|
661
648
|
}
|
|
662
649
|
return {
|
|
@@ -679,12 +666,14 @@ async function storeCanonicalTree(store, logicalRoot, inventoryDigest, signal) {
|
|
|
679
666
|
totalLength: BigInt(logical.byteLength),
|
|
680
667
|
totalChecksumCrc32c: logicalChecksumCrc32c,
|
|
681
668
|
inventoryDigestSha256: Buffer.from(inventoryDigest),
|
|
682
|
-
chunks: [
|
|
669
|
+
chunks: [
|
|
670
|
+
{
|
|
683
671
|
order: 0,
|
|
684
672
|
reference: storedChunk.reference.value,
|
|
685
673
|
length: BigInt(logical.byteLength),
|
|
686
674
|
checksumCrc32c: logicalChecksumCrc32c
|
|
687
|
-
}
|
|
675
|
+
}
|
|
676
|
+
]
|
|
688
677
|
}));
|
|
689
678
|
const storedManifest = await putAndVerifyCanonicalBlob(store, manifest, signal);
|
|
690
679
|
return {
|
|
@@ -715,8 +704,7 @@ async function readCanonicalDeferredJoinRoot(store, manifestPayload, signal) {
|
|
|
715
704
|
if (read.kind !== 'found')
|
|
716
705
|
throw new Error('Canonical relocation chunk is missing.');
|
|
717
706
|
const chunk = (0, service_wire_pilot_codec_generated_1.decodeRelocationDataChunkV1)(read.bytes);
|
|
718
|
-
if (chunk.order !== expected.order
|
|
719
|
-
|| BigInt(chunk.data.byteLength) !== expected.length) {
|
|
707
|
+
if (chunk.order !== expected.order || BigInt(chunk.data.byteLength) !== expected.length) {
|
|
720
708
|
throw new Error('Canonical relocation chunk identity is invalid.');
|
|
721
709
|
}
|
|
722
710
|
const data = Buffer.from(chunk.data);
|
|
@@ -726,8 +714,8 @@ async function readCanonicalDeferredJoinRoot(store, manifestPayload, signal) {
|
|
|
726
714
|
parts.push(data);
|
|
727
715
|
}
|
|
728
716
|
const logical = Buffer.concat(parts);
|
|
729
|
-
if (BigInt(logical.byteLength) !== manifest.logicalLength
|
|
730
|
-
|
|
717
|
+
if (BigInt(logical.byteLength) !== manifest.logicalLength ||
|
|
718
|
+
(0, service_relocation_runtime_1.crc32c)(logical) !== manifest.logicalChecksumCrc32c) {
|
|
731
719
|
throw new Error('Canonical relocation logical root checksum is invalid.');
|
|
732
720
|
}
|
|
733
721
|
return decodeCanonicalDeferredJoinRoot(logical);
|
|
@@ -736,11 +724,21 @@ function encodeCanonicalDeferredJoinRoot(value, authority, publication, inventor
|
|
|
736
724
|
const key = (0, authority_key_codec_1.encodeAuthorityKey)('actor', value.actor.actorId).value;
|
|
737
725
|
const completion = encodeDotNetDeferredJoinCompletion(value);
|
|
738
726
|
return Buffer.concat([
|
|
739
|
-
u32le(0x5a4c5231),
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
u64le(
|
|
743
|
-
|
|
727
|
+
u32le(0x5a4c5231),
|
|
728
|
+
u16le(2),
|
|
729
|
+
dotNetGuidBytes(publication.aggregateId),
|
|
730
|
+
u64le(publication.aggregateGeneration),
|
|
731
|
+
bytes32le(inventoryDigest),
|
|
732
|
+
u32le(1),
|
|
733
|
+
text16le(key),
|
|
734
|
+
Buffer.of(1),
|
|
735
|
+
u64le(authority.objectGeneration),
|
|
736
|
+
u64le(authority.authorityOwnerGeneration),
|
|
737
|
+
bytes32le(Buffer.alloc(0)),
|
|
738
|
+
u32le(0),
|
|
739
|
+
u32le(0),
|
|
740
|
+
bytes32le(Buffer.alloc(0)),
|
|
741
|
+
bytes32le(completion)
|
|
744
742
|
]);
|
|
745
743
|
}
|
|
746
744
|
function decodeCanonicalDeferredJoinRoot(payload) {
|
|
@@ -790,9 +788,8 @@ function decodeCanonicalDeferredJoinRoot(payload) {
|
|
|
790
788
|
throw new Error('Canonical relocation root has trailing bytes.');
|
|
791
789
|
if (completion === undefined || completionIdentity === undefined)
|
|
792
790
|
return undefined;
|
|
793
|
-
if (completion.actor.objectGeneration !== completionIdentity.objectGeneration
|
|
794
|
-
|
|
795
|
-
!== completionIdentity.authorityKey) {
|
|
791
|
+
if (completion.actor.objectGeneration !== completionIdentity.objectGeneration ||
|
|
792
|
+
(0, authority_key_codec_1.encodeAuthorityKey)('actor', completion.actor.actorId).value !== completionIdentity.authorityKey) {
|
|
796
793
|
return undefined;
|
|
797
794
|
}
|
|
798
795
|
return {
|
|
@@ -807,9 +804,15 @@ function decodeCanonicalDeferredJoinRoot(payload) {
|
|
|
807
804
|
function encodeDotNetDeferredJoinCompletion(value) {
|
|
808
805
|
const routingId = Buffer.from((0, routing_id_1.encodeRoutingIdStorageHex)(value.actor.nodeRid), 'hex');
|
|
809
806
|
return Buffer.concat([
|
|
810
|
-
u32le(0x5a4c4a43),
|
|
811
|
-
|
|
812
|
-
text16le(value.actor.
|
|
807
|
+
u32le(0x5a4c4a43),
|
|
808
|
+
Buffer.of(2),
|
|
809
|
+
text16le(value.actor.actorId),
|
|
810
|
+
u64le(value.actor.objectGeneration),
|
|
811
|
+
u64le(value.operationId.high),
|
|
812
|
+
u64le(value.operationId.low),
|
|
813
|
+
text16le(value.actor.meshName),
|
|
814
|
+
Buffer.of(routingId.byteLength),
|
|
815
|
+
routingId,
|
|
813
816
|
u64le(value.actor.objectGeneration),
|
|
814
817
|
Buffer.of(value.replyContentType === undefined ? 0 : 1),
|
|
815
818
|
...(value.replyContentType === undefined ? [] : [text16le(value.replyContentType)]),
|
|
@@ -856,8 +859,12 @@ function decodeDotNetDeferredJoinCompletion(payload) {
|
|
|
856
859
|
class LittleEndianReader {
|
|
857
860
|
offset = 0;
|
|
858
861
|
bytes;
|
|
859
|
-
constructor(payload) {
|
|
860
|
-
|
|
862
|
+
constructor(payload) {
|
|
863
|
+
this.bytes = Buffer.from(payload);
|
|
864
|
+
}
|
|
865
|
+
get done() {
|
|
866
|
+
return this.offset === this.bytes.byteLength;
|
|
867
|
+
}
|
|
861
868
|
take(length) {
|
|
862
869
|
if (length < 0 || this.offset + length > this.bytes.byteLength) {
|
|
863
870
|
throw new Error('Canonical relocation root is truncated.');
|
|
@@ -866,22 +873,40 @@ class LittleEndianReader {
|
|
|
866
873
|
this.offset += length;
|
|
867
874
|
return result;
|
|
868
875
|
}
|
|
869
|
-
u8() {
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
876
|
+
u8() {
|
|
877
|
+
return this.take(1)[0];
|
|
878
|
+
}
|
|
879
|
+
u16() {
|
|
880
|
+
return this.take(2).readUInt16LE();
|
|
881
|
+
}
|
|
882
|
+
u32() {
|
|
883
|
+
return this.take(4).readUInt32LE();
|
|
884
|
+
}
|
|
885
|
+
u64() {
|
|
886
|
+
return this.take(8).readBigUInt64LE();
|
|
887
|
+
}
|
|
888
|
+
i64() {
|
|
889
|
+
return this.take(8).readBigInt64LE();
|
|
890
|
+
}
|
|
874
891
|
text16() {
|
|
875
892
|
const bytes = this.take(this.u16());
|
|
876
893
|
return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
877
894
|
}
|
|
878
|
-
bytes32() {
|
|
895
|
+
bytes32() {
|
|
896
|
+
return this.take(this.u32());
|
|
897
|
+
}
|
|
879
898
|
}
|
|
880
899
|
function dotNetGuidBytes(value) {
|
|
881
900
|
const bytes = Buffer.from(value.replaceAll('-', ''), 'hex');
|
|
882
901
|
return Buffer.from([
|
|
883
|
-
bytes[3],
|
|
884
|
-
bytes[
|
|
902
|
+
bytes[3],
|
|
903
|
+
bytes[2],
|
|
904
|
+
bytes[1],
|
|
905
|
+
bytes[0],
|
|
906
|
+
bytes[5],
|
|
907
|
+
bytes[4],
|
|
908
|
+
bytes[7],
|
|
909
|
+
bytes[6],
|
|
885
910
|
...bytes.subarray(8)
|
|
886
911
|
]);
|
|
887
912
|
}
|
|
@@ -891,13 +916,18 @@ function canonicalUuidFromDotNetBytes(value) {
|
|
|
891
916
|
throw new TypeError('Canonical relocation aggregate id is invalid.');
|
|
892
917
|
}
|
|
893
918
|
const canonical = Buffer.from([
|
|
894
|
-
bytes[3],
|
|
895
|
-
bytes[
|
|
896
|
-
bytes[
|
|
919
|
+
bytes[3],
|
|
920
|
+
bytes[2],
|
|
921
|
+
bytes[1],
|
|
922
|
+
bytes[0],
|
|
923
|
+
bytes[5],
|
|
924
|
+
bytes[4],
|
|
925
|
+
bytes[7],
|
|
926
|
+
bytes[6],
|
|
897
927
|
...bytes.subarray(8)
|
|
898
928
|
]).toString('hex');
|
|
899
|
-
return `${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}`
|
|
900
|
-
|
|
929
|
+
return (`${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}` +
|
|
930
|
+
`-${canonical.slice(16, 20)}-${canonical.slice(20)}`);
|
|
901
931
|
}
|
|
902
932
|
function text16le(value) {
|
|
903
933
|
const bytes = Buffer.from(value, 'utf8');
|
|
@@ -924,10 +954,10 @@ function u64le(value) {
|
|
|
924
954
|
return result;
|
|
925
955
|
}
|
|
926
956
|
function validateIdentity(actorId, operationId, actor) {
|
|
927
|
-
if (actorId.length === 0
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
957
|
+
if (actorId.length === 0 ||
|
|
958
|
+
actor.actorId !== actorId ||
|
|
959
|
+
actor.objectGeneration <= 0n ||
|
|
960
|
+
(operationId.high === 0n && operationId.low === 0n)) {
|
|
931
961
|
throw new Error('Deferred Join completion identity is invalid.');
|
|
932
962
|
}
|
|
933
963
|
}
|
|
@@ -937,17 +967,17 @@ function requireSameOperation(root, operationId, actor) {
|
|
|
937
967
|
}
|
|
938
968
|
}
|
|
939
969
|
function isSameOperation(root, operationId, actor) {
|
|
940
|
-
return root.operationId.high === operationId.high
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
970
|
+
return (root.operationId.high === operationId.high &&
|
|
971
|
+
root.operationId.low === operationId.low &&
|
|
972
|
+
root.actor.actorId === actor.actorId &&
|
|
973
|
+
root.actor.objectGeneration === actor.objectGeneration);
|
|
944
974
|
}
|
|
945
975
|
function requireSameActor(root, actor) {
|
|
946
|
-
if (root.actor.actorId !== actor.actorId
|
|
947
|
-
|
|
948
|
-
throw new Error('Deferred Join completion generation fence is stale '
|
|
949
|
-
|
|
950
|
-
|
|
976
|
+
if (root.actor.actorId !== actor.actorId ||
|
|
977
|
+
root.actor.objectGeneration !== actor.objectGeneration) {
|
|
978
|
+
throw new Error('Deferred Join completion generation fence is stale ' +
|
|
979
|
+
`(root ${root.actor.actorId}/${root.actor.objectGeneration}, ` +
|
|
980
|
+
`actor ${actor.actorId}/${actor.objectGeneration}).`);
|
|
951
981
|
}
|
|
952
982
|
}
|
|
953
983
|
function cursorIndex(cursor) {
|
|
@@ -406,9 +406,7 @@ class DefaultZLinkActorManager {
|
|
|
406
406
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, `Actor '${actor.context.actorId}' must leave its current SPOT before destroy.`);
|
|
407
407
|
}
|
|
408
408
|
const destroyTask = state.getOrStartDestroy(entryNodeRid, async (actorRef) => {
|
|
409
|
-
const destroyedActorRef = actorRef === undefined
|
|
410
|
-
? undefined
|
|
411
|
-
: (0, actor_runtime_state_2.toFrameworkActorRef)(actorRef, state.meshName ?? '');
|
|
409
|
+
const destroyedActorRef = actorRef === undefined ? undefined : (0, actor_runtime_state_2.toFrameworkActorRef)(actorRef, state.meshName ?? '');
|
|
412
410
|
if (actorRef !== undefined) {
|
|
413
411
|
await node.destroyActor(actorRef, 0, destroySignal);
|
|
414
412
|
state.markNativeActorDestroyed(actorRef);
|
|
@@ -541,8 +539,7 @@ class DefaultZLinkActorManager {
|
|
|
541
539
|
actorId: state.actorId,
|
|
542
540
|
objectGeneration: 1n,
|
|
543
541
|
meshName: state.meshName ?? '',
|
|
544
|
-
nodeRid: this.options.actorCreatedNodeRidProvider?.()
|
|
545
|
-
?? 'local'
|
|
542
|
+
nodeRid: this.options.actorCreatedNodeRidProvider?.() ?? 'local'
|
|
546
543
|
};
|
|
547
544
|
}
|
|
548
545
|
}
|
|
@@ -20,8 +20,7 @@ class ZLinkPostCommitActorBinder {
|
|
|
20
20
|
if (existing !== undefined)
|
|
21
21
|
return existing;
|
|
22
22
|
let task;
|
|
23
|
-
task = this.run(actorRef.actorId)
|
|
24
|
-
.finally(async () => await this.lane.run(() => {
|
|
23
|
+
task = this.run(actorRef.actorId).finally(async () => await this.lane.run(() => {
|
|
25
24
|
if (this.tasks.get(actorRef.actorId) === task) {
|
|
26
25
|
this.tasks.delete(actorRef.actorId);
|
|
27
26
|
}
|
|
@@ -48,15 +47,13 @@ class ZLinkPostCommitActorBinder {
|
|
|
48
47
|
}
|
|
49
48
|
catch (error) {
|
|
50
49
|
this.options.reportError?.(error);
|
|
51
|
-
if (!await retryDelay.wait(signal))
|
|
50
|
+
if (!(await retryDelay.wait(signal)))
|
|
52
51
|
return;
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
signal() {
|
|
57
|
-
return typeof this.options.signal === 'function'
|
|
58
|
-
? this.options.signal()
|
|
59
|
-
: this.options.signal;
|
|
56
|
+
return typeof this.options.signal === 'function' ? this.options.signal() : this.options.signal;
|
|
60
57
|
}
|
|
61
58
|
completeBindCore(actorId, actorRef) {
|
|
62
59
|
if (this.desiredRefs.get(actorId) !== actorRef)
|
|
@@ -50,9 +50,9 @@ class ZLinkSpotActorHandlerRegistryRuntime {
|
|
|
50
50
|
return wildcard;
|
|
51
51
|
}
|
|
52
52
|
for (const descriptor of this.packets.values()) {
|
|
53
|
-
if (descriptor.kind === kind
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
if (descriptor.kind === kind &&
|
|
54
|
+
descriptor.packetName === packetName &&
|
|
55
|
+
actor instanceof descriptor.actorType) {
|
|
56
56
|
return descriptor;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -154,8 +154,8 @@ class ZLinkSpotActorDispatcher {
|
|
|
154
154
|
return await (0, handler_instance_scope_1.runWithLifecycleHandler)(actor, descriptor.handlerType, this.options.providerResolver, (resolved) => callback(resolved));
|
|
155
155
|
}
|
|
156
156
|
execute(operation) {
|
|
157
|
-
const pending = this.options.serial?.execute(operation, this.options.serialWorkOptions)
|
|
158
|
-
|
|
157
|
+
const pending = this.options.serial?.execute(operation, this.options.serialWorkOptions) ??
|
|
158
|
+
Promise.resolve().then(operation);
|
|
159
159
|
this.options.onAdmitted?.();
|
|
160
160
|
return pending;
|
|
161
161
|
}
|
|
@@ -38,14 +38,14 @@ class ZLinkTransferredActorRollbackCoordinator {
|
|
|
38
38
|
if (this.tasks.has(actor.context.actorId)) {
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
|
-
const task = this.retry(actor, state, node, actorRef)
|
|
42
|
-
.finally(() => this.tasks.delete(actor.context.actorId));
|
|
41
|
+
const task = this.retry(actor, state, node, actorRef).finally(() => this.tasks.delete(actor.context.actorId));
|
|
43
42
|
this.tasks.set(actor.context.actorId, task);
|
|
44
43
|
}
|
|
45
44
|
async retry(actor, state, node, actorRef) {
|
|
46
45
|
const retryDelay = new actor_retry_delay_1.ZLinkActorRetryDelay();
|
|
47
|
-
while (this.states.get(actor.context.actorId) === state &&
|
|
48
|
-
|
|
46
|
+
while (this.states.get(actor.context.actorId) === state &&
|
|
47
|
+
this.options.shutdownSignal?.aborted !== true) {
|
|
48
|
+
if (!(await retryDelay.wait(this.options.shutdownSignal)))
|
|
49
49
|
return;
|
|
50
50
|
try {
|
|
51
51
|
if (node !== undefined && actorRef !== undefined) {
|