[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[OSSTEST PATCH 28/60] parallel by fork: Break out into HistoryReport


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
  • Date: Fri, 14 Aug 2020 18:21:33 +0100
  • Authentication-results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
  • Delivery-date: Fri, 14 Aug 2020 17:26:53 +0000
  • Ironport-sdr: H79NiA21cInK6e0sIQdd3fn5GZjwVzTGAcsKvJYwZIBjmmzdHsCd//5N88AGM2KIvI1jJq3R3Y NCZRWfyzXAg5TTzinxlVcOByTQJJoPbxKesN6t1UegR1C2pm2SMXDkBhPSDRsRQyrc79U06Uu+ MLNoJmPTyY+26W5ImrojK2gR6xl5RFmQW/gXdFlULgf/bptrn7qrBeIqkosmc6nqyER0j1MUHi Fukm/T82xwL4Iqai6OzYih9SmFPEEHK/oShfXP2OsF/Z36rmY8L+0kNaAnmlwzZb9lHewVc9if HpM=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Move this code from sg-report-host-history to HistoryReport, so that
it can be reused.

No significant functional change.  Some changes to debug messages.

Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
 Osstest/HistoryReport.pm | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
 sg-report-host-history   | 49 +++++++++-------------------------------------
 2 files changed, 60 insertions(+), 40 deletions(-)

diff --git a/Osstest/HistoryReport.pm b/Osstest/HistoryReport.pm
index 6a23cfba..0b206de4 100644
--- a/Osstest/HistoryReport.pm
+++ b/Osstest/HistoryReport.pm
@@ -19,6 +19,9 @@ package Osstest::HistoryReport;
 use strict;
 use warnings;
 
+use Osstest;
+use Osstest::Executive;
+
 BEGIN {
     use Exporter ();
     our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
@@ -32,6 +35,7 @@ BEGIN {
                         cacheable_fn
                         cache_write_entry
                         cache_finish
+                        parallel_by_fork
                    );
     %EXPORT_TAGS = ();
 
@@ -213,4 +217,51 @@ sub cache_finish ($$) {
     print ::DEBUG " extra=$rows_extra\n";
 }
 
+our %children;
+our $worst = 0;
+our $whoami;
+
+sub wait_for_max_children ($) {
+    my ($lim) = @_;
+    while (keys(%children) > $lim) {
+       $!=0; $?=0; my $got = wait;
+       die "$! $got $?" unless exists $children{$got};
+       my $host = $children{$got};
+       delete $children{$got};
+       $worst = $? if $? > $worst;
+       if ($?) {
+           print STDERR $whoami."[$$]: [$got] failed for $host: $?\n";
+       } else {
+           print ::DEBUG "REAPED [$got] $host\n";
+       }
+    }
+}
+
+sub parallel_by_fork ($$$$) {
+    my ($set_whoami, $maxjobs, $tasks, $fn) = @_;
+    # does   $fn->($_) foreach @$tasks
+    # but in parallal and then exits.
+    # entries in @$taskarray should be suitable for print in messages.
+    # db is reopened in each child.
+
+    $whoami = $set_whoami;
+    undef $dbh_tests;
+
+    foreach my $task (@$tasks) {
+       wait_for_max_children($maxjobs);
+
+       my $pid = fork // die $!;
+       if (!$pid) {
+           opendb_tests();
+           $fn->($task);
+           exit 0;
+       }
+       print ::DEBUG "SPAWNED [$pid] $task\n";
+       $children{$pid} = $task;
+    }
+
+    wait_for_max_children(0);
+    exit $worst;
+}
+
 1;
diff --git a/sg-report-host-history b/sg-report-host-history
index 6bf14aa2..0a2e9904 100755
--- a/sg-report-host-history
+++ b/sg-report-host-history
@@ -377,43 +377,12 @@ db_retry($dbh_tests, [], sub {
     computeflightsrange();
 });
 
-undef $dbh_tests;
-
-our %children;
-our $worst = 0;
-
-sub wait_for_max_children ($) {
-    my ($lim) = @_;
-    while (keys(%children) > $lim) {
-       $!=0; $?=0; my $got = wait;
-       die "$! $got $?" unless exists $children{$got};
-       my $host = $children{$got};
-       delete $children{$got};
-       $worst = $? if $? > $worst;
-       if ($?) {
-           print STDERR "sg-report-flight[: [$got] failed for $host: $?\n";
-       } else {
-           print DEBUG "REAPED [$got] $host\n";
-       }
-    }
-}
-
-foreach my $host (sort keys %hosts) {
-    wait_for_max_children($maxjobs);
-
-    my $pid = fork // die $!;
-    if (!$pid) {
-       opendb_tests();
-       cache_read_previous("$htmlout/$host.html") if $read_previous;
-       db_retry($dbh_tests, [], sub {
-            mainquery($host);
-           reporthost $host;
-       });
-       exit(0);
-    }
-    print DEBUG "SPAWNED [$pid] $host\n";
-    $children{$pid} = $host;
-}
-
-wait_for_max_children(0);
-exit $worst;
+parallel_by_fork('sg-report-flight', $maxjobs, [ sort keys %hosts ], sub {
+    my ($host) = @_;
+    cache_read_previous("$htmlout/$host.html") if $read_previous;
+    db_retry($dbh_tests, [], sub {
+        mainquery($host);
+       reporthost $host;
+    });
+    exit(0);
+});
-- 
2.11.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.