]> xenbits.xensource.com Git - people/liuw/osstest.git/commitdiff
sg-report-host-history: Move per-row endedq query into per-host transaction
authorIan Jackson <ian.jackson@eu.citrix.com>
Wed, 17 Jun 2015 16:35:19 +0000 (17:35 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Thu, 18 Jun 2015 15:31:04 +0000 (16:31 +0100)
No substantial change, but reduces the work done in the main
transaction.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
sg-report-host-history

index bab636e751b46556ff3be5db9a02594a454b96cc..cd9ec61237691b23ef9486ed59a6065bbd533f75 100755 (executable)
@@ -122,29 +122,12 @@ 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 };
+       push @{ $hosts{$jr->{val}} }, $jr;
     }
 }
 
@@ -173,6 +156,14 @@ sub reporthost ($) {
 
     print H "</tr>\n";
 
+    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
@@ -189,18 +180,29 @@ END
         LIMIT 1
 END
 
+    my $inrows = $hosts{$hostname};
+    print DEBUG "FOUND ", (scalar @$inrows), " ROWS for $hostname\n";
+
     my @rows;
-    @rows = @{ $hosts{$hostname} };
+    foreach my $jr (@$inrows) {
+       print DEBUG "JOB $jr->{flight}.$jr->{job}\n";
 
-    print DEBUG "FOUND ", (scalar @rows), " ROWS for $hostname\n";
+       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 @rows, { %$jr, %$endedrow };
+    }
 
     @rows = sort { $b->{finished} <=> $a->{finished} } @rows;
     $#rows = $limit-1 if @rows > $limit;
 
     my $alternate = 0;
     foreach my $jr (@rows) {
-       print DEBUG "JOB $jr->{flight}.$jr->{job}\n";
-
        my $ir = jobquery($infoq, $jr);
        my $ar = jobquery($allocdq, $jr);