forked from DGNum/colmena
nix: Fix deployment parallelization
This commit is contained in:
parent
5b2d8d75e7
commit
2bba64a002
4 changed files with 48 additions and 1 deletions
18
integration-tests/apply-fail/default.nix
Normal file
18
integration-tests/apply-fail/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
let
|
||||
tools = import ../tools.nix {};
|
||||
in tools.makeTest {
|
||||
name = "colmena-apply-fail";
|
||||
|
||||
bundle = ./.;
|
||||
|
||||
testScript = ''
|
||||
beta.block()
|
||||
|
||||
# HACK: copy stderr to both stdout and stderr
|
||||
# (stdout is what's returned, and only stderr appears on screen during the build)
|
||||
logs = deployer.fail("cd /tmp/bundle && ${tools.colmenaExec} apply -v --eval-node-limit 4 --on @target 2> >(tee /dev/stderr)")
|
||||
|
||||
alpha.succeed("grep SUCCESS /etc/deployment")
|
||||
gamma.succeed("grep SUCCESS /etc/deployment")
|
||||
'';
|
||||
}
|
23
integration-tests/apply-fail/hive.nix
Normal file
23
integration-tests/apply-fail/hive.nix
Normal file
|
@ -0,0 +1,23 @@
|
|||
let
|
||||
tools = import ./tools.nix { insideVm = true; };
|
||||
|
||||
testPkg = let
|
||||
text = builtins.trace "must appear during evaluation" ''
|
||||
echo "must appear during build"
|
||||
mkdir -p $out
|
||||
'';
|
||||
in tools.pkgs.runCommand "test-package" {} text;
|
||||
in {
|
||||
meta = {
|
||||
nixpkgs = tools.pkgs;
|
||||
};
|
||||
|
||||
defaults = {
|
||||
environment.etc."deployment".text = "SUCCESS";
|
||||
};
|
||||
|
||||
deployer = tools.getStandaloneConfigFor "deployer";
|
||||
alpha = tools.getStandaloneConfigFor "alpha";
|
||||
beta = tools.getStandaloneConfigFor "beta";
|
||||
gamma = tools.getStandaloneConfigFor "gamma";
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
apply = import ./apply;
|
||||
apply-fail = import ./apply-fail;
|
||||
apply-local = import ./apply-local;
|
||||
exec = import ./exec;
|
||||
}
|
||||
|
|
|
@ -226,11 +226,16 @@ impl Deployment {
|
|||
return Ok(());
|
||||
}
|
||||
|
||||
let mut futures = Vec::new();
|
||||
|
||||
for (name, profile) in profiles.iter() {
|
||||
let target = chunk.remove(name).unwrap();
|
||||
self.clone().deploy_node(parent.clone(), target, profile.clone()).await?;
|
||||
futures.push(self.clone().deploy_node(parent.clone(), target, profile.clone()));
|
||||
}
|
||||
|
||||
let result: NixResult<Vec<()>> = join_all(futures).await.into_iter().collect();
|
||||
result?;
|
||||
|
||||
// Create GC root
|
||||
if self.options.create_gc_roots {
|
||||
let job = parent.create_job(JobType::CreateGcRoots, nodes.clone())?;
|
||||
|
|
Loading…
Reference in a new issue