build-remote: Fix missing log output

The storeUri variable in the build-remote hook is declared very much to
the start of the main function and a bunch of lines later, the same
variable gets checked via hasPrefix() but it gets assigned *after* that
check when the most suitable machine for the build was choosen.

So I guess this was just a typo in d16fd24973
and what we really want is to either checkd the prefix *after* assigning
storeUri or use bestMachine->storeUri directly.

I choose the latter, because the former could introduce even more
regressions if the try block where the variable gets assigned terminates
early.

Nevertheless, the reason why the log output didn't work is because
hasPrefix() checked for "ssh://" in front of storeUri, but if the
storeUri isn't set correctly (or at all), we don't get the log file
descriptor set up properly, leading to no log output.

I've adjusted the remote-builds test to include a regression test for
this, so that we can make sure we get a build output when using remote
builds.

In addition to that I've tested this with two of my build farms and the
build logs are emitted correctly again.

Signed-off-by: aszlig <aszlig@nix.build>
This commit is contained in:
aszlig 2017-11-25 01:03:23 +01:00
parent 549c3706a5
commit 6567ab95a0
No known key found for this signature in database
GPG key ID: 684089CE67EBB691
2 changed files with 5 additions and 2 deletions

View file

@ -177,7 +177,7 @@ int main (int argc, char * * argv)
Activity act(*logger, lvlTalkative, actUnknown, fmt("connecting to '%s'", bestMachine->storeUri)); Activity act(*logger, lvlTalkative, actUnknown, fmt("connecting to '%s'", bestMachine->storeUri));
Store::Params storeParams; Store::Params storeParams;
if (hasPrefix(storeUri, "ssh://")) { if (hasPrefix(bestMachine->storeUri, "ssh://")) {
storeParams["max-connections"] ="1"; storeParams["max-connections"] ="1";
storeParams["log-fd"] = "4"; storeParams["log-fd"] = "4";
if (bestMachine->sshKey != "") if (bestMachine->sshKey != "")

View file

@ -85,7 +85,10 @@ in
} }
# Perform a build and check that it was performed on the slave. # Perform a build and check that it was performed on the slave.
my $out = $client->succeed("nix-build ${expr nodes.client.config 1}"); my $out = $client->succeed(
"nix-build ${expr nodes.client.config 1} 2> build-output",
"grep -q Hello build-output"
);
$slave1->succeed("test -e $out"); $slave1->succeed("test -e $out");
# And a parallel build. # And a parallel build.