]> xenbits.xensource.com Git - osstest.git/log
osstest.git
4 years agoparallel by fork: Break out into HistoryReport
Ian Jackson [Tue, 4 Aug 2020 17:10:25 +0000 (18:10 +0100)]
parallel by fork: Break out into HistoryReport

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@eu.citrix.com>
4 years agosg-report-host-history: Write cache entry for unfinished jobs
Ian Jackson [Tue, 4 Aug 2020 15:20:49 +0000 (16:20 +0100)]
sg-report-host-history: Write cache entry for unfinished jobs

We have to also check ->{finished}, rather than the existence of a row
at all, since now unfinished jobs can appear in the cache.

Because the cache key includes the job status, when the job becomes
finished the cache entry will be invalidated.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting: Improve an error message slightly
Ian Jackson [Tue, 4 Aug 2020 14:35:31 +0000 (15:35 +0100)]
history reporting: Improve an error message slightly

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting: Print debug for cache misses
Ian Jackson [Tue, 4 Aug 2020 16:48:50 +0000 (17:48 +0100)]
history reporting: Print debug for cache misses

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting: Cache data limit now in History module
Ian Jackson [Tue, 4 Aug 2020 16:49:55 +0000 (17:49 +0100)]
history reporting: Cache data limit now in History module

Replace the ad-hoc query-specific limit strategy in
sg-report-host-history with a new, more principled, arrangement, in
HistoryReport.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Documentation for the new module
Ian Jackson [Wed, 5 Aug 2020 12:09:59 +0000 (13:09 +0100)]
history reporting (nfc): Documentation for the new module

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting: Skip undefined keys
Ian Jackson [Tue, 4 Aug 2020 13:41:09 +0000 (14:41 +0100)]
history reporting: Skip undefined keys

This makes it work if the caller's cached hash contains an key which
is bound to undef.

