decision(comm): IntegrationCallRequest routing is dead on both ends — wire or delete #32

Closed
opened 2026-07-23 11:52:31 -04:00 by dohertj2 · 1 comment
Owner

Severity: Low (no runtime impact — the path cannot be reached) · Area: Central–Site Communication · Status: decision needed

What

"Pattern 4: Integration Routing" — CommunicationService.RouteIntegrationCallAsyncSiteEnvelope(IntegrationCallRequest)SiteCommunicationActor → an integration handler — is plumbed end to end but connected at neither end:

  • No producer: RouteIntegrationCallAsync has zero callers in src/ or tests/ (the only CommunicationService command method with none).
  • No handler: RegisterLocalHandler(LocalHandlerType.Integration, …) appears only in SiteCommunicationActorTests; AkkaHostedService registers the other three handler types and never this one.

Not to be confused with the Inbound API's routed-site-script path, which is live, tested, and uses different messages.

Context

Found during ClusterClient→gRPC recon (plan T0.2), which enumerated every site↔central command: of 29 command types this is the 1 excluded — 28 migrate to the gRPC contract. It was left untouched to avoid enshrining an unreachable RPC on an additive-only wire format, and to avoid mixing an unrelated behavioural change into a transport-identical migration.

Decision

Either design a proto contract + oneof slot + round-trip mapper and wire both ends, or delete the pattern (producer, message, handler branch).

Full write-up: docs/known-issues/2026-07-22-integration-call-routing-is-dead-code.md.

**Severity:** Low (no runtime impact — the path cannot be reached) · **Area:** Central–Site Communication · **Status:** decision needed ## What "Pattern 4: Integration Routing" — `CommunicationService.RouteIntegrationCallAsync` → `SiteEnvelope(IntegrationCallRequest)` → `SiteCommunicationActor` → an integration handler — is plumbed end to end but connected at **neither** end: - **No producer:** `RouteIntegrationCallAsync` has **zero callers** in `src/` or `tests/` (the only `CommunicationService` command method with none). - **No handler:** `RegisterLocalHandler(LocalHandlerType.Integration, …)` appears **only** in `SiteCommunicationActorTests`; `AkkaHostedService` registers the other three handler types and never this one. Not to be confused with the Inbound API's routed-site-script path, which is live, tested, and uses different messages. ## Context Found during ClusterClient→gRPC recon (plan T0.2), which enumerated every site↔central command: of **29** command types this is the **1** excluded — **28 migrate** to the gRPC contract. It was left untouched to avoid enshrining an unreachable RPC on an additive-only wire format, and to avoid mixing an unrelated behavioural change into a transport-identical migration. ## Decision Either design a proto contract + `oneof` slot + round-trip mapper and wire both ends, **or** delete the pattern (producer, message, handler branch). Full write-up: `docs/known-issues/2026-07-22-integration-call-routing-is-dead-code.md`.
Author
Owner

Resolved by DELETE — commit a5256e9b (on main, pushed to origin).

Decision: delete. The dead 'Pattern 4' path was an early scaffold the architecture routed around — the brokered External→Central→Site→Central round-trip is served by the Inbound API's routed-site-script path (the RouteTo* verbs on CommunicationService, driven from InboundAPI/CommunicationServiceInstanceRouter), which is live, tested, and shares IntegrationTimeout.

Removed: IntegrationCall{Request,Response} messages, RouteIntegrationCallAsync, the SiteCommunicationActor receive block + _integrationHandler field + LocalHandlerType.Integration, and the 4 tests covering them. KEPT IntegrationTimeout (it's the live timeout for RouteTo*). Updated the exclusion-narrative comments (proto/mapper/dispatcher), design §4, the components-doc timeout table, and marked docs/known-issues/2026-07-22-integration-call-routing-is-dead-code.md RESOLVED.

Full solution build clean (0/0); Communication 634 + Host 421 tests green. Net -172/+20 across 14 files. It was never in the gRPC proto (deliberately excluded there), so no wire-format change.

Resolved by DELETE — commit a5256e9b (on main, pushed to origin). Decision: delete. The dead 'Pattern 4' path was an early scaffold the architecture routed around — the brokered External→Central→Site→Central round-trip is served by the Inbound API's routed-site-script path (the RouteTo* verbs on CommunicationService, driven from InboundAPI/CommunicationServiceInstanceRouter), which is live, tested, and shares IntegrationTimeout. Removed: IntegrationCall{Request,Response} messages, RouteIntegrationCallAsync, the SiteCommunicationActor receive block + _integrationHandler field + LocalHandlerType.Integration, and the 4 tests covering them. KEPT IntegrationTimeout (it's the live timeout for RouteTo*). Updated the exclusion-narrative comments (proto/mapper/dispatcher), design §4, the components-doc timeout table, and marked docs/known-issues/2026-07-22-integration-call-routing-is-dead-code.md RESOLVED. Full solution build clean (0/0); Communication 634 + Host 421 tests green. Net -172/+20 across 14 files. It was never in the gRPC proto (deliberately excluded there), so no wire-format change.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/ScadaBridge#32