fix(siteruntime): normalize routed WaitForAttribute response value for cross-process transport
This commit is contained in:
@@ -1108,8 +1108,19 @@ public class DeploymentManagerActor : ReceiveActor, IWithTimers
|
||||
// Ask bounded by the WAIT timeout + slack — NOT a fixed 30s (the wait legitimately blocks up to request.Timeout).
|
||||
instanceActor.Ask<WaitForAttributeResponse>(inner, request.Timeout + TimeSpan.FromSeconds(5))
|
||||
.ContinueWith(t => t.IsCompletedSuccessfully
|
||||
// The matched value crosses the Central↔Site PROCESS boundary inside this
|
||||
// response. For a List-typed attribute the Instance Actor's matched
|
||||
// `WaitForAttributeResponse.Value` is a concrete generic List<T>
|
||||
// (List<int>/List<double>/List<DateTime>/… built by TryCoerceListValue;
|
||||
// see InstanceActor.HandleTagValueUpdate / ResolveMatchedWaiters) — a
|
||||
// non-primitive shape that Akka's cross-process serializer cannot reliably
|
||||
// round-trip, which would silently drop the reply and hang the caller's
|
||||
// Ask. Project it through the same normalizer RouteInboundApiCall uses so
|
||||
// the wire carries a plain CLR graph (List/primitive). Scalars/strings/null
|
||||
// pass through unchanged.
|
||||
? new RouteToWaitForAttributeResponse(
|
||||
request.CorrelationId, t.Result.Matched, t.Result.Value, t.Result.Quality, t.Result.TimedOut,
|
||||
request.CorrelationId, t.Result.Matched, NormalizeRoutedReturnValue(t.Result.Value),
|
||||
t.Result.Quality, t.Result.TimedOut,
|
||||
true, null, DateTimeOffset.UtcNow)
|
||||
: new RouteToWaitForAttributeResponse(
|
||||
request.CorrelationId, false, null, null, false,
|
||||
|
||||
Reference in New Issue
Block a user