sg-report-host-history already does this, which currently causes:

 Use of uninitialized value $_ in substitution (s///) at Osstest/HistoryReport.pm line 134.
 Use of uninitialized value $_ in printf at Osstest/HistoryReport.pm line 135.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Rename some module variables, remove "cache"
Ian Jackson [Tue, 4 Aug 2020 17:22:20 +0000 (18:22 +0100)]
history reporting (nfc): Rename some module variables, remove "cache"

This makes the code terser and easier to read.  No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Move cache code into HistoryReport module
Ian Jackson [Wed, 5 Aug 2020 11:41:09 +0000 (12:41 +0100)]
history reporting (nfc): Move cache code into HistoryReport module

Finally this is now reuseable code and we can put it in the
HistoryReport module.

Pure cut-and-paste.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Introduce empty HistoryReport module
Ian Jackson [Tue, 4 Aug 2020 17:31:40 +0000 (18:31 +0100)]
history reporting (nfc): Introduce empty HistoryReport module

This is the boilerplate.  Code will appear in it in a moment.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Remove now-obsolete stats variables
Ian Jackson [Wed, 5 Aug 2020 12:04:41 +0000 (13:04 +0100)]
history reporting (nfc): Remove now-obsolete stats variables

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting: Cache stats reporting: Centralise and rework
Ian Jackson [Wed, 5 Aug 2020 12:09:54 +0000 (13:09 +0100)]
history reporting: Cache stats reporting: Centralise and rework

This uses the new variables instead of the old ones.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Record more row-specific stats
Ian Jackson [Wed, 5 Aug 2020 12:09:01 +0000 (13:09 +0100)]
history reporting (nfc): Record more row-specific stats

Prep work.  Nothing uses these yet.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Introduce cache_set_key_cols
Ian Jackson [Tue, 4 Aug 2020 17:42:21 +0000 (18:42 +0100)]
history reporting (nfc): Introduce cache_set_key_cols

This setter function will be needed when this becomes its own module.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Use cacheable_fn for power methods
Ian Jackson [Tue, 4 Aug 2020 17:39:46 +0000 (18:39 +0100)]
history reporting (nfc): Use cacheable_fn for power methods

Avoids open-coding knowledge of the $jr convention at this use site.
%powers becomes %$powers, so it's a bit noisy.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Move cacheable_* further up the file
Ian Jackson [Wed, 5 Aug 2020 12:04:33 +0000 (13:04 +0100)]
history reporting (nfc): Move cacheable_* further up the file

Pure code motion.  Brings these together with the other work-cacheing
code.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Record query-specific stats
Ian Jackson [Wed, 5 Aug 2020 11:55:41 +0000 (12:55 +0100)]
history reporting (nfc): Record query-specific stats

Prep work.  Nothing uses these yet.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Rename $cachehits to $rows_hit
Ian Jackson [Wed, 5 Aug 2020 11:55:31 +0000 (12:55 +0100)]
history reporting (nfc): Rename $cachehits to $rows_hit

Prep work.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Bind by name in cacheable_query
Ian Jackson [Tue, 4 Aug 2020 17:19:57 +0000 (18:19 +0100)]
history reporting (nfc): Bind by name in cacheable_query

cacheable_query used to simply pass $jr->{flight} and ->{job}.  But we
want this to be reuseable for other kinds of query, with different
cache keys.

So bind by name: we expect the caller to use :name placeholders in the
query.  We can then look through the prepared query parameters, and
fish the corresponding values out of $jr.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Provide cacheable_fn
Ian Jackson [Tue, 4 Aug 2020 17:17:08 +0000 (18:17 +0100)]
history reporting (nfc): Provide cacheable_fn

Prep work.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Rename "existing" to "previous"
Ian Jackson [Tue, 4 Aug 2020 17:07:34 +0000 (18:07 +0100)]
history reporting (nfc): Rename "existing" to "previous"

This seems more idiomatic use of English.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Break out cache_row_lookup_prep
Ian Jackson [Tue, 4 Aug 2020 17:03:49 +0000 (18:03 +0100)]
history reporting (nfc): Break out cache_row_lookup_prep

Prep work.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Rename jobquery to cacheable_query
Ian Jackson [Tue, 4 Aug 2020 17:00:27 +0000 (18:00 +0100)]
history reporting (nfc): Rename jobquery to cacheable_query

Prep work.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Make cache_write_entry into a top-level sub
Ian Jackson [Fri, 31 Jul 2020 17:30:23 +0000 (18:30 +0100)]
history reporting (nfc): Make cache_write_entry into a top-level sub

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Refactor to generalise, cache_read_existing
Ian Jackson [Wed, 5 Aug 2020 12:23:41 +0000 (13:23 +0100)]
history reporting (nfc): Refactor to generalise, cache_read_existing

* Introduce @cache_row_key_cols and cache_row_key
* Handle $html_file pathname construction and $read_existing
  at the call site.
* Rename cache_read_existing.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting: Delete two debug prints
Ian Jackson [Wed, 5 Aug 2020 12:23:36 +0000 (13:23 +0100)]
history reporting: Delete two debug prints

These are going to become invalid and I don't think it's important to
save them.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Add some test runes to the notes
Ian Jackson [Tue, 4 Aug 2020 11:44:09 +0000 (12:44 +0100)]
history reporting (nfc): Add some test runes to the notes

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agohistory reporting (nfc): Do not key cache on hostname any more
Ian Jackson [Fri, 31 Jul 2020 16:54:57 +0000 (17:54 +0100)]
history reporting (nfc): Do not key cache on hostname any more

Now we process only one host at a time, so we don't need to
distinguish.

Replace all references to $tcache with %cache.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoproduction-config: Use infra.t, not infra
Ian Jackson [Tue, 18 Aug 2020 15:43:29 +0000 (16:43 +0100)]
production-config: Use infra.t, not infra

This works better with some quirk of the networking we seem to now
have after the buster upgrade to the colo systems.

To avoid blocking on resolving that issue, change the the config.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agomg-allocate: Do not override multiple -l if no arguments
Ian Jackson [Tue, 18 Aug 2020 13:52:07 +0000 (14:52 +0100)]
mg-allocate: Do not override multiple -l if no arguments

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agotcl: JobDB: Do not require particular Pgtcl version
Ian Jackson [Mon, 17 Aug 2020 17:56:49 +0000 (18:56 +0100)]
tcl: JobDB: Do not require particular Pgtcl version

This just serves to complicate upgrades.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoTcl: Use tclsh8.6
Ian Jackson [Mon, 17 Aug 2020 17:45:43 +0000 (18:45 +0100)]
Tcl: Use tclsh8.6

This is needed to run on buster.

I have checked that tclsh8.6 and TclX works on osstest.test-lab.  TclX
seems to be provided by tcl8.4 but work with tcl8.6 (at least on
buster).

Deployment note: hosts running earlier Debian (including
osstest.xs.citrite.net, the Citrix Cambridge instance), may need
OSSTEST_DAEMON_TCLSH=tclsh8.4 or similar in ~/.xen-osstest/settings.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
4 years agosg-report-flight: Use WITH OFFSET 0 for optimisation fence
Ian Jackson [Fri, 14 Aug 2020 11:35:26 +0000 (12:35 +0100)]
sg-report-flight: Use WITH OFFSET 0 for optimisation fence

I am not best pleased.

CC: George Dunlap <George.Dunlap@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoSQL: Change "... LIKE '...\_...' ..." to "... LIKE '...\\_...' ..."
Ian Jackson [Mon, 10 Aug 2020 15:19:16 +0000 (16:19 +0100)]
SQL: Change "... LIKE '...\_...' ..." to "... LIKE '...\\_...' ..."

Perl's "" quotes, and corresponding <<END constructs, do
\-interpolation, so remove these \ which we carefully added in
   e7a408dd01184df0a57ae5d9072d15225c52a99f
   SQL: Change LIKE E'...\\_...' to LIKE '...\_...'

This is only not a performance problem due to query mismathes with the
available indices, because the test indices are still present in the
Massachusetts instance.

I have verified that this has the intended chanve everywhere by
 1. Double-checking that eacbh of these instances is within <<END
    or "" or equivalent.
 2. Running git-ls-files | xargs perl -i -pe 's/\\\\_/\\_/g'
    and manually examining the diff against this patch's parent.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agotiming traces: cri-args-hostlists: Add some timestamps
Ian Jackson [Mon, 10 Aug 2020 10:52:44 +0000 (11:52 +0100)]
timing traces: cri-args-hostlists: Add some timestamps

Pass --report-processing-start-time, and add some calls to date >&2.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agotiming traces: Executive: Provide processing timestamp facilities
Ian Jackson [Mon, 10 Aug 2020 10:46:02 +0000 (11:46 +0100)]
timing traces: Executive: Provide processing timestamp facilities

Nothing uses these yet.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agotiming traces: sg-check-tested: Add prints of (show_abs_time time)
Ian Jackson [Mon, 10 Aug 2020 10:45:44 +0000 (11:45 +0100)]
timing traces: sg-check-tested: Add prints of (show_abs_time time)

More tools to see where it is faffing too much.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agotiming traces: cr-daily-branch: Add more calls to date >&2
Ian Jackson [Mon, 10 Aug 2020 10:45:10 +0000 (11:45 +0100)]
timing traces: cr-daily-branch: Add more calls to date >&2

More tools to see where it is faffing too much.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agotiming traces: cr-publish-flight-logs: Report more progress
Ian Jackson [Mon, 10 Aug 2020 10:31:34 +0000 (11:31 +0100)]
timing traces: cr-publish-flight-logs: Report more progress

More tools to see where it is faffing too much.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: Fix ( ) syntax with +

4 years agocr-publish-flight-logs: Make a proper option parser
Ian Jackson [Mon, 10 Aug 2020 10:27:11 +0000 (11:27 +0100)]
cr-publish-flight-logs: Make a proper option parser

I was going to add another option but changed my mind.  But, let's
keep this patch anyway.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoInstall libtirpc-dev for libvirt builds
Jim Fehlig [Thu, 23 Jul 2020 21:31:34 +0000 (22:31 +0100)]
Install libtirpc-dev for libvirt builds

The check for XDR support was changed in libvirt commit d7147b3797
to use libtirpc pkg-config instead of complicated AC_CHECK_LIB,
AC_COMPILE_IFELSE, et. al. logic. The libvirt OSSTEST has been
failing since this change hit libvirt.git master. Fix it by adding
libtirpc-dev to the list of 'extra_packages' installed for libvirt
builds.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agocri-args-hostlists: Add some calls to date(1)
Ian Jackson [Tue, 4 Aug 2020 11:43:44 +0000 (12:43 +0100)]
cri-args-hostlists: Add some calls to date(1)

This will make it easier to see perf changes etc.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoduration_estimator: Clarify recentflights query a bit
Ian Jackson [Fri, 31 Jul 2020 10:43:55 +0000 (11:43 +0100)]
duration_estimator: Clarify recentflights query a bit

The condition on r.job is more naturally thought of as a join
condition than a where condition.  (This is an inner join, so the
semantics are identical.)

Also, for clarity, swap the flight and job conditions round, so that
the ON clause is a series of r.thing = otherthing.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
---
v3: Fix daft syntax error.
v2: New patch.

4 years agocs-bisection-step: Lay out the revision tuple graph once
Ian Jackson [Fri, 24 Jul 2020 18:27:28 +0000 (19:27 +0100)]
cs-bisection-step: Lay out the revision tuple graph once

The graph layout algorithm is not very fast, particularly if the
revision graph is big.  In my test case this saves about 10s.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agocs-bisection-step: Add a debug print when we run dot(1)
Ian Jackson [Fri, 24 Jul 2020 18:24:37 +0000 (19:24 +0100)]
cs-bisection-step: Add a debug print when we run dot(1)

Amongst other things this was useful for perf investigation.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agoSQL: Change LIKE E'...\\_...' to LIKE '...\_...'
Ian Jackson [Mon, 27 Jul 2020 11:43:45 +0000 (12:43 +0100)]
SQL: Change LIKE E'...\\_...' to LIKE '...\_...'

E'...' means to interpret \-escapes.  But we don't want them: without
E, we can avoid some toothpick-doubling.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agocs-bisection-step: temporary table: Insert only rows we care about
Ian Jackson [Fri, 24 Jul 2020 18:13:22 +0000 (19:13 +0100)]
cs-bisection-step: temporary table: Insert only rows we care about

Every use of this table has a WHERE or ON which invokes at least one
of these conditions.  So put only those rows into the table.

This provides a significant speedup (which I haven't properly
measured).

No overall functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agocs-bisection-step: Use db_prepare a few times instead of ->do
Ian Jackson [Fri, 24 Jul 2020 18:03:40 +0000 (19:03 +0100)]
cs-bisection-step: Use db_prepare a few times instead of ->do

With $dbh_tests->do(...), we can only get a debug trace of the queries
by using DBI_TRACE which produces voluminous output.  Using our own
db_prepare invokes our own debugging.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agocs-bisection-step: Break out qtxt_common_ok
Ian Jackson [Fri, 31 Jul 2020 11:06:41 +0000 (12:06 +0100)]
cs-bisection-step: Break out qtxt_common_ok

Make this bit of query into a subref which takes a $table argument.

No change to the generated query.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agocs-bisection-step: Move an AND
Ian Jackson [Fri, 31 Jul 2020 11:06:38 +0000 (12:06 +0100)]
cs-bisection-step: Move an AND

This obviously-fine change makes the next commit easier to review.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agocs-bisection-step: Generalise qtxt_common_rev_ok
Ian Jackson [Mon, 27 Jul 2020 11:22:51 +0000 (12:22 +0100)]
cs-bisection-step: Generalise qtxt_common_rev_ok

* Make it into a subref which takes a $table argument.
* Change the two references into function calls using the @{...} syntax
* Move the definition earlier in the file

No change to the generated query.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: New patch.

4 years agoadhoc-revtuple-generator: Fix an undef warning in a debug print
Ian Jackson [Fri, 24 Jul 2020 18:09:04 +0000 (19:09 +0100)]
adhoc-revtuple-generator: Fix an undef warning in a debug print

$parents might be undef here.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
New in v2.

4 years agosg-report-host-history: Fork
Ian Jackson [Fri, 24 Jul 2020 16:02:57 +0000 (17:02 +0100)]
sg-report-host-history: Fork

Run each host's report in a separate child.  This is considerably
faster.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Drop a redundznt AND clause
Ian Jackson [Fri, 24 Jul 2020 16:17:24 +0000 (17:17 +0100)]
sg-report-host-history: Drop a redundznt AND clause

This condition is the same as $flightcond.  (This has no effect on the
db performance since the query planner figures it out, but it is
confusing.)

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Rerganisation: Change loops
Ian Jackson [Fri, 24 Jul 2020 15:52:10 +0000 (16:52 +0100)]
sg-report-host-history: Rerganisation: Change loops

Move the per-host code all into the same per-host loop.  One effect is
to transpose the db_retry and host loops for mainquery.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Rerganisation: Read old logs later
Ian Jackson [Fri, 24 Jul 2020 15:51:28 +0000 (16:51 +0100)]
sg-report-host-history: Rerganisation: Read old logs later

Perhaps at one point something read from these logs influenced the db
query for thye flights range, but that is no longer the case and it
doesn't seem likely to need to come back.

We want to move the per-host stuff together.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Rerganisation: Make mainquery per-host
Ian Jackson [Fri, 24 Jul 2020 15:50:07 +0000 (16:50 +0100)]
sg-report-host-history: Rerganisation: Make mainquery per-host

This moves the loop over hosts into the main program.  We are working
our way to a new code structure.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Do the main query per host
Ian Jackson [Fri, 24 Jul 2020 15:11:49 +0000 (16:11 +0100)]
sg-report-host-history: Do the main query per host

In f6001d628c3b3fd42b10cd15351981a04bc02572 we combined these
queries into one:
  sg-report-host-history: Aggregate runvars query for all hosts

Now that we have an index, there is a faster way for the db to do this
query: via that index.  But it doesn't like to do that if be aggregate
the queries.  Experimentally, doing this query separately once per
host is significantly faster.

Also, later, it will allow us to parallelise this work.

So, we undo that.  (Not by reverting, though.)

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: Use proper \ escaping for underscores in LIKE

4 years agosg-report-host-history: Add a debug print after sorting jobs
Ian Jackson [Fri, 24 Jul 2020 15:45:23 +0000 (16:45 +0100)]
sg-report-host-history: Add a debug print after sorting jobs

This helps rule this sort out as a source of slowness.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoExecutive: Export opendb_tests
Ian Jackson [Fri, 24 Jul 2020 16:05:58 +0000 (17:05 +0100)]
Executive: Export opendb_tests

sg-report-host-history is going to want this in a moment

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Drop per-job debug etc.
Ian Jackson [Fri, 24 Jul 2020 13:11:46 +0000 (14:11 +0100)]
sg-report-host-history: Drop per-job debug etc.

This printing has a significant effect on the performance of this
program, at least after we optimise various other things.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-host-history: Find flight limit by flight start date
Ian Jackson [Fri, 24 Jul 2020 13:05:27 +0000 (14:05 +0100)]
sg-report-host-history: Find flight limit by flight start date

By default we look for anything in (roughly) the last year.

This query is in fact quite fast because the flights table is small.

There is still the per-host limit of $limit (2000) recent runs.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoExecutive: Drop redundant AND clause
Ian Jackson [Wed, 22 Jul 2020 14:08:33 +0000 (15:08 +0100)]
Executive: Drop redundant AND clause

In "Executive: Use index for report__find_test" we changed an EXISTS
subquery into a JOIN.

Now, the condition r.flight=f.flight is redundant because this is the
join column (from USING).

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
4 years agoduration_estimator: Move duration query loop into database
Ian Jackson [Tue, 21 Jul 2020 14:36:11 +0000 (15:36 +0100)]
duration_estimator: Move duration query loop into database

Stuff the two queries together: we use the firsty query as a WITH
clause.  This is significantly faster, perhaps because the query
optimiser does a better job but probably just because it saves on
round trips.

No functional change.

Perf: subjectively this seemed to help when the cache was cold.  Now I
have a warm cache and it doesn't seem to make much difference.

Perf: runtime of my test case now ~5-7s.

Example queries before (from the debugging output):

 Query A part I:

            SELECT f.flight AS flight,
                   j.job AS job,
                   f.started AS started,
                   j.status AS status
                     FROM flights f
                     JOIN jobs j USING (flight)
                     JOIN runvars r
                             ON  f.flight=r.flight
                            AND  r.name=?
                    WHERE  j.job=r.job
                      AND  f.blessing=?
                      AND  f.branch=?
                      AND  j.job=?
                      AND  r.val=?
                      AND  (j.status='pass' OR j.status='fail'
                           OR j.status='truncated'!)
                      AND  f.started IS NOT NULL
                      AND  f.started >= ?
                 ORDER BY f.started DESC

 With bind variables:
     "test-amd64-i386-xl-pvshim"
     "guest-start"

 Query B part I:

            SELECT f.flight AS flight,
                   s.job AS job,
                   NULL as started,
                   NULL as status,
                   max(s.finished) AS max_finished
                      FROM steps s JOIN flights f
                        ON s.flight=f.flight
                     WHERE s.job=? AND f.blessing=? AND f.branch=?
                       AND s.finished IS NOT NULL
                       AND f.started IS NOT NULL
                       AND f.started >= ?
                     GROUP BY f.flight, s.job
                     ORDER BY max_finished DESC

 With bind variables:
    "test-armhf-armhf-libvirt"
    'real'
    "xen-unstable"
    1594144469

 Query common part II:

        WITH tsteps AS
        (
            SELECT *
              FROM steps
             WHERE flight=? AND job=?
        )
        , tsteps2 AS
        (
            SELECT *
              FROM tsteps
             WHERE finished <=
                     (SELECT finished
                        FROM tsteps
                       WHERE tsteps.testid = ?)
        )
        SELECT (
            SELECT max(finished)-min(started)
              FROM tsteps2
          ) - (
            SELECT sum(finished-started)
              FROM tsteps2
             WHERE step = 'ts-hosts-allocate'
          )
                AS duration

 With bind variables from previous query, eg:
     152045
     "test-armhf-armhf-libvirt"
     "guest-start.2"

After:

 Query A (combined):

            WITH f AS (
            SELECT f.flight AS flight,
                   j.job AS job,
                   f.started AS started,
                   j.status AS status
                     FROM flights f
                     JOIN jobs j USING (flight)
                     JOIN runvars r
                             ON  f.flight=r.flight
                            AND  r.name=?
                    WHERE  j.job=r.job
                      AND  f.blessing=?
                      AND  f.branch=?
                      AND  j.job=?
                      AND  r.val=?
                      AND  (j.status='pass' OR j.status='fail'
                           OR j.status='truncated'!)
                      AND  f.started IS NOT NULL
                      AND  f.started >= ?
                 ORDER BY f.started DESC

            )
            SELECT flight, job, started, status,
            (
        WITH tsteps AS
        (
            SELECT *
              FROM steps
             WHERE flight=f.flight AND job=f.job
        )
        , tsteps2 AS
        (
            SELECT *
              FROM tsteps
             WHERE finished <=
                     (SELECT finished
                        FROM tsteps
                       WHERE tsteps.testid = ?)
        )
        SELECT (
            SELECT max(finished)-min(started)
              FROM tsteps2
          ) - (
            SELECT sum(finished-started)
              FROM tsteps2
             WHERE step = 'ts-hosts-allocate'
          )
                AS duration

            ) FROM f

 Query B (combined):

            WITH f AS (
            SELECT f.flight AS flight,
                   s.job AS job,
                   NULL as started,
                   NULL as status,
                   max(s.finished) AS max_finished
                      FROM steps s JOIN flights f
                        ON s.flight=f.flight
                     WHERE s.job=? AND f.blessing=? AND f.branch=?
                       AND s.finished IS NOT NULL
                       AND f.started IS NOT NULL
                       AND f.started >= ?
                     GROUP BY f.flight, s.job
                     ORDER BY max_finished DESC

            )
            SELECT flight, job, started, status,
            (
        WITH tsteps AS
        (
            SELECT *
              FROM steps
             WHERE flight=f.flight AND job=f.job
        )
        , tsteps2 AS
        (
            SELECT *
              FROM tsteps
             WHERE finished <=
                     (SELECT finished
                        FROM tsteps
                       WHERE tsteps.testid = ?)
        )
        SELECT (
            SELECT max(finished)-min(started)
              FROM tsteps2
          ) - (
            SELECT sum(finished-started)
              FROM tsteps2
             WHERE step = 'ts-hosts-allocate'
          )
                AS duration

            ) FROM f

Diff for query A:

@@ -1,3 +1,4 @@
+            WITH f AS (
             SELECT f.flight AS flight,
                    j.job AS job,
                    f.started AS started,
@@ -18,11 +19,14 @@
                       AND  f.started >= ?
                  ORDER BY f.started DESC

+            )
+            SELECT flight, job, started, status,
+            (
        WITH tsteps AS
         (
             SELECT *
               FROM steps
-             WHERE flight=? AND job=?
+             WHERE flight=f.flight AND job=f.job
         )
         , tsteps2 AS
         (
@@ -42,3 +46,5 @@
              WHERE step = 'ts-hosts-allocate'
           )
                 AS duration
+
+            ) FROM f

Diff for query B:

@@ -1,3 +1,4 @@
+            WITH f AS (
             SELECT f.flight AS flight,
                    s.job AS job,
                    NULL as started,
@@ -12,11 +13,14 @@
                      GROUP BY f.flight, s.job
                      ORDER BY max_finished DESC

+            )
+            SELECT flight, job, started, status,
+            (
         WITH tsteps AS
         (
             SELECT *
               FROM steps
-             WHERE flight=? AND job=?
+             WHERE flight=f.flight AND job=f.job
         )
         , tsteps2 AS
         (
@@ -36,3 +40,5 @@
              WHERE step = 'ts-hosts-allocate'
           )
                 AS duration
+
+            ) FROM f

Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v4: Drop max_finished from new SELECT clause.
    This column is present in the query A just for the ORDER BY.
    It is not used by the perl code which actually processe
    these rows.  Which is just as well because the query B doesn't
    have this column, so with max_finished that query is broken.

4 years agoduration_estimator: Move $uptincl_testid to separate @x_params
Ian Jackson [Tue, 21 Jul 2020 14:34:00 +0000 (15:34 +0100)]
duration_estimator: Move $uptincl_testid to separate @x_params

This is going to be useful soon.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoduration_estimator: Return job column in first query
Ian Jackson [Tue, 21 Jul 2020 14:32:33 +0000 (15:32 +0100)]
duration_estimator: Return job column in first query

Right now this is pointless since the Perl code doesn't need it.  But
this row is going to be part of a WITH clause soon.

No functional change.

Diffs to two example queries (from the Perl DBI trace):

            SELECT f.flight AS flight,
+                   j.job AS job,
                   f.started AS started,
                    j.status AS status
                     FROM flights f
                     JOIN jobs j USING (flight)
                     JOIN runvars r
                             ON  f.flight=r.flight
                            AND  r.name=?
                    WHERE  j.job=r.job
                      AND  f.blessing=?
                      AND  f.branch=?
                      AND  j.job=?
                      AND  r.val=?
                      AND  (j.status='pass' OR j.status='fail'
                           OR j.status='truncated'!)
                      AND  f.started IS NOT NULL
                       AND  f.started >= ?
                  ORDER BY f.started DESC

            SELECT f.flight AS flight,
+                   s.job AS job,
                    NULL as started,
                    NULL as status,
                    max(s.finished) AS max_finished
                      FROM steps s JOIN flights f
                        ON s.flight=f.flight
                     WHERE s.job=? AND f.blessing=? AND f.branch=?
                        AND s.finished IS NOT NULL
                        AND f.started IS NOT NULL
                        AND f.started >= ?
-                     GROUP BY f.flight
+                     GROUP BY f.flight, s.job
                      ORDER BY max_finished DESC

CC: George Dunlap <George.Dunlap@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoduration_estimator: Explicitly provide null in general host q
Ian Jackson [Tue, 21 Jul 2020 14:22:28 +0000 (15:22 +0100)]
duration_estimator: Explicitly provide null in general host q

Our spec. says we return nulls for started and status if we don't find
a job matching the host spec.

The way this works right now is that we look up the nonexistent
entries in $refs->[0].  This is not really brilliant and is going to
be troublesome as we continue to refactor.

Provide these values explicitly.  No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoduration_estimator: Introduce some _qtxt variables
Ian Jackson [Tue, 21 Jul 2020 14:21:50 +0000 (15:21 +0100)]
duration_estimator: Introduce some _qtxt variables

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoduration_estimator: Ignore truncated jobs unless we know the step
Ian Jackson [Tue, 21 Jul 2020 14:18:38 +0000 (15:18 +0100)]
duration_estimator: Ignore truncated jobs unless we know the step

If we are looking for a particular step then we will ignore jobs
without that step, so any job which was truncated before it will be
ignored.

Otherwise we are looking for the whole job duration and a truncated
job is not a good representative.

This is a bugfix (to duration estimation), not a performance
improvement like the preceding and subsequent changes.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoExecutive: Use index for report__find_test
Ian Jackson [Mon, 20 Jul 2020 16:36:54 +0000 (17:36 +0100)]
Executive: Use index for report__find_test

After we refactor this query then we can enable the index use.
(Both of these things together in this commit because I haven't perf
tested the version with just the refactoring.)

(We have provided an index that can answer this question really
quickly if a version is specified.  But the query planner couldn't see
that because it works without seeing the bind variables, so doesn't
know that the value of name is going to be suitable for this index.)

* Convert the two EXISTS subqueries into JOIN/AND with a DISTINCT
  clause naming the fields on flights, so as to replicate the previous
  result rows.  Then do $selection field last.  The subquery is a
  convenient way to let this do the previous thing for all the values
  of $selection (including, notably, *).

* Add the additional AND clause for r.name, which has no logical
  effect given the actual values of name, enabling the query planner
  to use this index.

Perf: In my test case the sg-report-flight runtime is now ~8s.  I am
reasonably confident that this will not make other use cases of this
code worse.

Perf: runtime of my test case now ~11s

Example query before (from the Perl DBI trace):

        SELECT *
         FROM flights f
        WHERE
                EXISTS (
                   SELECT 1
                    FROM runvars r
                   WHERE name=?
                     AND val=?
                     AND r.flight=f.flight
                     AND (      (CASE
       WHEN (r.job) LIKE 'build-%-prev' THEN 'xprev'
       WHEN ((r.job) LIKE 'build-%-freebsd'
             AND 'x' = 'freebsdbuildjob') THEN 'DISCARD'
       ELSE                                      ''
       END)
 = '')
                 )
          AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
          AND (branch=?)
        ORDER BY flight DESC
        LIMIT 1

After:

        SELECT *
          FROM ( SELECT DISTINCT
                      flight, started, blessing, branch, intended
                 FROM flights f
                    JOIN runvars r USING (flight)
                   WHERE name=?
                     AND name LIKE 'revision\_%'
                     AND val=?
                     AND r.flight=f.flight
                     AND (      (CASE
       WHEN (r.job) LIKE 'build-%-prev' THEN 'xprev'
       WHEN ((r.job) LIKE 'build-%-freebsd'
             AND 'x' = 'freebsdbuildjob') THEN 'DISCARD'
       ELSE                                      ''
       END)
 = '')
          AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
          AND (branch=?)
) AS sub WHERE TRUE
        ORDER BY flight DESC
        LIMIT 1

In both cases with bind vars:

   'revision_xen'
   '165f3afbfc3db70fcfdccad07085cde0a03c858b'
   "xen-unstable"

Diff to the example query:

@@ -1,10 +1,10 @@
         SELECT *
+          FROM ( SELECT DISTINCT
+                      flight, started, blessing, branch, intended
          FROM flights f
-        WHERE
-                EXISTS (
-                   SELECT 1
-                    FROM runvars r
+                    JOIN runvars r USING (flight)
                    WHERE name=?
+                     AND name LIKE 'revision\_%'
                      AND val=?
                      AND r.flight=f.flight
                      AND (      (CASE
@@ -14,8 +14,8 @@
        ELSE                                      ''
        END)
  = '')
-                 )
           AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
           AND (branch=?)
+) AS sub WHERE TRUE
         ORDER BY flight DESC
         LIMIT 1

Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: Use proper \ escaping for underscores in LIKE

4 years agosg-report-flight: Use the job row from the intitial query
Ian Jackson [Tue, 21 Jul 2020 11:59:03 +0000 (12:59 +0100)]
sg-report-flight: Use the job row from the intitial query

$jcheckq is redundant: we looked this up right at the start.

This is not expected to speed things up very much, but it makes things
somewhat cleaner and clearer.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v4: Fix reference to $tjstatus

4 years agosg-report-flight: Use WITH clause to use index for $anypassq
Ian Jackson [Mon, 20 Jul 2020 15:58:16 +0000 (16:58 +0100)]
sg-report-flight: Use WITH clause to use index for $anypassq

Perf: runtime of my test case now ~11s

Example query before (from the Perl DBI trace):

        SELECT * FROM flights JOIN steps USING (flight)
            WHERE (branch='xen-unstable')
              AND job=? and testid=? and status='pass'
              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
            LIMIT 1

After:

        WITH s AS
        (
        SELECT * FROM steps
         WHERE job=? and testid=? and status='pass'
        )
        SELECT * FROM flights JOIN s USING (flight)
            WHERE (branch='xen-unstable')
              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
            LIMIT 1

In both cases with bind vars:

   "test-amd64-i386-xl-pvshim"
   "guest-start"

Diff to the query:

-        SELECT * FROM flights JOIN steps USING (flight)
+        WITH s AS
+        (
+        SELECT * FROM steps
+         WHERE job=? and testid=? and status='pass'
+        )
+        SELECT * FROM flights JOIN s USING (flight)
             WHERE (branch='xen-unstable')
-              AND job=? and testid=? and status='pass'
               AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
             LIMIT 1

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reviewed-by: George Dunlap <george.dunlap@citrix.com>
4 years agosg-report-flight: Use WITH to use best index use for $flightsq
Ian Jackson [Tue, 21 Jul 2020 11:56:42 +0000 (12:56 +0100)]
sg-report-flight: Use WITH to use best index use for $flightsq

While we're here, convert this EXISTS subquery to a JOIN.

Perf: runtime of my test case now ~200-300s.

Example query before (from the Perl DBI trace):

      SELECT * FROM (
        SELECT DISTINCT flight, blessing
             FROM flights
             JOIN runvars r1 USING (flight)

            WHERE (branch='xen-unstable')
              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
                  AND EXISTS (SELECT 1
                            FROM jobs
                           WHERE jobs.flight = flights.flight
                             AND jobs.job = ?)

              AND r1.name LIKE 'built_revision_%'
              AND r1.name = ?
              AND r1.val= ?

            ORDER BY flight DESC
            LIMIT 1000
      ) AS sub
      ORDER BY blessing ASC, flight DESC

With bind variables:

     "test-armhf-armhf-libvirt"
     'built_revision_xen'
     '165f3afbfc3db70fcfdccad07085cde0a03c858b'

After:

      WITH sub AS (
        SELECT DISTINCT flight, blessing
             FROM flights
             JOIN runvars r1 USING (flight)

            WHERE (branch='xen-unstable')
              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
              AND r1.name LIKE 'built_revision_%'
              AND r1.name = ?
              AND r1.val= ?

            ORDER BY flight DESC
            LIMIT 1000
      )
      SELECT *
        FROM sub
        JOIN jobs USING (flight)

       WHERE (1=1)
                  AND jobs.job = ?

      ORDER BY blessing ASC, flight DESC

With bind variables:

    'built_revision_xen'
    '165f3afbfc3db70fcfdccad07085cde0a03c858b'
    "test-armhf-armhf-libvirt"

Diff to the query:

-      SELECT * FROM (
+      WITH sub AS (
         SELECT DISTINCT flight, blessing
              FROM flights
              JOIN runvars r1 USING (flight)

             WHERE (branch='xen-unstable')
               AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
-                  AND EXISTS (SELECT 1
-                            FROM jobs
-                           WHERE jobs.flight = flights.flight
-                             AND jobs.job = ?)
-
               AND r1.name LIKE 'built_revision_%'
               AND r1.name = ?
               AND r1.val= ?

             ORDER BY flight DESC
             LIMIT 1000
-      ) AS sub
+      )
+      SELECT *
+        FROM sub
+        JOIN jobs USING (flight)
+
+       WHERE (1=1)
+                  AND jobs.job = ?
+
       ORDER BY blessing ASC, flight DESC

Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-flight: Ask the db for flights of interest
Ian Jackson [Fri, 17 Jul 2020 15:04:50 +0000 (16:04 +0100)]
sg-report-flight: Ask the db for flights of interest

Specifically, we narrow the initial query to flights which have at
least some job with the built_revision_foo we are looking for.

This condition is strictly broader than that implemented inside the
flight search loop, so there is no functional change.

Perf: runtime of my test case now ~300s-500s.

Example query before (from the Perl DBI trace):

      SELECT * FROM (
        SELECT flight, blessing FROM flights
            WHERE (branch='xen-unstable')
              AND                   EXISTS (SELECT 1
                            FROM jobs
                           WHERE jobs.flight = flights.flight
                             AND jobs.job = ?)

              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
            ORDER BY flight DESC
            LIMIT 1000
      ) AS sub
      ORDER BY blessing ASC, flight DESC

With these bind variables:

    "test-armhf-armhf-libvirt"

After:

      SELECT * FROM (
        SELECT DISTINCT flight, blessing
             FROM flights
             JOIN runvars r1 USING (flight)

            WHERE (branch='xen-unstable')
              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
                  AND EXISTS (SELECT 1
                            FROM jobs
                           WHERE jobs.flight = flights.flight
                             AND jobs.job = ?)

              AND r1.name LIKE 'built\_revision\_%'
              AND r1.name = ?
              AND r1.val= ?

            ORDER BY flight DESC
            LIMIT 1000
      ) AS sub
      ORDER BY blessing ASC, flight DESC

With these bind variables:

      "test-armhf-armhf-libvirt"
      'built_revision_xen'
      '165f3afbfc3db70fcfdccad07085cde0a03c858b'

Diff to the query:

      SELECT * FROM (
-        SELECT flight, blessing FROM flights
+        SELECT DISTINCT flight, blessing
+             FROM flights
+             JOIN runvars r1 USING (flight)
+
             WHERE (branch='xen-unstable')
+              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
               AND                   EXISTS (SELECT 1
                             FROM jobs
                            WHERE jobs.flight = flights.flight
                              AND jobs.job = ?)

-              AND ( (TRUE AND flight <= 151903) AND (blessing='real') )
+              AND r1.name LIKE 'built\_revision\_%'
+              AND r1.name = ?
+              AND r1.val= ?
+
             ORDER BY flight DESC
             LIMIT 1000
       ) AS sub

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
---
v3: Add more formal correctness argument
v2: Use proper \ escaping for underscores in LIKE

4 years agosg-report-flight: Sort failures by job name as last resort
Ian Jackson [Tue, 21 Jul 2020 13:40:37 +0000 (14:40 +0100)]
sg-report-flight: Sort failures by job name as last resort

This removes some nondeterminism from the output.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosg-report-flight: Add a comment re same-flight search narrowing
Ian Jackson [Tue, 21 Jul 2020 11:23:14 +0000 (12:23 +0100)]
sg-report-flight: Add a comment re same-flight search narrowing

In afe851ca1771e5da6395b596afa69e509dbbc278
  sg-report-flight: When justifying, disregard out-of-flight build jobs
we narrowed sg-report-flight's search algorith.

An extensive justification is in the commit message.  I think much of
this information belongs in-tree, so c&p it (with slight edits) here.

No code change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoDisable mercurial support
Ian Jackson [Fri, 31 Jul 2020 15:52:06 +0000 (16:52 +0100)]
Disable mercurial support

This is in order that we can substantially simplify forthcoming
database changes.  If mercurial support were still desired, the right
thing to do would be to rework it now along the lines of this request.
But we haven't used it for some years.

It could be reenabled later, if this work were done then.  (Of course
there might be other bitrot already that we don't know about.)

CC: committers@xenproject.org
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Andrew Cooper <Andrew.Cooper3@citrix.com>
4 years agoSQL: Fix incorrect LIKE pattern syntax (program variables)
Ian Jackson [Mon, 27 Jul 2020 11:44:48 +0000 (12:44 +0100)]
SQL: Fix incorrect LIKE pattern syntax (program variables)

In two places the pattern for LIKE is constructed programmatically.
In this case, too, we need to escape % and _.

We pass the actual pattern (or pattern fragment) via ?, so we do not
need to worry about '.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
New in v2.

4 years agoSQL: Fix incorrect LIKE pattern syntax (literals)
Ian Jackson [Mon, 27 Jul 2020 11:44:40 +0000 (12:44 +0100)]
SQL: Fix incorrect LIKE pattern syntax (literals)

LIKE takes a weird SQLish glob pattern, where % is like a glob *
and (relevantly, here) _ is like a glob ?.

Every _ in one of these LIKE patterns needs to be escaped with \.

Do that for all the literal LIKE patterns.

This fixes bugs.  Generally, bugs where the wrong rows might be
returned (except that the data probably doesn't have any such rows).

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
New in v2.

4 years agoSQL: Use "LIKE" rather than "like", etc.
Ian Jackson [Mon, 27 Jul 2020 11:43:27 +0000 (12:43 +0100)]
SQL: Use "LIKE" rather than "like", etc.

This is more like the rest of the style.  It will also make it easier
to find instances of the mistaken LIKE syntax.

I found these with "git grep" and manually edited them.  I have
checked the before-and-after result of
   find * -type f | xargs perl -i~ -pe 's/\bLIKE\b/like/g'
and it has only the few expected changes to ANDs and ORs.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
New in v2.

4 years agoschema: Add index to help cs-bisection-step
Ian Jackson [Fri, 24 Jul 2020 17:43:40 +0000 (18:43 +0100)]
schema: Add index to help cs-bisection-step

cs-bisection step basis search involves looking for recent flights
that weren't broken.  A flight is broken if it has broken steps.
Make an index for this to save it scanning the steps table.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoschema: Add index for quick lookup by host
Ian Jackson [Fri, 24 Jul 2020 13:54:32 +0000 (14:54 +0100)]
schema: Add index for quick lookup by host

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: Use proper \ escaping for underscores in LIKE

4 years agoschema: Provide indices for sg-report-flight
Ian Jackson [Fri, 17 Jul 2020 16:04:45 +0000 (17:04 +0100)]
schema: Provide indices for sg-report-flight

These indexes allow very fast lookup of "relevant" flights eg when
trying to justify failures.

In my ad-hoc test case, these indices (along with the subsequent
changes to sg-report-flight and Executive.pm, reduce the runtime of
sg-report-flight from 2-3ks (unacceptably long!) to as little as
5-7s seconds - a speedup of about 500x.

(Getting the database snapshot may take a while first, but deploying
this code should help with that too by reducing long-running
transactions.  Quoted perf timings are from snapshot acquisition.)

Without these new indexes there may be a performance change from the
query changes.  I haven't benchmarked this so I am setting the schema
updates to be Preparatory/Needed (ie, "Schema first" as
schema/README.updates has it), to say that the index should be created
before the new code is deployed.

Testing: I have tested this series by creating experimental indices
"trial_..." in the actual production instance.  (Transactional DDL was
very helpful with this.)  I have verified with \d that schema update
instructions in this commit generate indexes which are equivalent to
the trial indices.

Deployment: AFter these schema updates are applied, the trial indices
are redundant duplicates and should be deleted.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reviewed-by: George Dunlap <George.Dunlap@citrix.com>
---
v2: Use proper \ escaping for underscores in LIKE

4 years agoAdd cperl-indent-level to .dir-locals.el
Ian Jackson [Mon, 27 Jul 2020 11:52:27 +0000 (12:52 +0100)]
Add cperl-indent-level to .dir-locals.el

My personal config on my laptop has this set to 2 and that makes
editing osstest, which uses 4, quite annoying.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
New in v2.

4 years agodom0pvh: assign 1GB of memory to PVH dom0
Roger Pau Monne [Wed, 22 Jul 2020 15:04:16 +0000 (16:04 +0100)]
dom0pvh: assign 1GB of memory to PVH dom0

Current tests use 512MB of memory for dom0, but that's too low for a
PVH dom0 on some hosts and will cause errors because memory is
ballooned out in order to obtain physical memory ranges to map foreign
pages.

Using ballooned out pages for foreign mappings also doesn't seem to
work properly with the current Linux kernel version, so increase the
memory assigned to dom0 to 1GB for PVH dom0 tests. We should see about
reverting this when using ballooned pages is fixed.

The runvar diff is:

+test-amd64-amd64-dom0pvh-xl-amd   dom0_mem 1024
+test-amd64-amd64-dom0pvh-xl-intel dom0_mem 1024

I've done a repro of the failed test on elbling0 with dom0_mem set to
1GB and it seems to prevent the issue, the flight is 152111.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agofreebsd: remove freebsd- hostflags request from guest tests
Roger Pau Monne [Tue, 21 Jul 2020 11:20:16 +0000 (12:20 +0100)]
freebsd: remove freebsd- hostflags request from guest tests

Guest tests shouldn't care about the capabilities or firmware of the
underlying hosts, so drop the request of specific freebsd-<version>
hostflags for FreeBSD guest tests.

While there request the presence of the hvm hostflag since the FreeBSD
guest tests are run in HVM mode.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agofreebsd: add FreeBSD 11 and 12 guest jobs
Roger Pau Monne [Thu, 28 May 2020 10:26:48 +0000 (11:26 +0100)]
freebsd: add FreeBSD 11 and 12 guest jobs

Those are based on the upstream images and are run on an amd64 dom0.
The runvar difference is:

+test-amd64-amd64-qemuu-freebsd11-amd64 all_host_di_version 2020-02-10
+test-amd64-amd64-qemuu-freebsd12-amd64 all_host_di_version 2020-02-10
+test-amd64-amd64-qemuu-freebsd11-amd64 all_host_suite      stretch
+test-amd64-amd64-qemuu-freebsd12-amd64 all_host_suite      stretch
+test-amd64-amd64-qemuu-freebsd11-amd64 all_hostflags       arch-amd64,arch-xen-amd64,suite-stretch,purpose-test,freebsd-11
+test-amd64-amd64-qemuu-freebsd12-amd64 all_hostflags       arch-amd64,arch-xen-amd64,suite-stretch,purpose-test,freebsd-12
+test-amd64-amd64-qemuu-freebsd11-amd64 arch                amd64
+test-amd64-amd64-qemuu-freebsd12-amd64 arch                amd64
+test-amd64-amd64-qemuu-freebsd11-amd64 buildjob            build-amd64
+test-amd64-amd64-qemuu-freebsd12-amd64 buildjob            build-amd64
+test-amd64-amd64-qemuu-freebsd11-amd64 freebsd_arch        amd64
+test-amd64-amd64-qemuu-freebsd12-amd64 freebsd_arch        amd64
+test-amd64-amd64-qemuu-freebsd11-amd64 freebsd_image       FreeBSD-11.3-RELEASE-amd64.raw.xz
+test-amd64-amd64-qemuu-freebsd12-amd64 freebsd_image       FreeBSD-12.1-RELEASE-amd64.raw.xz
+test-amd64-amd64-qemuu-freebsd11-amd64 kernbuildjob        build-amd64-pvops
+test-amd64-amd64-qemuu-freebsd12-amd64 kernbuildjob        build-amd64-pvops
+test-amd64-amd64-qemuu-freebsd11-amd64 kernkind            pvops
+test-amd64-amd64-qemuu-freebsd12-amd64 kernkind            pvops
+test-amd64-amd64-qemuu-freebsd11-amd64 toolstack           xl
+test-amd64-amd64-qemuu-freebsd12-amd64 toolstack           xl
+test-amd64-amd64-qemuu-freebsd11-amd64 xenbuildjob         build-amd64
+test-amd64-amd64-qemuu-freebsd12-amd64 xenbuildjob         build-amd64

Note that only amd64 versions are tested at the moment, i386 had some
bugs that are being fixed so new releases can be tested.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agofreebsd10: refactor code to generate jobs
Roger Pau Monne [Thu, 28 May 2020 10:26:47 +0000 (11:26 +0100)]
freebsd10: refactor code to generate jobs

Slightly adjust the code to generate the freebsd10 jobs in order to
avoid exiting early from the function if the dom0 arch is different
than i386. No functional change expected, the freebsd10 jobs are still
limited to run on an i386 dom0. No runvar diff created as part of this
change.

This is a preparatory change for adding new FreeBSD 11 and 12 jobs
that will instead use an amd64 dom0.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoRevert "make-flight: Temporarily disable flaky test"
Roger Pau Monne [Thu, 16 Jul 2020 15:34:24 +0000 (16:34 +0100)]
Revert "make-flight: Temporarily disable flaky test"

This reverts commit c436ff754810c15e4d2a434257d1d07498883acb.

Now that XSA-321 has been released we can try to enable PVH dom0
tests again.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoAdd qemu-xen 4.14 branch
Ian Jackson [Mon, 13 Jul 2020 13:40:11 +0000 (14:40 +0100)]
Add qemu-xen 4.14 branch

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoAdd Xen 4.14 branch
Ian Jackson [Mon, 13 Jul 2020 13:39:04 +0000 (14:39 +0100)]
Add Xen 4.14 branch

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agomake-flight: Test Xen 4.9 and Xen 4.10 on stretch
Ian Jackson [Tue, 16 Jun 2020 16:42:59 +0000 (17:42 +0100)]
make-flight: Test Xen 4.9 and Xen 4.10 on stretch

Xen 4.9 doesn't build on buster and won't be fixed for that.
Xen 4.10's "-prev" migration tests also fail for the same reason.

There is a (smallish) risk that Debian will break stretch before Xen
4.10 goes completely out of support from the Xen Project.  If that
happens we could revert this - but then the 4.10 -prev jobs will stop
building.

Xen 4.9 is nearly out of security support, so for the 4.9 tests this
is a no-brainer.

I have checked the runvar diff.  The results are to change
  all_host_di_version [*]
  all_host_suite
  all_hostflags
  debian_suite
  debianhvm_suite
  host_hostflags
in many jobs in
  qemu-upstream-4.9-testing
  qemu-upstream-4.10-testing
  xen-4.9-testing
  xen-4.10-testing
[*] this is not visible in standalone-generate-dump-flight-runvars
because it always just uses `current'.

This command produces no output:
   diff -ub a <(perl -pe 's/stretch/buster/g' c)
(where `a' is before and `c' is after.)

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agostandalone: Do not complain about ssh if AP_FETCH_PLACEHOLDERS=y
Ian Jackson [Tue, 16 Jun 2020 15:36:28 +0000 (16:36 +0100)]
standalone: Do not complain about ssh if AP_FETCH_PLACEHOLDERS=y

In this case, there is no need to ssh anywhere.

No change other than in dev-debugging setups.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agostandalone-generate-dump-flight-runvars: mkdir -p logs
Ian Jackson [Tue, 16 Jun 2020 15:35:31 +0000 (16:35 +0100)]
standalone-generate-dump-flight-runvars: mkdir -p logs

Otherwise if logs doesn't exist, the code in `standalone' which is
eventually called to build each flight will try to do it - but that
code is not idempotent in the presence of other racing copies of
itself.

Rather than trusting mkdir -p there, do it here.

No change other than to this dev-debugging script.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agostandalone: Fix spurious ]
Ian Jackson [Tue, 16 Jun 2020 15:35:26 +0000 (16:35 +0100)]
standalone: Fix spurious ]

This looks like this was once a call to test(1).  ssh-add, as it
happens, seems to ignore this spuriuous `]' (!) so there isn't any
significant change.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agoproduction-config: Update to current coverity tools
Ian Jackson [Tue, 9 Jun 2020 15:30:48 +0000 (15:30 +0000)]
production-config: Update to current coverity tools

The 2017.07 tarball had a leading "./" but the 2019.03 one doesn't,
so we must change CoverityToolsStripComponents.

The old tools we are currently using do not work any more - they are
rejected by Coverity Scan.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reported-by: Matthew Krasnick <Matthew.Krasnick@synopsys.com>
CC: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <Andrew.Cooper3@citrix.com>
CC: Paul Durrant <xadimgnik@gmail.com>
4 years agobuster: Switch to Debian buster as the default suite
Ian Jackson [Tue, 24 Sep 2019 15:34:45 +0000 (16:34 +0100)]
buster: Switch to Debian buster as the default suite

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agobuster 20_linux_xen: Only load policy in XSM-enabled builds
Ian Jackson [Wed, 27 May 2020 15:48:21 +0000 (16:48 +0100)]
buster 20_linux_xen: Only load policy in XSM-enabled builds

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosetupboot_grub2: Do not boot with XSM policy etc. unless xsm=1
Ian Jackson [Wed, 27 May 2020 15:42:27 +0000 (16:42 +0100)]
setupboot_grub2: Do not boot with XSM policy etc. unless xsm=1

This prevents us from passing an XSM policy file, and
`flask=enforcing', in supposedly-non-XSM tests.

These bootloader entries can appear because the Xen upstream build
ships XSM policy files by default even if XSM is disabled in the
hypervisor, causing update-grub to generate useless `XSM enabled'
entries.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
4 years agosetupboot_grub2: Copy hv command line from grub to xen.cfg
Ian Jackson [Wed, 27 May 2020 15:16:52 +0000 (16:16 +0100)]
setupboot_grub2: Copy hv command line from grub to xen.cfg

This reuses all of the stuff that update-grub, etc., have put there.

In particular without this we never have flask=enforcing!

We have to do something about the ${xen_rm_opts} that appear in these
entries.  In principle there might be many variable expansions, but in
practice there is only this one It applies only to x86, and this use
of chainloading to xen.efi and reading xen.cfg applies only to arm64.
And anyway we weren't putting it these things in before.  So OK...

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>