[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 21/25] sg-report-host-history: Aggregate runvars query for all hosts
This is much faster. It might short-change unpopular hosts rather; hence the change of the limit fudge factor from 2 to 3. Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- sg-report-host-history | 96 +++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/sg-report-host-history b/sg-report-host-history index b3ef63e..bab636e 100755 --- a/sg-report-host-history +++ b/sg-report-host-history @@ -23,6 +23,7 @@ use DBI; use Osstest; use IO::Handle; use HTML::Entities; +use POSIX; use Osstest::Executive qw(:DEFAULT :colours); @@ -103,6 +104,50 @@ sub jobquery ($$) { return $q->fetchrow_hashref(); } +our %hosts; + +sub mainquery () { + our $valcond = join " OR ", map { "val = ?" } keys %hosts; + our @params = keys %hosts; + + our $runvarq //= db_prepare(<<END); + SELECT flight, job, name, val + FROM runvars + WHERE $namecond + AND ($valcond) + AND $flightcond + ORDER BY flight DESC + LIMIT ($limit * 3 + 100) * ? +END + + push @params, scalar keys %hosts; + + our $endedq //= db_prepare(<<END); + SELECT finished, testid, status AS laststepstatus + FROM steps + WHERE flight=? AND job=? AND finished IS NOT NULL + ORDER BY finished DESC + LIMIT 1 +END + + $runvarq->execute(@params); + + print DEBUG "FIRST PASS\n"; + while (my $jr= $runvarq->fetchrow_hashref()) { + print DEBUG "JOB $jr->{flight}.$jr->{job} "; + + my $endedrow = jobquery($endedq, $jr); + if (!$endedrow) { + print DEBUG "no-finished\n"; + next; + } + print DEBUG join " ", map { $endedrow->{$_} } sort keys %$endedrow; + print DEBUG ".\n"; + + push @{ $hosts{$jr->{val}} }, { %$jr, %$endedrow }; + } +} + sub reporthost ($) { my ($hostname) = @_; @@ -128,24 +173,6 @@ sub reporthost ($) { print H "</tr>\n"; - our $runvarq //= db_prepare(<<END); - SELECT flight, job, name, val - FROM runvars - WHERE $namecond - AND val = ? - AND $flightcond - ORDER BY flight DESC - LIMIT $limit * 2 + 100 -END - - our $endedq //= db_prepare(<<END); - SELECT finished, testid, status AS laststepstatus - FROM steps - WHERE flight=? AND job=? AND finished IS NOT NULL - ORDER BY finished DESC - LIMIT 1 -END - our $infoq //= db_prepare(<<END); SELECT blessing, branch, intended, status FROM flights @@ -162,27 +189,10 @@ END LIMIT 1 END - print DEBUG "QUERYING RUNVARS FOR $hostname\n"; - my @rows; - $runvarq->execute($hostname); - - print DEBUG "FIRST PASS\n"; - while (my $jr= $runvarq->fetchrow_hashref()) { - print DEBUG "JOB $jr->{flight}.$jr->{job} "; - - my $endedrow = jobquery($endedq, $jr); - if (!$endedrow) { - print DEBUG "no-finished\n"; - next; - } - print DEBUG join " ", map { $endedrow->{$_} } sort keys %$endedrow; - print DEBUG ".\n"; + @rows = @{ $hosts{$hostname} }; - push @rows, { %$jr, %$endedrow }; - } - - print DEBUG "FOUND ", (scalar @rows), " ROWS\n"; + print DEBUG "FOUND ", (scalar @rows), " ROWS for $hostname\n"; @rows = sort { $b->{finished} <=> $a->{finished} } @rows; $#rows = $limit-1 if @rows > $limit; @@ -251,8 +261,6 @@ $dbh_tests->do("SET LOCAL enable_seqscan=false"); # of the runvars table, rather than walking backwards through the # flights until it has what we've told it is enough. -our %hosts; - foreach my $host (@ARGV) { if ($host =~ m/^flight:/) { my $flight=$'; #'; @@ -265,16 +273,22 @@ foreach my $host (@ARGV) { END $hostsinflightq->execute($flight); while (my $row = $hostsinflightq->fetchrow_hashref()) { - $hosts{$row->{val}}++; + $hosts{$row->{val}} = [ ]; } }); } elsif ($host !~ m/:/) { - $hosts{$host}++; + $hosts{$host} = [ ]; } else { die "$host ?"; } } +exit 0 unless %hosts; + +db_retry($dbh_tests, [qw(flights)], sub { + mainquery(); +}); + foreach my $host (sort keys %hosts) { db_retry($dbh_tests, [qw(flights)], sub { reporthost $host; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |