@zlink-systems/framework 0.30.0 → 0.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -146,10 +146,6 @@ class ZLinkLocationRuntimeOwner {
|
|
|
146
146
|
}
|
|
147
147
|
spotNodeRuntime.configureLocationAutoConnect(runtime, stores, this.options.registration.locations.options, this.currentEvents);
|
|
148
148
|
channelRuntime.configureLocationAutoConnect(runtime, stores, this.options.registration.locations.options, this.currentEvents);
|
|
149
|
-
if (runtime.ownerLeaseUsable) {
|
|
150
|
-
await spotNodeRuntime.startLocationAutoConnect();
|
|
151
|
-
await channelRuntime.startLocationAutoConnect();
|
|
152
|
-
}
|
|
153
149
|
return runtime;
|
|
154
150
|
}
|
|
155
151
|
clearForStop() {
|
|
@@ -168,7 +164,7 @@ class ZLinkLocationRuntimeOwner {
|
|
|
168
164
|
const locations = this.options.registration.locations;
|
|
169
165
|
if (locations.useInMemoryStores) {
|
|
170
166
|
const provider = new locations_1.ZLinkInMemoryProviderLocationStore();
|
|
171
|
-
const store = new locations_1.ZLinkLocationStoreRepository(provider);
|
|
167
|
+
const store = new locations_1.ZLinkLocationStoreRepository(provider, undefined, this.options.metrics);
|
|
172
168
|
return {
|
|
173
169
|
locationStore: store,
|
|
174
170
|
authorityStore: store,
|
|
@@ -183,7 +179,7 @@ class ZLinkLocationRuntimeOwner {
|
|
|
183
179
|
}
|
|
184
180
|
const provider = locations.storeInstance;
|
|
185
181
|
if (provider !== undefined) {
|
|
186
|
-
const store = new locations_1.ZLinkLocationStoreRepository(provider);
|
|
182
|
+
const store = new locations_1.ZLinkLocationStoreRepository(provider, undefined, this.options.metrics);
|
|
187
183
|
return {
|
|
188
184
|
locationStore: store,
|
|
189
185
|
authorityStore: store,
|
|
@@ -5,6 +5,10 @@ export declare class MeshRouterResolver {
|
|
|
5
5
|
private readonly registration;
|
|
6
6
|
constructor(registration: ZLinkFrameworkRegistration);
|
|
7
7
|
canUseRouterChannel(routerChannelId: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Runs on every node-direct send: a direct scan of the registered manual
|
|
10
|
+
* peers, without temporary arrays or a predicate closure per call.
|
|
11
|
+
*/
|
|
8
12
|
classifyManualNodeTarget(meshName: string, targetNodeRid: RoutingId): boolean | undefined;
|
|
9
13
|
defaultRouterChannelId(): string | undefined;
|
|
10
14
|
defaultSpotRouterChannelId(): string | undefined;
|
|
@@ -11,17 +11,25 @@ class MeshRouterResolver {
|
|
|
11
11
|
return (this.registration.routeChannels.has(routerChannelId) ||
|
|
12
12
|
this.registration.spotNodes.get(routerChannelId)?.router !== undefined);
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Runs on every node-direct send: a direct scan of the registered manual
|
|
16
|
+
* peers, without temporary arrays or a predicate closure per call.
|
|
17
|
+
*/
|
|
14
18
|
classifyManualNodeTarget(meshName, targetNodeRid) {
|
|
15
19
|
const router = this.registration.spotNodes.get(meshName)?.router;
|
|
16
20
|
if (router === undefined)
|
|
17
21
|
return undefined;
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
const manualPeers = router.manualPeerConnections;
|
|
23
|
+
if (manualPeers !== undefined) {
|
|
24
|
+
for (const peer of manualPeers) {
|
|
25
|
+
if ((0, routing_id_1.routingIdsEqual)(peer.peerRid, targetNodeRid))
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const manualConnectionCount = router.manualConnections?.length ?? 0;
|
|
30
|
+
if (manualConnectionCount === 0 && (manualPeers?.length ?? 0) === 0)
|
|
21
31
|
return undefined;
|
|
22
|
-
|
|
23
|
-
return true;
|
|
24
|
-
return manualConnections.length === 0 ? false : undefined;
|
|
32
|
+
return manualConnectionCount === 0 ? false : undefined;
|
|
25
33
|
}
|
|
26
34
|
defaultRouterChannelId() {
|
|
27
35
|
const candidates = [
|
|
@@ -25,7 +25,6 @@ export declare class ZLinkRemoteBoundSessionRelay {
|
|
|
25
25
|
private readonly options;
|
|
26
26
|
private readonly actorOwnershipGenerations;
|
|
27
27
|
private readonly activeServiceWireRelocations;
|
|
28
|
-
private readonly terminalServiceWireRelocations;
|
|
29
28
|
constructor(options: ZLinkRemoteBoundSessionRelayOptions);
|
|
30
29
|
receiveRoutedBoundSession(actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown): Promise<void>;
|
|
31
30
|
receiveRoutedBoundSessionResponse(actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown): Promise<void>;
|
|
@@ -40,12 +39,11 @@ export declare class ZLinkRemoteBoundSessionRelay {
|
|
|
40
39
|
receiveRemoteBoundSessionError(payload: unknown): Promise<{
|
|
41
40
|
readonly ok: boolean;
|
|
42
41
|
}>;
|
|
43
|
-
receiveServiceWireSessionRelocationSeal(value: ServiceSessionRelocationSeal, signal?: AbortSignal): Promise<ServiceSessionRelocationSealed>;
|
|
42
|
+
receiveServiceWireSessionRelocationSeal(value: ServiceSessionRelocationSeal, signal?: AbortSignal, onInstalled?: () => void): Promise<ServiceSessionRelocationSealed | undefined>;
|
|
44
43
|
receiveServiceWireSessionRelocationRoute(value: ServiceSessionRelocationRoute): Promise<void>;
|
|
45
|
-
clearServiceWireSessionRelocations(): void
|
|
44
|
+
clearServiceWireSessionRelocations(): Promise<void>;
|
|
46
45
|
private warnLateSessionRouteUpdate;
|
|
47
46
|
private applyServiceWireSessionRelocationRoute;
|
|
48
|
-
private validateServiceWireSessionRoute;
|
|
49
47
|
resolveRemoteBoundSessionTarget(sourceNodeRid: RoutingId, sourceSessionRid: RoutingId): ZLinkRemoteBoundSessionTarget | undefined;
|
|
50
48
|
actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined;
|
|
51
49
|
clearOwnership(actorId: string): void;
|
|
@@ -8,14 +8,11 @@ const actor_packet_relay_wire_1 = require("../actors/actor-packet-relay-wire");
|
|
|
8
8
|
const routing_id_1 = require("../routing-id");
|
|
9
9
|
const service_stateful_wire_codec_1 = require("../foundation/service-stateful-wire-codec");
|
|
10
10
|
const service_wire_m6a_codec_1 = require("../foundation/service-wire-m6a-codec");
|
|
11
|
-
const bounded_replay_map_1 = require("./bounded-replay-map");
|
|
12
11
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
13
|
-
const SERVICE_CONTROL_TERMINAL_CAPACITY = 4096;
|
|
14
12
|
class ZLinkRemoteBoundSessionRelay {
|
|
15
13
|
options;
|
|
16
14
|
actorOwnershipGenerations = new Map();
|
|
17
15
|
activeServiceWireRelocations = new Map();
|
|
18
|
-
terminalServiceWireRelocations = new bounded_replay_map_1.BoundedReplayMap(SERVICE_CONTROL_TERMINAL_CAPACITY);
|
|
19
16
|
constructor(options) {
|
|
20
17
|
this.options = options;
|
|
21
18
|
}
|
|
@@ -112,77 +109,40 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
112
109
|
.sendLocalBoundSessionError(response.actorId, response.boundPacketName, response.requestSeq, response.error, new Map(Object.entries(response.metadata ?? {})));
|
|
113
110
|
return { ok: sent };
|
|
114
111
|
}
|
|
115
|
-
async receiveServiceWireSessionRelocationSeal(value, signal) {
|
|
112
|
+
async receiveServiceWireSessionRelocationSeal(value, signal, onInstalled) {
|
|
113
|
+
const runtime = this.options.streamBindingRuntime();
|
|
114
|
+
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(runtime);
|
|
115
|
+
const sealController = new AbortController();
|
|
116
|
+
const sealSignal = signal === undefined
|
|
117
|
+
? sealController.signal
|
|
118
|
+
: AbortSignal.any([signal, sealController.signal]);
|
|
119
|
+
const prepared = await owner.prepareSessionRelocationSeal(value, sealSignal);
|
|
120
|
+
if (prepared === undefined)
|
|
121
|
+
return undefined;
|
|
122
|
+
if (prepared.response.sealResult === 'bindingAbsent')
|
|
123
|
+
return prepared.response;
|
|
116
124
|
const key = serviceWireBarrierKey(value);
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (terminal.sealFingerprint !== fingerprint) {
|
|
121
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${key}' repeated command 42 with different bytes.`);
|
|
122
|
-
}
|
|
123
|
-
this.terminalServiceWireRelocations.touch(key);
|
|
124
|
-
return terminal.sealed;
|
|
125
|
-
}
|
|
126
|
-
const active = this.activeServiceWireRelocations.get(key);
|
|
127
|
-
if (active !== undefined) {
|
|
128
|
-
if (active.sealFingerprint !== fingerprint) {
|
|
129
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${key}' repeated command 42 with different bytes.`);
|
|
130
|
-
}
|
|
131
|
-
return await active.sealPromise;
|
|
132
|
-
}
|
|
125
|
+
const existing = this.activeServiceWireRelocations.get(key);
|
|
126
|
+
if (existing !== undefined)
|
|
127
|
+
return await existing.sealPromise;
|
|
133
128
|
const actorId = value.actor.actor.actorId;
|
|
134
|
-
|
|
135
|
-
// Concurrent identical commands join this promise; different bytes for
|
|
136
|
-
// the same identity fail before they can install another seal.
|
|
137
|
-
let state;
|
|
138
|
-
const sealController = new AbortController();
|
|
139
|
-
const sealPromise = Promise.resolve().then(async () => {
|
|
140
|
-
await this.validateServiceWireSessionRoute(value);
|
|
141
|
-
await (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.streamBindingRuntime()).sealRelocation({
|
|
142
|
-
actorId,
|
|
143
|
-
actorGeneration: value.actor.actor.generation,
|
|
144
|
-
bindingGeneration: value.session.bindingGeneration,
|
|
145
|
-
sessionIdentity: value.session.sessionRid,
|
|
146
|
-
actorNodeRid: value.actor.actor.nodeRid,
|
|
147
|
-
actorNodeGeneration: value.actor.targetNodeGeneration,
|
|
148
|
-
sealId: key
|
|
149
|
-
}, {
|
|
150
|
-
objectGeneration: value.actor.actor.generation,
|
|
151
|
-
bindingGeneration: value.session.bindingGeneration
|
|
152
|
-
}, sealController.signal);
|
|
153
|
-
return {
|
|
154
|
-
relocation: value.relocation,
|
|
155
|
-
coordinator: value.coordinator,
|
|
156
|
-
actor: value.actor,
|
|
157
|
-
session: value.session
|
|
158
|
-
};
|
|
159
|
-
});
|
|
160
|
-
state = {
|
|
129
|
+
const state = {
|
|
161
130
|
actorId,
|
|
162
|
-
|
|
163
|
-
sealPromise,
|
|
164
|
-
sealController
|
|
131
|
+
sealPromise: prepared.ready.then(() => prepared.response)
|
|
165
132
|
};
|
|
166
133
|
this.activeServiceWireRelocations.set(key, state);
|
|
134
|
+
onInstalled?.();
|
|
167
135
|
const expire = async (error) => {
|
|
168
|
-
if (state.terminal === true ||
|
|
136
|
+
if (state.terminal === true ||
|
|
137
|
+
(await owner.relocationSnapshot(actorId, key))?.phase !== 'sealed')
|
|
169
138
|
return;
|
|
170
139
|
state.terminal = true;
|
|
171
140
|
sealController.abort(error);
|
|
172
141
|
if (this.activeServiceWireRelocations.get(key) === state) {
|
|
173
142
|
this.activeServiceWireRelocations.delete(key);
|
|
174
143
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
actorId,
|
|
178
|
-
sealFingerprint: state.sealFingerprint,
|
|
179
|
-
sealed: state.sealed
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.streamBindingRuntime());
|
|
183
|
-
await owner.clearRelocation(actorId, error);
|
|
184
|
-
void this.options
|
|
185
|
-
.streamBindingRuntime()
|
|
144
|
+
await owner.clearRelocation(actorId, error, key);
|
|
145
|
+
void runtime
|
|
186
146
|
.closeSessionBinding(actorId, value.session)
|
|
187
147
|
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
|
|
188
148
|
state.sealAbortCleanup?.();
|
|
@@ -203,9 +163,7 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
203
163
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
204
164
|
}
|
|
205
165
|
try {
|
|
206
|
-
|
|
207
|
-
state.sealed = sealed;
|
|
208
|
-
return sealed;
|
|
166
|
+
return await state.sealPromise;
|
|
209
167
|
}
|
|
210
168
|
catch (error) {
|
|
211
169
|
clearTimeout(state.sealTimer);
|
|
@@ -213,126 +171,69 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
213
171
|
if (this.activeServiceWireRelocations.get(key) === state) {
|
|
214
172
|
this.activeServiceWireRelocations.delete(key);
|
|
215
173
|
}
|
|
216
|
-
if (state.terminal !== true) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
.streamBindingRuntime()
|
|
222
|
-
.closeSessionBinding(actorId, value.session)
|
|
223
|
-
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
|
|
224
|
-
}
|
|
174
|
+
if (state.terminal !== true && (await owner.relocationSnapshot(actorId, key)) !== undefined) {
|
|
175
|
+
await owner.clearRelocation(actorId, error, key);
|
|
176
|
+
void runtime
|
|
177
|
+
.closeSessionBinding(actorId, value.session)
|
|
178
|
+
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
|
|
225
179
|
}
|
|
226
180
|
throw sealController.signal.aborted ? sealController.signal.reason : error;
|
|
227
181
|
}
|
|
228
182
|
}
|
|
229
183
|
async receiveServiceWireSessionRelocationRoute(value) {
|
|
230
184
|
const key = serviceWireBarrierKey(value);
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const terminal = this.terminalServiceWireRelocations.get(key);
|
|
234
|
-
if (terminal !== undefined) {
|
|
235
|
-
if (terminal.routeFingerprint === undefined) {
|
|
236
|
-
// The Session owner already closed this binding at the seal deadline.
|
|
237
|
-
// A late command 44 is terminal and cannot reactivate the route.
|
|
238
|
-
this.terminalServiceWireRelocations.touch(key);
|
|
239
|
-
this.warnLateSessionRouteUpdate(value);
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
if (terminal.routeFingerprint !== fingerprint) {
|
|
243
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${key}' repeated command 44 with different bytes.`);
|
|
244
|
-
}
|
|
245
|
-
this.terminalServiceWireRelocations.touch(key);
|
|
246
|
-
this.warnLateSessionRouteUpdate(value);
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
185
|
+
const runtime = this.options.streamBindingRuntime();
|
|
186
|
+
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(runtime);
|
|
249
187
|
const state = this.activeServiceWireRelocations.get(key);
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
254
|
-
if (state.routeRequestFingerprint !== undefined &&
|
|
255
|
-
state.routeRequestFingerprint !== routeRequestFingerprint) {
|
|
256
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${key}' repeated command 44 with different bytes.`);
|
|
257
|
-
}
|
|
258
|
-
if (state.routeFingerprint !== undefined) {
|
|
259
|
-
if (state.routeFingerprint !== fingerprint || state.routePromise === undefined) {
|
|
260
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${key}' repeated command 44 with different bytes.`);
|
|
188
|
+
const accepted = await owner.acceptSessionRelocationRoute(value, async () => {
|
|
189
|
+
if (state === undefined) {
|
|
190
|
+
throw new bound_session_wire_1.ZLinkRemoteBoundSessionFenceError(`Session relocation '${key}' has no active seal.`);
|
|
261
191
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
clearTimeout(state.sealTimer);
|
|
270
|
-
state.sealAbortCleanup?.();
|
|
271
|
-
const routePromise = state.sealPromise.then(async (sealed) => {
|
|
272
|
-
validateSessionRelocationRouteAgainstSeal(value, sealed);
|
|
273
|
-
await this.applyServiceWireSessionRelocationRoute(key, value);
|
|
274
|
-
});
|
|
275
|
-
state.routePromise = routePromise;
|
|
276
|
-
try {
|
|
277
|
-
await routePromise;
|
|
278
|
-
this.terminalServiceWireRelocations.remember(key, {
|
|
279
|
-
actorId: state.actorId,
|
|
280
|
-
sealFingerprint: state.sealFingerprint,
|
|
281
|
-
sealed: state.sealed ?? (await state.sealPromise),
|
|
282
|
-
routeRequestFingerprint,
|
|
283
|
-
routeFingerprint: fingerprint
|
|
284
|
-
});
|
|
285
|
-
if (this.activeServiceWireRelocations.get(key) === state) {
|
|
286
|
-
this.activeServiceWireRelocations.delete(key);
|
|
192
|
+
if (state.sealTimer !== undefined)
|
|
193
|
+
clearTimeout(state.sealTimer);
|
|
194
|
+
state.sealAbortCleanup?.();
|
|
195
|
+
try {
|
|
196
|
+
const sealed = await state.sealPromise;
|
|
197
|
+
validateSessionRelocationRouteAgainstSeal(value, sealed);
|
|
198
|
+
await this.applyServiceWireSessionRelocationRoute(key, value);
|
|
287
199
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
if (this.activeServiceWireRelocations.get(key) === state) {
|
|
297
|
-
this.activeServiceWireRelocations.delete(key);
|
|
200
|
+
catch (error) {
|
|
201
|
+
// The binding owner chose this command. A failed one-way apply closes
|
|
202
|
+
// its physical Session; conflicting duplicates never enter this callback.
|
|
203
|
+
await owner.clearRelocation(state.actorId, error, key);
|
|
204
|
+
await runtime
|
|
205
|
+
.closeSessionBinding(state.actorId, value.session)
|
|
206
|
+
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(state.actorId, disconnectError));
|
|
207
|
+
throw error;
|
|
298
208
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
await this.options
|
|
309
|
-
.streamBindingRuntime()
|
|
310
|
-
.closeSessionBinding(state.actorId, value.session)
|
|
311
|
-
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(state.actorId, disconnectError));
|
|
312
|
-
throw error;
|
|
313
|
-
}
|
|
209
|
+
finally {
|
|
210
|
+
state.terminal = true;
|
|
211
|
+
if (this.activeServiceWireRelocations.get(key) === state) {
|
|
212
|
+
this.activeServiceWireRelocations.delete(key);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
if (!accepted)
|
|
217
|
+
this.warnLateSessionRouteUpdate(value);
|
|
314
218
|
}
|
|
315
|
-
clearServiceWireSessionRelocations() {
|
|
219
|
+
async clearServiceWireSessionRelocations() {
|
|
316
220
|
for (const state of this.activeServiceWireRelocations.values()) {
|
|
317
221
|
if (state.sealTimer !== undefined)
|
|
318
222
|
clearTimeout(state.sealTimer);
|
|
223
|
+
state.sealAbortCleanup?.();
|
|
319
224
|
}
|
|
320
225
|
this.activeServiceWireRelocations.clear();
|
|
321
|
-
this.
|
|
226
|
+
await (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwnerIfRegistered)(this.options.streamBindingRuntime())?.clearSessionRelocationResults();
|
|
322
227
|
}
|
|
323
228
|
warnLateSessionRouteUpdate(value) {
|
|
324
229
|
console.warn(`late_session_route_update session=${value.session.sessionRid}`);
|
|
325
230
|
}
|
|
326
231
|
async applyServiceWireSessionRelocationRoute(key, value) {
|
|
327
232
|
const runtime = this.options.streamBindingRuntime();
|
|
328
|
-
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(runtime);
|
|
329
|
-
const fingerprint = (0, service_stateful_wire_codec_1.encodeSessionRelocationRoute)(value).toString('base64');
|
|
330
233
|
if (value.route.action === 'abort') {
|
|
331
|
-
await
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
}
|
|
335
|
-
});
|
|
234
|
+
if (!(await runtime.abortActorRouteSeal(value.actor.actorId, key))) {
|
|
235
|
+
throw new bound_session_wire_1.ZLinkRemoteBoundSessionFenceError(`Actor '${value.actor.actorId}' command 44 abort lost its Session seal.`);
|
|
236
|
+
}
|
|
336
237
|
}
|
|
337
238
|
else {
|
|
338
239
|
const committedRoute = value.route;
|
|
@@ -344,36 +245,20 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
344
245
|
actorId: value.actor.actorId,
|
|
345
246
|
objectGeneration: value.actor.generation,
|
|
346
247
|
meshName: current.meshName,
|
|
347
|
-
nodeRid:
|
|
248
|
+
nodeRid: committedRoute.targetNodeRid,
|
|
348
249
|
bindingGeneration: value.session.bindingGeneration,
|
|
349
250
|
ownershipGeneration: committedRoute.targetAuthorityOwnerGeneration,
|
|
350
251
|
ownerNodeGeneration: committedRoute.targetNodeGeneration,
|
|
351
252
|
ownerLeaseGeneration: committedRoute.targetOwnerLeaseGeneration
|
|
352
253
|
};
|
|
353
|
-
await
|
|
354
|
-
|
|
355
|
-
confirmRemoteSessionBinding: 'send',
|
|
356
|
-
releaseSeal: { sealId: key }
|
|
357
|
-
});
|
|
358
|
-
const currentGeneration = this.actorOwnershipGenerations.get(value.actor.actorId);
|
|
359
|
-
if (currentGeneration === undefined ||
|
|
360
|
-
currentGeneration < committedRoute.targetAuthorityOwnerGeneration) {
|
|
361
|
-
this.actorOwnershipGenerations.set(value.actor.actorId, committedRoute.targetAuthorityOwnerGeneration);
|
|
362
|
-
}
|
|
254
|
+
await runtime.commitActorRoute(targetActorRef, undefined, {
|
|
255
|
+
releaseSeal: { sealId: key }
|
|
363
256
|
});
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
.streamBindingRuntime()
|
|
370
|
-
.sessionRouteFence(value.actor.actor.actorId);
|
|
371
|
-
if (current === undefined ||
|
|
372
|
-
current.actor.objectGeneration !== value.actor.actor.generation ||
|
|
373
|
-
!(0, routing_id_1.routingIdsEqual)(current.actor.nodeRid, value.actor.actor.nodeRid) ||
|
|
374
|
-
current.sessionRid.toString() !== value.session.sessionRid ||
|
|
375
|
-
current.bindingGeneration !== value.session.bindingGeneration) {
|
|
376
|
-
throw new bound_session_wire_1.ZLinkRemoteBoundSessionFenceError(`Actor '${value.actor.actor.actorId}' command 42 was fenced by its exact Session route.`);
|
|
257
|
+
const currentGeneration = this.actorOwnershipGenerations.get(value.actor.actorId);
|
|
258
|
+
if (currentGeneration === undefined ||
|
|
259
|
+
currentGeneration < committedRoute.targetAuthorityOwnerGeneration) {
|
|
260
|
+
this.actorOwnershipGenerations.set(value.actor.actorId, committedRoute.targetAuthorityOwnerGeneration);
|
|
261
|
+
}
|
|
377
262
|
}
|
|
378
263
|
}
|
|
379
264
|
resolveRemoteBoundSessionTarget(sourceNodeRid, sourceSessionRid) {
|
|
@@ -405,10 +290,6 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
405
290
|
this.activeServiceWireRelocations.delete(key);
|
|
406
291
|
}
|
|
407
292
|
}
|
|
408
|
-
for (const [key, value] of this.terminalServiceWireRelocations) {
|
|
409
|
-
if (value.actorId === actorId)
|
|
410
|
-
this.terminalServiceWireRelocations.delete(key);
|
|
411
|
-
}
|
|
412
293
|
}
|
|
413
294
|
async sendActorResponse(actor, packetName, requestSeq, response, replyOptions, fallbackBoundSessionTarget, fallbackActorRef, signal) {
|
|
414
295
|
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
@@ -520,33 +401,17 @@ function serviceWireBarrierKey(value) {
|
|
|
520
401
|
return (0, service_stateful_wire_codec_1.serviceSessionRelocationIdentityKey)(value);
|
|
521
402
|
}
|
|
522
403
|
function validateSessionRelocationRouteAgainstSeal(route, sealed) {
|
|
523
|
-
const
|
|
524
|
-
route.coordinator.leaseGeneration === sealed.coordinator.leaseGeneration &&
|
|
525
|
-
route.coordinator.nodeRid === sealed.coordinator.nodeRid &&
|
|
526
|
-
route.coordinator.nodeGeneration === sealed.coordinator.nodeGeneration &&
|
|
527
|
-
route.coordinator.expectedAuthorityStoreVersion ===
|
|
528
|
-
sealed.coordinator.expectedAuthorityStoreVersion;
|
|
529
|
-
const sameSession = route.session.sessionOwnerNodeRid === sealed.session.sessionOwnerNodeRid &&
|
|
404
|
+
const sameSession = (0, routing_id_1.routingIdsEqual)(route.session.sessionOwnerNodeRid, sealed.session.sessionOwnerNodeRid) &&
|
|
530
405
|
route.session.sessionOwnerNodeGeneration === sealed.session.sessionOwnerNodeGeneration &&
|
|
531
406
|
route.session.sessionOwnerId === sealed.session.sessionOwnerId &&
|
|
532
407
|
route.session.sessionOwnerLeaseGeneration === sealed.session.sessionOwnerLeaseGeneration &&
|
|
533
|
-
route.session.sessionRid
|
|
408
|
+
(0, routing_id_1.routingIdsEqual)(route.session.sessionRid, sealed.session.sessionRid) &&
|
|
534
409
|
route.session.bindingGeneration === sealed.session.bindingGeneration;
|
|
535
410
|
if (route.relocation.high !== sealed.relocation.high ||
|
|
536
411
|
route.relocation.low !== sealed.relocation.low ||
|
|
537
|
-
!sameCoordinator ||
|
|
538
412
|
!sameSession ||
|
|
539
413
|
route.actor.actorId !== sealed.actor.actor.actorId ||
|
|
540
414
|
route.actor.generation !== sealed.actor.actor.generation) {
|
|
541
415
|
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${serviceWireBarrierKey(route)}' changed its command 42 fence.`);
|
|
542
416
|
}
|
|
543
|
-
if (route.route.action === 'commit') {
|
|
544
|
-
if (route.route.previousAuthorityOwnerGeneration !== sealed.actor.authorityOwnerGeneration) {
|
|
545
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${serviceWireBarrierKey(route)}' changed its source authority fence.`);
|
|
546
|
-
}
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
if (route.route.currentAuthorityOwnerGeneration !== sealed.actor.authorityOwnerGeneration) {
|
|
550
|
-
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${serviceWireBarrierKey(route)}' abort changed its authority fence.`);
|
|
551
|
-
}
|
|
552
417
|
}
|
|
@@ -3,7 +3,7 @@ import type { ZLinkActivationAdmission } from '../activation-admission';
|
|
|
3
3
|
import type { ZLinkRuntimeAdmissionGate } from '../admission';
|
|
4
4
|
import type { ZLinkBackendMeshNode } from '../backend';
|
|
5
5
|
import type { ZLinkSpotNodeOptions } from '../configuration';
|
|
6
|
-
type ZLinkDrainForceReason = 'deadline_exceeded' | 'drain_state_publish_failed' | 'owner_cleanup_failed' | 'teardown_failed';
|
|
6
|
+
export type ZLinkDrainForceReason = 'deadline_exceeded' | 'drain_state_publish_failed' | 'owner_cleanup_failed' | 'teardown_failed';
|
|
7
7
|
type ZLinkMeshDrainResult = {
|
|
8
8
|
readonly kind: 'drained';
|
|
9
9
|
} | {
|
|
@@ -28,7 +28,7 @@ export interface ZLinkRouteMeshRuntimeCoordinatorOptions {
|
|
|
28
28
|
readonly drainResources: (meshName: string, signal: AbortSignal, stopStartingSignal?: AbortSignal) => Promise<void>;
|
|
29
29
|
readonly shutdownResources?: (meshName: string, signal: AbortSignal) => Promise<void>;
|
|
30
30
|
readonly cleanupHostResources: (signal: AbortSignal) => Promise<void>;
|
|
31
|
-
readonly forceStopResources: (meshName: string) => Promise<void>;
|
|
31
|
+
readonly forceStopResources: (meshName: string, reason: ZLinkDrainForceReason, signal: AbortSignal) => Promise<void>;
|
|
32
32
|
}
|
|
33
33
|
export interface ZLinkLocalPlacementCounts {
|
|
34
34
|
readonly activeActorCount: number;
|
|
@@ -312,7 +312,9 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
312
312
|
: deadline.signal.aborted
|
|
313
313
|
? 'deadline_exceeded'
|
|
314
314
|
: classified;
|
|
315
|
-
await this.options
|
|
315
|
+
await this.options
|
|
316
|
+
.forceStopResources(meshName, reason, deadline.signal)
|
|
317
|
+
.catch(() => undefined);
|
|
316
318
|
result = { kind: 'forceStopped', reason };
|
|
317
319
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
|
|
318
320
|
}
|
|
@@ -362,7 +364,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
362
364
|
: deadline.signal.aborted
|
|
363
365
|
? 'deadline_exceeded'
|
|
364
366
|
: classified;
|
|
365
|
-
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
|
|
367
|
+
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName, reason, deadline.signal).catch(() => undefined)));
|
|
366
368
|
result = { kind: 'forceStopped', reason };
|
|
367
369
|
for (const [meshName, state] of entries) {
|
|
368
370
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
|
|
@@ -408,8 +410,8 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
408
410
|
: signal.aborted
|
|
409
411
|
? 'deadline_exceeded'
|
|
410
412
|
: classified;
|
|
411
|
-
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
|
|
412
|
-
result = { kind: 'forceStopped', reason };
|
|
413
|
+
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName, reason, signal).catch(() => undefined)));
|
|
414
|
+
result = { kind: 'forceStopped', reason, error };
|
|
413
415
|
for (const [meshName, state] of entries) {
|
|
414
416
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
|
|
415
417
|
}
|
|
@@ -26,6 +26,7 @@ export interface ZLinkRuntimeStopParts {
|
|
|
26
26
|
readonly spotNodeRuntime?: ZLinkSpotNodeRuntimeManager;
|
|
27
27
|
readonly channelRuntime?: ZLinkChannelRuntimeManager;
|
|
28
28
|
readonly serviceRelocation?: {
|
|
29
|
+
drainActorJoinSources?(): Promise<void>;
|
|
29
30
|
dispose(): Promise<void>;
|
|
30
31
|
};
|
|
31
32
|
readonly ownedStores?: readonly ZLinkRuntimeOwnedStore[];
|
|
@@ -20,10 +20,11 @@ async function rollbackRuntimeStart(parts) {
|
|
|
20
20
|
async function stopRuntimeParts(parts) {
|
|
21
21
|
const state = parts.state;
|
|
22
22
|
const errors = [];
|
|
23
|
+
await runShutdownStep(errors, () => (0, abort_1.awaitWithAbort)(Promise.resolve(parts.serviceRelocation?.drainActorJoinSources?.()), parts.shutdownSignal));
|
|
23
24
|
await runShutdownStep(errors, () => parts.streamRuntime?.dispose());
|
|
24
|
-
await runShutdownStep(errors, () => parts.spotNodeRuntime?.dispose(
|
|
25
|
+
await runShutdownStep(errors, () => parts.spotNodeRuntime?.dispose(parts.shutdownSignal, parts.cleanupDeadline));
|
|
25
26
|
await runShutdownStep(errors, () => parts.channelRuntime?.dispose());
|
|
26
|
-
await runShutdownStep(errors, () => parts.serviceRelocation?.dispose());
|
|
27
|
+
await runShutdownStep(errors, () => (0, abort_1.awaitWithAbort)(Promise.resolve(parts.serviceRelocation?.dispose()), parts.shutdownSignal));
|
|
27
28
|
await runShutdownStep(errors, () => parts.locationSnapshot.lifecycle?.dispose());
|
|
28
29
|
await runShutdownStep(errors, () => parts.locationSnapshot.runtime?.stop(parts.shutdownSignal));
|
|
29
30
|
await Promise.allSettled(state.listenerTasks);
|
|
@@ -3,5 +3,6 @@ export type ZLinkServiceRelocationControlRequest = ServiceMaintenanceRelocationC
|
|
|
3
3
|
export type ZLinkServiceRelocationControlResponse = ServiceMaintenanceRelocationControl;
|
|
4
4
|
export declare function encodeServiceRelocationControlRequest(request: ZLinkServiceRelocationControlRequest): Buffer;
|
|
5
5
|
export declare function decodeServiceRelocationControlRequest(payload: Uint8Array): ZLinkServiceRelocationControlRequest | undefined;
|
|
6
|
+
export declare function serviceRelocationControlCommand(payload: Uint8Array): number | undefined;
|
|
6
7
|
export declare function encodeServiceRelocationControlResponse(response: ZLinkServiceRelocationControlResponse): Buffer;
|
|
7
8
|
export declare function decodeServiceRelocationControlResponse(payload: Uint8Array): ZLinkServiceRelocationControlResponse;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.encodeServiceRelocationControlRequest = encodeServiceRelocationControlRequest;
|
|
4
4
|
exports.decodeServiceRelocationControlRequest = decodeServiceRelocationControlRequest;
|
|
5
|
+
exports.serviceRelocationControlCommand = serviceRelocationControlCommand;
|
|
5
6
|
exports.encodeServiceRelocationControlResponse = encodeServiceRelocationControlResponse;
|
|
6
7
|
exports.decodeServiceRelocationControlResponse = decodeServiceRelocationControlResponse;
|
|
7
8
|
const service_wire_binary_primitives_1 = require("../foundation/service-wire-binary-primitives");
|
|
@@ -14,13 +15,18 @@ function decodeServiceRelocationControlRequest(payload) {
|
|
|
14
15
|
const bytes = Buffer.isBuffer(payload)
|
|
15
16
|
? payload
|
|
16
17
|
: Buffer.from(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
17
|
-
if (bytes
|
|
18
|
-
bytes[0] !== service_wire_constants_generated_1.SERVICE_WIRE_MAGIC[0] ||
|
|
19
|
-
bytes[1] !== service_wire_constants_generated_1.SERVICE_WIRE_MAGIC[1] ||
|
|
20
|
-
bytes[service_wire_binary_primitives_1.SERVICE_WIRE_MAJOR_OFFSET] !== service_wire_constants_generated_1.SERVICE_WIRE_MAJOR)
|
|
18
|
+
if (serviceRelocationControlCommand(bytes) === undefined)
|
|
21
19
|
return undefined;
|
|
22
20
|
return (0, service_stateful_wire_codec_1.decodeMaintenanceRelocationControl)(bytes);
|
|
23
21
|
}
|
|
22
|
+
function serviceRelocationControlCommand(payload) {
|
|
23
|
+
if (payload.byteLength < service_wire_binary_primitives_1.SERVICE_WIRE_PREFIX_SIZE ||
|
|
24
|
+
payload[0] !== service_wire_constants_generated_1.SERVICE_WIRE_MAGIC[0] ||
|
|
25
|
+
payload[1] !== service_wire_constants_generated_1.SERVICE_WIRE_MAGIC[1] ||
|
|
26
|
+
payload[service_wire_binary_primitives_1.SERVICE_WIRE_MAJOR_OFFSET] !== service_wire_constants_generated_1.SERVICE_WIRE_MAJOR)
|
|
27
|
+
return undefined;
|
|
28
|
+
return payload[service_wire_binary_primitives_1.SERVICE_WIRE_COMMAND_OFFSET];
|
|
29
|
+
}
|
|
24
30
|
function encodeServiceRelocationControlResponse(response) {
|
|
25
31
|
return (0, service_stateful_wire_codec_1.encodeMaintenanceRelocationControl)(response);
|
|
26
32
|
}
|