[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [OSSTEST PATCH 7/9] ts-hosts-allocate-Executive: Score for equivalent previous failures
On Tue, 2014-11-11 at 19:41 +0000, Ian Jackson wrote: > Look to see whether the last run on any hosts which are equivalent to > the ones we're looking at, failed. This means that when host X is > failing and we are considering host Y which is equivalent to X, we > give Y a selection bonus. > > This means that osstest will be less obsessive about sticking to the > very same failing host. > > Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> > --- > ts-hosts-allocate-Executive | 45 > +++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 43 insertions(+), 2 deletions(-) > > diff --git a/ts-hosts-allocate-Executive b/ts-hosts-allocate-Executive > index 9562a0a..24f78d3 100755 > --- a/ts-hosts-allocate-Executive > +++ b/ts-hosts-allocate-Executive > @@ -284,6 +284,29 @@ END > $findhostsq->execute("blessed-$fi->{intended}"); > } > > + my $equivstatusq= $dbh_tests->prepare(<<END); > + SELECT flight, job, val, status > + FROM flights f > + JOIN jobs j USING (flight) > + JOIN runvars r USING (flight,job) > + WHERE j.job=? > + AND f.blessing=? > + AND f.branch=? > + AND r.name=? > + AND r.val IN ( > + SELECT hostname > + FROM hostflags > + WHERE hostflag IN ( > + SELECT hostflag > + FROM hostflags > + WHERE hostname=? > + AND hostflag LIKE 'equiv-%' > + ) > + ) > + ORDER BY f.started DESC > + LIMIT 1; > +END > + > my @candidates; > my $any=0; > > @@ -342,6 +365,17 @@ END > > find_recent_duration($dbg,$hid,$candrow); > > + if ($candrow->{restype} eq 'host') { > + $equivstatusq->execute($job,$fi->{intended},$fi->{branch}, > + $hid->{Ident},$candrow->{resname}); > + my $esrow = $equivstatusq->fetchrow_hashref(); For the first flight on a new branch (or perhaps a new blessing), this will return an undef, because there is no previous flight to match, won't it? http://search.cpan.org/~timb/DBI-1.632/DBI.pm#fetchrow_hashref says if you get an undef you should check $equivstatusq->err to see if that was due to an error vs. empty result set. Not sure if you'll care given this is all heuristics though. > + $candrow->{EquivMostRecentStatus} = $esrow->{status}; Meaning this will fail, or perhaps just produce a warning. > + print DEBUG "$dbg EQUIV-MOST-RECENT "; > + print DEBUG ("$esrow->{flight}.$esrow->{job}". > + " $esrow->{val} $esrow->{status}") if $esrow; > + print DEBUG ".\n"; And so will these? > + } > + > foreach my $kcomb (qw(Shared-Max-Wear Shared-Max-Tasks)) { > my $kdb= $kcomb; $kdb =~ y/-A-Z/ a-z/; > my $khash= $kcomb; $khash =~ y/-//d; > @@ -362,6 +396,7 @@ END > print DEBUG "$dbg CANDIDATE.\n"; > } > $findhostsq->finish(); > + $equivstatusq->finish(); > > if (!@candidates) { > if (defined $use) { > @@ -455,6 +490,7 @@ sub hid_recurse ($$) { > my $variation_age= 0; > my $duration= undef; > my $previously_failed = 0; > + my $previously_failed_equiv = 0; > foreach my $hid (@hids) { > my $cand= $hid->{Selected}; > my $recentstarted= $cand->{MostRecentStarted}; > @@ -465,6 +501,8 @@ sub hid_recurse ($$) { > defined($cand->{Duration}) && $cand->{Duration} >= $duration; > $previously_failed++ if > ($cand->{MostRecentStatus} // '') eq 'fail'; > + $previously_failed_equiv++ if > + ($cand->{EquivMostRecentStatus} // '') eq 'fail'; > } > my $duration_rightaway_adjust= 0; > > @@ -505,12 +543,15 @@ sub hid_recurse ($$) { > > my $cost= $start_time > + $duration_for_cost > - - $previously_failed * 366*86400 > + - ($previously_failed ==@hids ? 366*86400 : > + $previously_failed_equiv==@hids ? 365*86400 : > + 0) You've dropped the behaviour of multiplying 366*86400 by $previously_failed, was that intentional? I think you've also gone to giving a bonus at all only if all @hids previously failed, instead of just at least one of them. > + ($previously_failed ? + $variation_age * 10 : - $variation_age / > 30) > - $share_reuse * 10000; > > print DEBUG "$dbg FINAL start=$start_time va=$variation_age". > - " previously_failed=$previously_failed cost=$cost\n"; > + " previously_failed=$previously_failed". > + " previously_failed_equiv=$previously_failed_equiv cost=$cost\n"; > > if (!defined $best || $cost < $best->{Cost}) { > print DEBUG "$dbg FINAL BEST: ". _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |