@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
|
@@ -17,6 +17,7 @@ exports.DEFAULT_ZLINK_DIAGNOSTICS = {
|
|
|
17
17
|
};
|
|
18
18
|
const telemetryLogger = api_logs_1.logs.getLogger('@zlink-systems/framework');
|
|
19
19
|
const telemetryTracer = api_1.trace.getTracer('@zlink-systems/framework');
|
|
20
|
+
const ERROR_MESSAGE_MAX_LENGTH = 512;
|
|
20
21
|
let diagnosticsGeneration = 0n;
|
|
21
22
|
function effectiveMessageFlow(ctx) {
|
|
22
23
|
return ctx.liveMode.mode;
|
|
@@ -34,10 +35,10 @@ function createDiagnosticsContext(dispatch, _providerResolver, liveMode) {
|
|
|
34
35
|
function requiredMode(outcome, result) {
|
|
35
36
|
// succeeded가 아닌 terminal은 Errors level에서도 보여야 한다 — 기록 범위 설정
|
|
36
37
|
// 절의 level 규칙.
|
|
37
|
-
return outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
return outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped ||
|
|
39
|
+
outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Backpressured ||
|
|
40
|
+
outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error ||
|
|
41
|
+
(result !== undefined && result !== 'succeeded')
|
|
41
42
|
? 'errors'
|
|
42
43
|
: 'normal';
|
|
43
44
|
}
|
|
@@ -46,7 +47,9 @@ function flowIfEnabled(flow, outcome, result, flowId, sourceMeshGeneration) {
|
|
|
46
47
|
return undefined;
|
|
47
48
|
return typeof flow.begin === 'function'
|
|
48
49
|
? flow.begin(outcome, result, flowId, sourceMeshGeneration)
|
|
49
|
-
: flow.accepts(outcome)
|
|
50
|
+
: flow.accepts(outcome)
|
|
51
|
+
? flow
|
|
52
|
+
: undefined;
|
|
50
53
|
}
|
|
51
54
|
class ZLinkMessageFlowTracer {
|
|
52
55
|
ctx;
|
|
@@ -79,17 +82,17 @@ class ZLinkMessageFlowTracer {
|
|
|
79
82
|
}
|
|
80
83
|
switch (mode) {
|
|
81
84
|
case 'errors':
|
|
82
|
-
return this.errorsTracePoint ??= {
|
|
83
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'errors')
|
|
84
|
-
};
|
|
85
|
+
return (this.errorsTracePoint ??= {
|
|
86
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'errors')
|
|
87
|
+
});
|
|
85
88
|
case 'normal':
|
|
86
|
-
return this.normalTracePoint ??= {
|
|
87
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'normal')
|
|
88
|
-
};
|
|
89
|
+
return (this.normalTracePoint ??= {
|
|
90
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'normal')
|
|
91
|
+
});
|
|
89
92
|
case 'detailed':
|
|
90
|
-
return this.detailedTracePoint ??= {
|
|
91
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'detailed')
|
|
92
|
-
};
|
|
93
|
+
return (this.detailedTracePoint ??= {
|
|
94
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'detailed')
|
|
95
|
+
});
|
|
93
96
|
case 'off':
|
|
94
97
|
return undefined;
|
|
95
98
|
}
|
|
@@ -99,8 +102,8 @@ class ZLinkMessageFlowTracer {
|
|
|
99
102
|
}
|
|
100
103
|
trace(flowInput) {
|
|
101
104
|
const effectiveMode = effectiveMessageFlow(this.ctx);
|
|
102
|
-
if (contracts_1.MESSAGE_FLOW_MODE_RANK[effectiveMode]
|
|
103
|
-
|
|
105
|
+
if (contracts_1.MESSAGE_FLOW_MODE_RANK[effectiveMode] <
|
|
106
|
+
contracts_1.MESSAGE_FLOW_MODE_RANK[requiredMode(flowInput.outcome, flowInput.result)])
|
|
104
107
|
return;
|
|
105
108
|
const ambient = (0, flow_context_1.currentFlowContext)();
|
|
106
109
|
const flowId = flowInput.flowId ?? ambient?.flowId;
|
|
@@ -109,12 +112,13 @@ class ZLinkMessageFlowTracer {
|
|
|
109
112
|
this.traceAcceptedAtMode(flowInput, effectiveMode, flowId, ambient?.flowOrigin);
|
|
110
113
|
}
|
|
111
114
|
traceAcceptedAtMode(flowInput, effectiveMode, acceptedFlowId, acceptedFlowOrigin) {
|
|
112
|
-
const ambient =
|
|
115
|
+
const ambient = (0, flow_context_1.currentFlowContext)();
|
|
113
116
|
const flowId = flowInput.flowId ?? acceptedFlowId ?? ambient?.flowId;
|
|
114
117
|
const flowOrigin = flowInput.flowOrigin ?? acceptedFlowOrigin ?? ambient?.flowOrigin;
|
|
115
118
|
const flow = {
|
|
116
119
|
...flowInput,
|
|
117
120
|
...(flowId === undefined ? {} : { flowId, flowOrigin }),
|
|
121
|
+
streamSessionId: flowInput.streamSessionId ?? ambient?.streamSessionId,
|
|
118
122
|
effectiveMode
|
|
119
123
|
};
|
|
120
124
|
this.tracedEvents += 1;
|
|
@@ -126,11 +130,11 @@ class ZLinkMessageFlowTracer {
|
|
|
126
130
|
effectiveMode === 'detailed' ? flow.durationSeconds : undefined));
|
|
127
131
|
}
|
|
128
132
|
acceptsSample(outcome, result, flowId, sourceMeshGeneration) {
|
|
129
|
-
return outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
return (outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped ||
|
|
134
|
+
outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Backpressured ||
|
|
135
|
+
outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error ||
|
|
136
|
+
(result !== undefined && result !== 'succeeded') ||
|
|
137
|
+
this.sample(flowId, sourceMeshGeneration));
|
|
134
138
|
}
|
|
135
139
|
get tracedCount() {
|
|
136
140
|
return this.tracedEvents;
|
|
@@ -144,8 +148,8 @@ class ZLinkMessageFlowTracer {
|
|
|
144
148
|
return true;
|
|
145
149
|
if (rate <= 0.0)
|
|
146
150
|
return false;
|
|
147
|
-
const samplingKey = flowId
|
|
148
|
-
|
|
151
|
+
const samplingKey = flowId ??
|
|
152
|
+
`${sourceMeshGeneration ?? this.ctx.sourceMeshGeneration}:${this.nextSamplingSequence()}`;
|
|
149
153
|
return hashFlowId(samplingKey) / 0x1_0000_0000 < rate;
|
|
150
154
|
}
|
|
151
155
|
nextSamplingSequence() {
|
|
@@ -158,9 +162,7 @@ class ZLinkMessageFlowTracer {
|
|
|
158
162
|
}
|
|
159
163
|
publishToLogger(record) {
|
|
160
164
|
try {
|
|
161
|
-
const severityNumber = record.eventId === 'zlink.dispatch_error'
|
|
162
|
-
? api_logs_1.SeverityNumber.ERROR
|
|
163
|
-
: api_logs_1.SeverityNumber.INFO;
|
|
165
|
+
const severityNumber = record.eventId === 'zlink.dispatch_error' ? api_logs_1.SeverityNumber.ERROR : api_logs_1.SeverityNumber.INFO;
|
|
164
166
|
telemetryLogger.emit({
|
|
165
167
|
eventName: record.eventId,
|
|
166
168
|
timestamp: record.timestamp,
|
|
@@ -232,18 +234,17 @@ function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
|
|
|
232
234
|
targetRid: flow.targetRid,
|
|
233
235
|
serverRid: flow.serverRid,
|
|
234
236
|
flowId: flow.flowId,
|
|
235
|
-
flowOrigin: flow.flowOrigin === undefined
|
|
236
|
-
? undefined
|
|
237
|
-
: FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
|
|
237
|
+
flowOrigin: flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
|
|
238
238
|
spotId: flow.spotId,
|
|
239
239
|
instanceSpotType: flow.instanceSpotType,
|
|
240
240
|
activationState: flow.activationState,
|
|
241
241
|
actorId: flow.actorId,
|
|
242
|
+
streamSessionId: flow.streamSessionId,
|
|
242
243
|
commandId: flow.commandId,
|
|
243
244
|
messageSizeBytes,
|
|
244
245
|
durationSeconds,
|
|
245
246
|
errorType: flow.errorType,
|
|
246
|
-
errorMessage:
|
|
247
|
+
errorMessage: flow.errorMessage,
|
|
247
248
|
errorCauseType: flow.errorCauseType,
|
|
248
249
|
errorCauseMessage: boundedText(flow.errorCauseMessage)
|
|
249
250
|
};
|
|
@@ -279,6 +280,7 @@ function structuredLogAttributes(record) {
|
|
|
279
280
|
instance_spot_type: record.instanceSpotType,
|
|
280
281
|
activation_state: record.activationState,
|
|
281
282
|
actor_id: record.actorId,
|
|
283
|
+
stream_session_id: record.streamSessionId,
|
|
282
284
|
correlation_id: record.correlationId,
|
|
283
285
|
flow_id: record.flowId,
|
|
284
286
|
flow_origin: record.flowOrigin,
|
|
@@ -313,11 +315,15 @@ function structuredLogBodyAttributes(record) {
|
|
|
313
315
|
instance_type: record.instanceSpotType,
|
|
314
316
|
activation_state: record.activationState,
|
|
315
317
|
actor: record.actorId,
|
|
318
|
+
session: record.streamSessionId,
|
|
316
319
|
corr: record.correlationId,
|
|
317
320
|
flow: record.flowId,
|
|
318
321
|
origin: record.flowOrigin,
|
|
319
322
|
outcome: record.outcome,
|
|
320
323
|
reason: record.reason,
|
|
324
|
+
action: record.action,
|
|
325
|
+
error_type: record.errorType,
|
|
326
|
+
error_message: record.errorMessage,
|
|
321
327
|
size: record.messageSizeBytes
|
|
322
328
|
});
|
|
323
329
|
}
|
|
@@ -336,16 +342,26 @@ function compactAttributes(values) {
|
|
|
336
342
|
}
|
|
337
343
|
function messageFlowPhase(outcome) {
|
|
338
344
|
switch (outcome) {
|
|
339
|
-
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Received:
|
|
340
|
-
|
|
341
|
-
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.
|
|
342
|
-
|
|
343
|
-
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.
|
|
344
|
-
|
|
345
|
-
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.
|
|
346
|
-
|
|
347
|
-
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.
|
|
348
|
-
|
|
345
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Received:
|
|
346
|
+
return 'received';
|
|
347
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Admitted:
|
|
348
|
+
return 'admitted';
|
|
349
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dispatched:
|
|
350
|
+
return 'dispatched';
|
|
351
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Completed:
|
|
352
|
+
return 'completed';
|
|
353
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Replied:
|
|
354
|
+
return 'replied';
|
|
355
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped:
|
|
356
|
+
return 'dropped';
|
|
357
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent:
|
|
358
|
+
return 'sent';
|
|
359
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived:
|
|
360
|
+
return 'reply_received';
|
|
361
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Backpressured:
|
|
362
|
+
return 'backpressured';
|
|
363
|
+
case ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error:
|
|
364
|
+
return undefined;
|
|
349
365
|
}
|
|
350
366
|
}
|
|
351
367
|
function messageFlowOutcome(outcome) {
|
|
@@ -413,7 +429,7 @@ function hashFlowId(flowId) {
|
|
|
413
429
|
return hash >>> 0;
|
|
414
430
|
}
|
|
415
431
|
function boundedText(value) {
|
|
416
|
-
return value === undefined ? undefined : value.slice(0,
|
|
432
|
+
return value === undefined ? undefined : value.slice(0, ERROR_MESSAGE_MAX_LENGTH);
|
|
417
433
|
}
|
|
418
434
|
function toSnakeCase(value) {
|
|
419
435
|
return value.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
@@ -100,10 +100,10 @@ class MetricRegistry {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
observe(name, result) {
|
|
103
|
-
if (name === 'zlink.host.application_job_queue.pressure_state'
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
if (name === 'zlink.host.application_job_queue.pressure_state' ||
|
|
104
|
+
name === 'zlink.host.application_job_queue.pressure_transitions' ||
|
|
105
|
+
name === 'zlink.host.application_job_queue.pause_duration' ||
|
|
106
|
+
name === 'zlink.host.application_job_queue.flow_state_config_failures') {
|
|
107
107
|
for (const provider of this.applicationJobQueuePressures) {
|
|
108
108
|
try {
|
|
109
109
|
this.observeApplicationJobQueuePressure(name, provider(), result);
|
|
@@ -114,8 +114,8 @@ class MetricRegistry {
|
|
|
114
114
|
}
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
|
-
if (name.startsWith('zlink.host.core_hwm.')
|
|
118
|
-
|
|
117
|
+
if (name.startsWith('zlink.host.core_hwm.') ||
|
|
118
|
+
name.startsWith('zlink.host.application_job_queue.')) {
|
|
119
119
|
for (const provider of this.hostCapacities) {
|
|
120
120
|
try {
|
|
121
121
|
this.observeHostCapacity(name, provider(), result);
|
|
@@ -215,13 +215,22 @@ class MetricRegistry {
|
|
|
215
215
|
result.observe(nonNegative(snapshot.readyPeers), peer);
|
|
216
216
|
else if (name === 'zlink.mesh_node.channels.ready_members') {
|
|
217
217
|
for (const channel of snapshot.channels) {
|
|
218
|
-
result.observe(nonNegative(channel.readyMembers), {
|
|
218
|
+
result.observe(nonNegative(channel.readyMembers), {
|
|
219
|
+
...mesh,
|
|
220
|
+
channel_name: channel.channelName
|
|
221
|
+
});
|
|
219
222
|
}
|
|
220
223
|
}
|
|
221
224
|
else if (name.startsWith('zlink.object.capacity.')) {
|
|
222
225
|
const field = metricSuffix(name);
|
|
223
|
-
result.observe(capacityValue(snapshot.actorCapacity, field), {
|
|
224
|
-
|
|
226
|
+
result.observe(capacityValue(snapshot.actorCapacity, field), {
|
|
227
|
+
...mesh,
|
|
228
|
+
capacity_scope: 'actor'
|
|
229
|
+
});
|
|
230
|
+
result.observe(capacityValue(snapshot.spotCapacity, field), {
|
|
231
|
+
...mesh,
|
|
232
|
+
capacity_scope: 'spot'
|
|
233
|
+
});
|
|
225
234
|
}
|
|
226
235
|
else if (name.startsWith('zlink.spot.type.capacity.')) {
|
|
227
236
|
const field = metricSuffix(name);
|
|
@@ -80,7 +80,9 @@ class RuntimeEventQueue {
|
|
|
80
80
|
this.abortCleanup = () => signal.removeEventListener('abort', onAbort);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
[Symbol.asyncIterator]() {
|
|
83
|
+
[Symbol.asyncIterator]() {
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
84
86
|
next() {
|
|
85
87
|
if (this.waitersCount === 0) {
|
|
86
88
|
const retained = this.takeRetained();
|
|
@@ -97,7 +99,7 @@ class RuntimeEventQueue {
|
|
|
97
99
|
return Promise.resolve({ done: true, value: undefined });
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
|
-
return new Promise(resolve => {
|
|
102
|
+
return new Promise((resolve) => {
|
|
101
103
|
this.waiters.push(resolve);
|
|
102
104
|
this.waitersCount += 1;
|
|
103
105
|
if (this.hasRetained() || this.closed || this.completeWhenDrained) {
|
|
@@ -205,9 +207,8 @@ class RuntimeEventQueue {
|
|
|
205
207
|
takeRetained() {
|
|
206
208
|
const terminal = this.peekTerminal();
|
|
207
209
|
const intermediate = this.oldestIntermediate();
|
|
208
|
-
if (terminal !== undefined
|
|
209
|
-
|
|
210
|
-
|| terminal.publishOrdinal <= intermediate.publishOrdinal)) {
|
|
210
|
+
if (terminal !== undefined &&
|
|
211
|
+
(intermediate === undefined || terminal.publishOrdinal <= intermediate.publishOrdinal)) {
|
|
211
212
|
return this.takeTerminal();
|
|
212
213
|
}
|
|
213
214
|
if (intermediate === undefined)
|
|
@@ -216,9 +217,7 @@ class RuntimeEventQueue {
|
|
|
216
217
|
return intermediate;
|
|
217
218
|
}
|
|
218
219
|
peekTerminal() {
|
|
219
|
-
return this.terminalCount === 0
|
|
220
|
-
? undefined
|
|
221
|
-
: this.terminalFifo[this.terminalHead];
|
|
220
|
+
return this.terminalCount === 0 ? undefined : this.terminalFifo[this.terminalHead];
|
|
222
221
|
}
|
|
223
222
|
oldestIntermediate() {
|
|
224
223
|
let oldest;
|
|
@@ -264,8 +263,7 @@ class RuntimeEventQueue {
|
|
|
264
263
|
this.terminalFifo.length = 0;
|
|
265
264
|
this.terminalHead = 0;
|
|
266
265
|
}
|
|
267
|
-
else if (this.terminalHead >= 1024
|
|
268
|
-
&& this.terminalHead * 2 >= this.terminalFifo.length) {
|
|
266
|
+
else if (this.terminalHead >= 1024 && this.terminalHead * 2 >= this.terminalFifo.length) {
|
|
269
267
|
this.terminalFifo.splice(0, this.terminalHead);
|
|
270
268
|
this.terminalHead = 0;
|
|
271
269
|
}
|
|
@@ -27,9 +27,12 @@ class ZLinkClientServerRuntimeProjection {
|
|
|
27
27
|
const targets = topology.descriptors.map((descriptor) => ({
|
|
28
28
|
nodeRid: descriptor.serverRoutingId,
|
|
29
29
|
weight: descriptor.weight,
|
|
30
|
-
state: descriptor.state === 'serving'
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
state: descriptor.state === 'serving'
|
|
31
|
+
? contracts_1.ZLinkPeerState.Ready
|
|
32
|
+
: descriptor.state === 'retiring'
|
|
33
|
+
? contracts_1.ZLinkPeerState.Draining
|
|
34
|
+
: descriptor.state === 'preparing'
|
|
35
|
+
? contracts_1.ZLinkPeerState.Connecting
|
|
33
36
|
: contracts_1.ZLinkPeerState.NotConnected,
|
|
34
37
|
unavailableReason: descriptor.state === 'serving' && descriptor.weight > 0
|
|
35
38
|
? undefined
|
|
@@ -37,7 +40,7 @@ class ZLinkClientServerRuntimeProjection {
|
|
|
37
40
|
? contracts_1.ZLinkTopologyReason.Draining
|
|
38
41
|
: contracts_1.ZLinkTopologyReason.NoReadyTarget
|
|
39
42
|
}));
|
|
40
|
-
const readyTargetCount = targets.filter(target => target.state === contracts_1.ZLinkPeerState.Ready && target.weight > 0).length;
|
|
43
|
+
const readyTargetCount = targets.filter((target) => target.state === contracts_1.ZLinkPeerState.Ready && target.weight > 0).length;
|
|
41
44
|
const hostState = this.hostState();
|
|
42
45
|
const isReady = (0, runtime_state_projections_1.topologyRuntimeIsReady)(hostState, readyTargetCount);
|
|
43
46
|
return {
|
|
@@ -137,12 +140,16 @@ class ZLinkFanoutRuntimeProjection {
|
|
|
137
140
|
return this.snapshotCore(channelName);
|
|
138
141
|
}
|
|
139
142
|
snapshotCore(channelName) {
|
|
140
|
-
const publishers = this.requireRuntime()
|
|
141
|
-
.
|
|
143
|
+
const publishers = this.requireRuntime()
|
|
144
|
+
.fanoutTopology(channelName)
|
|
145
|
+
.descriptors.map((descriptor) => ({
|
|
142
146
|
nodeRid: descriptor.publisherRoutingId,
|
|
143
|
-
state: descriptor.state === 'serving'
|
|
144
|
-
|
|
145
|
-
|
|
147
|
+
state: descriptor.state === 'serving'
|
|
148
|
+
? contracts_1.ZLinkPeerState.Ready
|
|
149
|
+
: descriptor.state === 'retiring'
|
|
150
|
+
? contracts_1.ZLinkPeerState.Draining
|
|
151
|
+
: descriptor.state === 'preparing'
|
|
152
|
+
? contracts_1.ZLinkPeerState.Connecting
|
|
146
153
|
: contracts_1.ZLinkPeerState.NotConnected,
|
|
147
154
|
unavailableReason: descriptor.state === 'serving'
|
|
148
155
|
? undefined
|
|
@@ -150,7 +157,7 @@ class ZLinkFanoutRuntimeProjection {
|
|
|
150
157
|
? contracts_1.ZLinkTopologyReason.Draining
|
|
151
158
|
: contracts_1.ZLinkTopologyReason.NoReadyTarget
|
|
152
159
|
}));
|
|
153
|
-
const readyPublisherCount = publishers.filter(publisher => publisher.state === contracts_1.ZLinkPeerState.Ready).length;
|
|
160
|
+
const readyPublisherCount = publishers.filter((publisher) => publisher.state === contracts_1.ZLinkPeerState.Ready).length;
|
|
154
161
|
const hostState = this.hostState();
|
|
155
162
|
const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
|
|
156
163
|
return {
|
|
@@ -137,8 +137,7 @@ function captureZLinkSpotSerialTurn(executor) {
|
|
|
137
137
|
/** Returns the physical Spot owner only while its captured turn owns the gate. */
|
|
138
138
|
function currentZLinkSpotSerialSourceId() {
|
|
139
139
|
const current = spotSerialTurnStorage.getStore();
|
|
140
|
-
if (current === undefined
|
|
141
|
-
|| !current.executor.isActiveTurn(current.turn, current.turnId)) {
|
|
140
|
+
if (current === undefined || !current.executor.isActiveTurn(current.turn, current.turnId)) {
|
|
142
141
|
return undefined;
|
|
143
142
|
}
|
|
144
143
|
return current.executor.sourceSpotId;
|
|
@@ -157,14 +156,16 @@ function captureZLinkExecutionTurn() {
|
|
|
157
156
|
}
|
|
158
157
|
return {
|
|
159
158
|
yieldPromise: (pending) => current.turn.yieldPromise(pending),
|
|
160
|
-
post: (callback) => {
|
|
159
|
+
post: (callback) => {
|
|
160
|
+
void current.executor.post(callback);
|
|
161
|
+
}
|
|
161
162
|
};
|
|
162
163
|
}
|
|
163
164
|
function isCurrentZLinkSpotSerialTurn(executor) {
|
|
164
165
|
const current = spotSerialTurnStorage.getStore();
|
|
165
|
-
return current !== undefined
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
return (current !== undefined &&
|
|
167
|
+
current.executor === executor &&
|
|
168
|
+
executor.isActiveTurn(current.turn, current.turnId));
|
|
168
169
|
}
|
|
169
170
|
/**
|
|
170
171
|
* Seals application-lane admission and waits for every active Promise turn to
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkSerialExecutionQueue = exports.ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS = void 0;
|
|
4
4
|
exports.ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS = Object.freeze({
|
|
5
5
|
ownerTimeBudget: 10,
|
|
6
|
-
lifecycleBurstLimit: 8
|
|
6
|
+
lifecycleBurstLimit: 8
|
|
7
7
|
});
|
|
8
8
|
/**
|
|
9
9
|
* One event-loop serial execution queue per Spot, Actor mailbox, or Stream session.
|
|
@@ -80,14 +80,12 @@ class ZLinkSerialExecutionQueue {
|
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
82
|
get hasPendingWork() {
|
|
83
|
-
return this.draining
|
|
84
|
-
|| this.application.records.length > 0
|
|
85
|
-
|| this.lifecycle.records.length > 0;
|
|
83
|
+
return (this.draining || this.application.records.length > 0 || this.lifecycle.records.length > 0);
|
|
86
84
|
}
|
|
87
85
|
whenIdle() {
|
|
88
86
|
if (!this.hasPendingWork)
|
|
89
87
|
return Promise.resolve();
|
|
90
|
-
return new Promise(resolve => this.idleWaiters.push(resolve));
|
|
88
|
+
return new Promise((resolve) => this.idleWaiters.push(resolve));
|
|
91
89
|
}
|
|
92
90
|
/** Stops new submissions while allowing the accepted FIFO to finish. */
|
|
93
91
|
close() {
|
|
@@ -176,8 +174,8 @@ class ZLinkSerialExecutionQueue {
|
|
|
176
174
|
const record = selection.record;
|
|
177
175
|
if (selection.lane === 'lifecycle') {
|
|
178
176
|
const applicationHead = this.application.records[0];
|
|
179
|
-
if (this.application.records.length > 0
|
|
180
|
-
|
|
177
|
+
if (this.application.records.length > 0 &&
|
|
178
|
+
!this.cancelPreparationForRearbitration(applicationHead)) {
|
|
181
179
|
waitingForPreparation = true;
|
|
182
180
|
break;
|
|
183
181
|
}
|
|
@@ -187,8 +185,7 @@ class ZLinkSerialExecutionQueue {
|
|
|
187
185
|
waitingForPreparation = true;
|
|
188
186
|
break;
|
|
189
187
|
}
|
|
190
|
-
if (record.preparationState === 'pending'
|
|
191
|
-
|| record.preparationState === 'canceling') {
|
|
188
|
+
if (record.preparationState === 'pending' || record.preparationState === 'canceling') {
|
|
192
189
|
waitingForPreparation = true;
|
|
193
190
|
break;
|
|
194
191
|
}
|
|
@@ -217,8 +214,8 @@ class ZLinkSerialExecutionQueue {
|
|
|
217
214
|
finally {
|
|
218
215
|
this.draining = false;
|
|
219
216
|
this.claimStartedAt = undefined;
|
|
220
|
-
if (!waitingForPreparation
|
|
221
|
-
|
|
217
|
+
if (!waitingForPreparation &&
|
|
218
|
+
(this.application.records.length > 0 || this.lifecycle.records.length > 0)) {
|
|
222
219
|
this.scheduleDrain();
|
|
223
220
|
}
|
|
224
221
|
else {
|
|
@@ -245,9 +242,7 @@ class ZLinkSerialExecutionQueue {
|
|
|
245
242
|
return { lane: 'application', record: this.application.records[0] };
|
|
246
243
|
}
|
|
247
244
|
takeSelected(selection) {
|
|
248
|
-
const record = selection.lane === 'lifecycle'
|
|
249
|
-
? this.takeLifecycle()
|
|
250
|
-
: this.takeApplication();
|
|
245
|
+
const record = selection.lane === 'lifecycle' ? this.takeLifecycle() : this.takeApplication();
|
|
251
246
|
if (record !== selection.record) {
|
|
252
247
|
throw new Error('The selected serial work record changed before owner claim.');
|
|
253
248
|
}
|
|
@@ -255,8 +250,7 @@ class ZLinkSerialExecutionQueue {
|
|
|
255
250
|
}
|
|
256
251
|
takeLifecycle() {
|
|
257
252
|
this.lifecycleStreak += 1;
|
|
258
|
-
if (this.application.records.length > 0
|
|
259
|
-
&& this.lifecycleStreak >= this.lifecycleBurstLimit) {
|
|
253
|
+
if (this.application.records.length > 0 && this.lifecycleStreak >= this.lifecycleBurstLimit) {
|
|
260
254
|
this.lifecycleDebt = true;
|
|
261
255
|
}
|
|
262
256
|
return this.lifecycle.records.shift();
|
|
@@ -286,7 +280,7 @@ class ZLinkSerialExecutionQueue {
|
|
|
286
280
|
}
|
|
287
281
|
record.preparationController = undefined;
|
|
288
282
|
this.scheduleDrain();
|
|
289
|
-
}, error => {
|
|
283
|
+
}, (error) => {
|
|
290
284
|
if (record.preparationState === 'canceling' || controller.signal.aborted) {
|
|
291
285
|
preparation.cancel();
|
|
292
286
|
record.preparationState = 'idle';
|
|
@@ -343,5 +337,5 @@ function validateNonNegative(value, field) {
|
|
|
343
337
|
}
|
|
344
338
|
}
|
|
345
339
|
function macrotaskBoundary() {
|
|
346
|
-
return new Promise(resolve => setImmediate(resolve));
|
|
340
|
+
return new Promise((resolve) => setImmediate(resolve));
|
|
347
341
|
}
|
|
@@ -58,8 +58,8 @@ class ZLinkStateLane {
|
|
|
58
58
|
/** Fails at the recursive call site instead of waiting for this lane's current turn. */
|
|
59
59
|
throwIfReentrant() {
|
|
60
60
|
if (this.isOnLane) {
|
|
61
|
-
throw new Error(
|
|
62
|
-
|
|
61
|
+
throw new Error("This code already runs on the state lane it is trying to enter. Call the component's " +
|
|
62
|
+
'private state method directly instead of re-entering its public surface.');
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
/** Closes admission and waits for work already in the mailbox. */
|
|
@@ -11,7 +11,6 @@ const service_stateful_wire_codec_1 = require("./service-stateful-wire-codec");
|
|
|
11
11
|
const RECOVERY_PACKET_NAME = '__zlink.actor.routed_join.recovery';
|
|
12
12
|
const RECOVERY_CONTENT_TYPE = 'application/x-zlink-actor-routed-join-recovery-v1';
|
|
13
13
|
const MAXIMUM_METADATA_BYTES = 256 * 1024;
|
|
14
|
-
const MAXIMUM_MESSAGE_BYTES = 1024 * 1024;
|
|
15
14
|
const FRAMEWORK_METADATA_UPPER_BOUND_BYTES = 64 * 1024;
|
|
16
15
|
const ACCEPTED_JOURNAL_UPPER_BOUND_BYTES = 16 * 1024 * 1024;
|
|
17
16
|
const SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES = 64 * 1024 * 1024;
|
|
@@ -21,17 +20,26 @@ function canonicalActorJoinHandoffId(input) {
|
|
|
21
20
|
const actor = textBytes(input.actorId, 'actorId');
|
|
22
21
|
if (actor.byteLength > 0xffff)
|
|
23
22
|
throw new RangeError('Actor id exceeds u16 bytes.');
|
|
24
|
-
const digest = (0, node_crypto_1.createHash)('sha256')
|
|
23
|
+
const digest = (0, node_crypto_1.createHash)('sha256')
|
|
24
|
+
.update(Buffer.concat([
|
|
25
25
|
Buffer.from(input.sourceActorNodeRid),
|
|
26
26
|
u16(actor.byteLength),
|
|
27
27
|
actor,
|
|
28
28
|
u64(input.actorGeneration),
|
|
29
29
|
u64(input.sourceActorNodeGeneration),
|
|
30
30
|
u64(input.correlation)
|
|
31
|
-
]))
|
|
31
|
+
]))
|
|
32
|
+
.digest()
|
|
33
|
+
.subarray(0, 16);
|
|
32
34
|
return Buffer.from([
|
|
33
|
-
digest[3],
|
|
34
|
-
digest[
|
|
35
|
+
digest[3],
|
|
36
|
+
digest[2],
|
|
37
|
+
digest[1],
|
|
38
|
+
digest[0],
|
|
39
|
+
digest[5],
|
|
40
|
+
digest[4],
|
|
41
|
+
digest[7],
|
|
42
|
+
digest[6],
|
|
35
43
|
...digest.subarray(8)
|
|
36
44
|
]).toString('hex');
|
|
37
45
|
}
|
|
@@ -42,10 +50,9 @@ function encodeCanonicalActorJoinRecoverySavedWork(input) {
|
|
|
42
50
|
const operationId = input.operationId;
|
|
43
51
|
const reply = operationId === undefined ? Buffer.alloc(0) : Buffer.from(input.reply ?? []);
|
|
44
52
|
const request = Buffer.from(input.request);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const replyContentType = operationId === undefined ? null : requireText(input.replyContentType, 'Actor Join reply content type');
|
|
53
|
+
const replyContentType = operationId === undefined
|
|
54
|
+
? null
|
|
55
|
+
: requireText(input.replyContentType, 'Actor Join reply content type');
|
|
49
56
|
const metadata = encodeMetadataJson({
|
|
50
57
|
Request: {
|
|
51
58
|
ActorId: requireText(input.actorId, 'Actor id'),
|
|
@@ -132,10 +139,10 @@ function decodeCanonicalActorJoinRecoverySavedWork(encoded) {
|
|
|
132
139
|
return undefined;
|
|
133
140
|
}
|
|
134
141
|
const payload = frozen.applicationPayload;
|
|
135
|
-
if (frozen.recordKind !== 1
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
if (frozen.recordKind !== 1 ||
|
|
143
|
+
frozen.sourceKind !== 1 ||
|
|
144
|
+
payload?.packetName !== RECOVERY_PACKET_NAME ||
|
|
145
|
+
payload.contentType !== RECOVERY_CONTENT_TYPE) {
|
|
139
146
|
return undefined;
|
|
140
147
|
}
|
|
141
148
|
throw error;
|
|
@@ -147,8 +154,7 @@ function decodeCanonicalActorJoinRecoverySavedWork(encoded) {
|
|
|
147
154
|
const relocationAggregateId = canonicalUuid(text(requestValue.RelocationAggregateId, 'Request.RelocationAggregateId'));
|
|
148
155
|
const reservationToken = text(requestValue.ReservationToken, 'Request.ReservationToken');
|
|
149
156
|
const reservedPayloadBytes = positiveInteger(requestValue.ReservedPayloadBytes, 'Request.ReservedPayloadBytes');
|
|
150
|
-
if (canonicalUuid(handoffId) !== relocationAggregateId
|
|
151
|
-
|| reservationToken !== handoffId) {
|
|
157
|
+
if (canonicalUuid(handoffId) !== relocationAggregateId || reservationToken !== handoffId) {
|
|
152
158
|
throw new TypeError('Canonical Actor Join recovery reservation identity changed.');
|
|
153
159
|
}
|
|
154
160
|
const request = Buffer.from(record.request);
|
|
@@ -201,9 +207,7 @@ function routingIdBytes(value) {
|
|
|
201
207
|
}
|
|
202
208
|
function encodeMetadataJson(value) {
|
|
203
209
|
const marker = '__zlink_u64__:';
|
|
204
|
-
const encoded = JSON.stringify(value, (_key, item) => typeof item === 'bigint'
|
|
205
|
-
? `${marker}${item.toString()}`
|
|
206
|
-
: item);
|
|
210
|
+
const encoded = JSON.stringify(value, (_key, item) => typeof item === 'bigint' ? `${marker}${item.toString()}` : item);
|
|
207
211
|
return Buffer.from(encoded.replace(new RegExp(`"${marker}(\\d+)"`, 'gu'), '$1'), 'utf8');
|
|
208
212
|
}
|
|
209
213
|
function quoteJsonIntegers(value) {
|
|
@@ -247,23 +251,23 @@ function canonicalUuid(value) {
|
|
|
247
251
|
if (!/^[0-9a-f]{32}$/u.test(hex) || /^0+$/u.test(hex)) {
|
|
248
252
|
throw new TypeError('Actor Join relocation id is invalid.');
|
|
249
253
|
}
|
|
250
|
-
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}`
|
|
251
|
-
|
|
254
|
+
return (`${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}` +
|
|
255
|
+
`-${hex.slice(16, 20)}-${hex.slice(20)}`);
|
|
252
256
|
}
|
|
253
257
|
function predictedRelocationPayloadBytes(requestBytes, relocationContentType) {
|
|
254
258
|
if (!Number.isSafeInteger(requestBytes) || requestBytes < 0) {
|
|
255
259
|
throw new RangeError('Actor Join request size is invalid.');
|
|
256
260
|
}
|
|
257
|
-
if (relocationContentType !== RECREATE_RELOCATION_CONTENT_TYPE
|
|
258
|
-
|
|
261
|
+
if (relocationContentType !== RECREATE_RELOCATION_CONTENT_TYPE &&
|
|
262
|
+
relocationContentType !== SNAPSHOT_RELOCATION_CONTENT_TYPE) {
|
|
259
263
|
throw new TypeError('Actor Join relocation content type is invalid.');
|
|
260
264
|
}
|
|
261
|
-
return FRAMEWORK_METADATA_UPPER_BOUND_BYTES
|
|
262
|
-
+
|
|
263
|
-
+
|
|
264
|
-
|
|
265
|
+
return (FRAMEWORK_METADATA_UPPER_BOUND_BYTES +
|
|
266
|
+
ACCEPTED_JOURNAL_UPPER_BOUND_BYTES +
|
|
267
|
+
requestBytes +
|
|
268
|
+
(relocationContentType === SNAPSHOT_RELOCATION_CONTENT_TYPE
|
|
265
269
|
? SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES
|
|
266
|
-
: 0);
|
|
270
|
+
: 0));
|
|
267
271
|
}
|
|
268
272
|
function textBytes(value, name) {
|
|
269
273
|
const result = Buffer.from(requireText(value, name), 'utf8');
|
|
@@ -133,8 +133,8 @@ class EventLoopWorkQueues {
|
|
|
133
133
|
this.infrastructure.length = 0;
|
|
134
134
|
this.infrastructureHead = 0;
|
|
135
135
|
}
|
|
136
|
-
else if (this.infrastructureHead >= 1024
|
|
137
|
-
|
|
136
|
+
else if (this.infrastructureHead >= 1024 &&
|
|
137
|
+
this.infrastructureHead * 2 >= this.infrastructure.length) {
|
|
138
138
|
this.infrastructure.splice(0, this.infrastructureHead);
|
|
139
139
|
this.infrastructureHead = 0;
|
|
140
140
|
}
|
|
@@ -144,8 +144,8 @@ class EventLoopWorkQueues {
|
|
|
144
144
|
this.application.length = 0;
|
|
145
145
|
this.applicationHead = 0;
|
|
146
146
|
}
|
|
147
|
-
else if (this.applicationHead >= 1024
|
|
148
|
-
|
|
147
|
+
else if (this.applicationHead >= 1024 &&
|
|
148
|
+
this.applicationHead * 2 >= this.application.length) {
|
|
149
149
|
this.application.splice(0, this.applicationHead);
|
|
150
150
|
this.applicationHead = 0;
|
|
151
151
|
}
|