diff options
author | Pascal Terjan <pterjan@gmail.com> | 2016-10-04 00:02:21 +0100 |
---|---|---|
committer | Pascal Terjan <pterjan@gmail.com> | 2016-10-04 00:02:26 +0100 |
commit | 21d724e1c82d2d5f562b191a96a1ae2aaadf4a36 (patch) | |
tree | 99a6e569cd619eba2b7914743afda6431b23ef57 | |
parent | 1ec43f5b82dfdd8df7d3324b1c9e33d068a380db (diff) | |
download | iurt-21d724e1c82d2d5f562b191a96a1ae2aaadf4a36.tar iurt-21d724e1c82d2d5f562b191a96a1ae2aaadf4a36.tar.gz iurt-21d724e1c82d2d5f562b191a96a1ae2aaadf4a36.tar.bz2 iurt-21d724e1c82d2d5f562b191a96a1ae2aaadf4a36.tar.xz iurt-21d724e1c82d2d5f562b191a96a1ae2aaadf4a36.zip |
Reorganize code detecting build status
If we can't get status, log a warning and go on.
If status is not ready yet, verify the build is still in progress and
there is no timeout.
Else, analyze the status.
-rwxr-xr-x | ulri | 70 |
1 files changed, 34 insertions, 36 deletions
@@ -277,11 +277,44 @@ foreach my $prefix (keys %pkg_tree) { plog('INFO', "check status: $host/$arch ($bot [$pid])"); my $status = sout($remote, "cat $status_file"); - if (!$status) { + if ($? == 255) { plog('WARN', "failed to get status for $host/$arch"); next bot; } + my $proc_state; + # If we don't get a status, the build should be in progress + if (!$status) { + # Need to differenciate process not running with failure to ssh + chomp($proc_state = sout($remote, "ps h -o state $pid || echo NOT_RUNNING")); + my $seconds = time()-$time; + + # Reasons for failure + my $timeout = $seconds > $config->{faildelay}; + my $zombie = $proc_state eq 'Z'; + my $ended = $proc_state eq 'NOT_RUNNING'; + + unless ($timeout || $zombie || $ended) { + # Everything is fine, build is continuing! + next bot; + } + # TODO: In case of timeout, kill it! + plog('FAIL', "$bot timed out on $host/$arch ($seconds sec) or " . + "it's dead (status $proc_state), removing lock"); + $pkg_tree{$prefix}{media}{$media}{arch}{$arch} = 0; + } + + # Either we are done or we should kill the build + + plog('INFO', "delete lock file for $prefix"); + unlink $lock_file; + + $run{bot}{$host}{$bot} = 0; + + if (!$status) { + next bot; + } + my $success; my $fail; my $later; @@ -359,45 +392,10 @@ foreach my $prefix (keys %pkg_tree) { } } - # - # Handle build failure - # - - my $proc_state; - if (!$success && !$later && !$fail) { - # Need to differenciate process not running with failure to ssh - chomp($proc_state = sout($remote, "ps h -o state $pid || echo NOT_RUNNING")); - } - - my $seconds = time()-$time; - - # Reasons for failure - my $timeout = $seconds > $config->{faildelay}; - my $zombie = $proc_state eq 'Z'; - my $ended = $proc_state eq 'NOT_RUNNING'; - - unless ($success || $later || $fail || $timeout || $zombie || $ended) { - next bot; - } - - plog('INFO', "delete lock file for $prefix"); - unlink $lock_file; - - $run{bot}{$host}{$bot} = 0; - next bot if $later; next bot if $success && !$fail; - if (!$ended && !$fail) { - plog('FAIL', "$bot timed out on $host/$arch ($seconds sec) or " . - "it's dead (status $proc_state), removing lock"); - $pkg_tree{$prefix}{media}{$media}{arch}{$arch} = 0; - next bot; - } - - plog('INFO', "Failure reason: $success || $later || $fail || $timeout || $zombie || $ended"); - plog('FAIL', "build failed"); create_file("$done_dir/${prefix}_$arch.fail", "$bot $host"); make_path($fail_dir); |