fix(siteruntime): capture Self before Task.Run in artifact deploy; seed MxGateway connections

- DeploymentManagerActor.HandleDeployArtifacts read the Self property inside its
  Task.Run lambda (line dispatching ApplyArtifactDataConnectionsToDcl). Self is
  backed by the ambient ActorCell, null on a thread-pool thread, so it threw
  'no active ActorContext' — surfaced the first time a data connection is
  deployed via deploy-artifacts. Capture Self into a local first (as Sender
  already was).
- seed-sites.sh: create a shared MxGateway data connection (10.100.0.48:5120)
  on each site and deploy artifacts so the DCL establishes them.
- build.sh: nounset-safe empty-array expansion (bash 3.2).
This commit is contained in:
Joseph Doherty
2026-05-29 08:26:39 -04:00
parent 8fb03d7449
commit bfd8b25108
3 changed files with 47 additions and 2 deletions
@@ -1002,6 +1002,11 @@ public class DeploymentManagerActor : ReceiveActor, IWithTimers
"Deploying system artifacts, deploymentId={DeploymentId}", command.DeploymentId);
var sender = Sender;
// Capture Self before entering Task.Run: the Self/Sender/Context properties
// are backed by the ambient ActorCell, which is null on a thread-pool thread,
// so reading Self *inside* the lambda throws "no active ActorContext". The
// data-connections branch below dispatches via this captured ref.
var self = Self;
Task.Run(async () =>
{
@@ -1071,7 +1076,7 @@ public class DeploymentManagerActor : ReceiveActor, IWithTimers
// helper's hash cache skips unchanged definitions, so
// the push is idempotent for re-deploys of the same
// artifact bundle.
Self.Tell(new ApplyArtifactDataConnectionsToDcl(command.DataConnections));
self.Tell(new ApplyArtifactDataConnectionsToDcl(command.DataConnections));
}
// Store SMTP configurations