Commit graph

76 commits

Author SHA1 Message Date
c9e0e311bb Send inferior error output to stderr
Ideally this would go in to the database somehow as well, but the only idea I
have for that is pass in a pipe, and then spawn a thread to read from the
other end of that pipe in a loop to send the output to the database.

That hasn't been written yet, so just send the output to stderr for now.
2019-10-18 17:15:45 +01:00
917d031d4f Remove unused inferior-package-transitive-supported-systems function 2019-10-18 17:15:25 +01:00
af1ffc2393 Add a page for queued jobs 2019-10-12 21:16:39 +01:00
427063c812 Make it easier to retry jobs
Add a new event 'retry', and run jobs where the number of retry events is
greater or equal to the number of failure events.

Also add an index to the git_branches table to make the finding jobs query a
bit faster.
2019-10-02 21:54:11 +01:00
580900b0f4 Fail early if the inferior is #f
This happens when the repl can't be loaded for example.
2019-09-29 10:45:46 +01:00
208122317a Try setting the en_US.UTF-8 locale, if the normalised fails
Older versions of the glibc-locales package just contain the UTF-8 variants,
not utf8.
2019-09-29 10:44:53 +01:00
d236f05d0f Don't error when processing revisions of Guix without graft support 2019-09-29 10:44:25 +01:00
c81d1e04ea Handle loading revisions without the (guix lint) module
This is a recent addition, so to support loading revisions without it, better
handle the error when loading the module.
2019-09-29 00:21:25 +01:00
15b94238c5 Unset the GUILE_LOAD_* environment variables when using inferiors
Otherwise modules from outside of the inferior can leak in.
2019-09-28 23:56:41 +01:00
43bc7cab91 Add a new table to store package versions by revision ranges
This isn't new information, but derived from information already in the
database. It's collected here to make querying faster.

The table is updated when each new revision is entered.
2019-09-27 17:28:46 +01:00
38adedcede Add newline to the end of the duplicate lint warning output 2019-09-05 16:07:23 +02:00
1a55022524 Improve the package and package-metadata modules
Add tests around the package module, extract out the use of the
inferior-package record assessors so that they aren't part of the tests, and
switch across the package-metadata module to use
insert-missing-data-and-return-all-ids.
2019-09-05 16:07:23 +02:00
91a9ba4349 Add a new table guix_revision_lint_checkers
To associate a set of lint checkers with a specific revision. While there is
the association through the lint warnings, that only works for checkers where
there are lint warnings for that revision.

Therefore, to allow finding all the checkers for a specific revision, also
associate them directly with the revision.
2019-09-01 18:32:09 +01:00
3ad100bedc Log the manifest derivation when loading new revisions
As this is useful to know.
2019-09-01 17:40:16 +01:00
07f368a54b Include glibc-locales from the inferior guix in the environment
When loading data from an inferior Guix, first build it's latest version of
glibc-locales, and include that in the environment from the inferior.

This improves locale support, which is currently relevant for extracting lint
warnings.

Without this change, you'd only be able to switch to locales supported by the
glibc-utf8-locales package, assuming that the right version is available.
2019-09-01 13:12:10 +01:00
af581784b2 Log the guix store path being used
In the load-new-guix-revision module.
2019-09-01 13:12:10 +01:00
f118ed0bf9 Improve handling of errors when changing locale
In the load-new-guix-revision module.
2019-09-01 13:12:10 +01:00
6b9977f62e Store lint warnings in the database
This commit adds the relevant tables and code to store lint warnings in the
database.

Currently, only lint checkers which don't require access to the network will
be run, as this allows the processing to happen without network access. Also,
this functionality won't work in older versions of Guix which don't expose the
lint warnings in a compatible way.
2019-09-01 13:12:10 +01:00
bf469504eb Add buffering to the log handling for jobs
To increase the log output speed, avoiding inserting one character at a time
in to the database.
2019-08-31 12:10:54 +01:00
9e80bda4f9 Avoid erroring when processing emails again
These changes allow processing emails again, and just creating job and branch
entries where data is missing.
2019-08-05 20:59:48 +01:00
002ae7685c Clear the previous log entry when starting a job 2019-08-04 09:42:21 +01:00
91be72df03 Display the jobs related to a revision on the revision page 2019-07-22 20:00:11 +01:00
6dd52f08ed Remove restrictions in select-job-for-update
This allows running jobs manually that have failed.
2019-07-19 20:25:53 +01:00
71607eff66 Close the logging port once it's been used 2019-07-19 20:25:13 +01:00
413ef9ea6e Prioritise processing the latest revisions for branches
Reserve some capacity to process revisions which are the tip of a branch. This
should reduce the time between new revisions appearing, and then being
processed.
2019-07-16 18:20:02 +01:00
6904547bf2 Record jobs as failed when they are killed
So that they aren't retried again and again.
2019-07-14 14:43:47 +01:00
83ef624b97 Switch to processing jobs in parallel
This should speed up processing new revisions, reduce latency between finding
out about new revisions and processing them, as well as help manage memory
usage, by processing each job in a process that then exits.
2019-07-12 23:00:44 +01:00
a6bd46b829 Obtain a lock when inserting the data for a new revision
This is working towards running the jobs in parallel. Each job looks at the
records in the database, and adds missing ones. If other jobs, running in
different transactions insert the same missing records at the same time, this
could cause an error.

Therefore, to just avoid this problem, lock before inserting the data. This
will allow the jobs to be processed in parallel, and it shouldn't have too
much of an effect on performance, as the slow bit is outside of the
transaction.
2019-07-12 19:57:13 +01:00
05c8287965 Lock around the channel fetch when loading new revisions
This is in preparation for running jobs in parallel. The channels code in Guix
uses a cached copy of the Git repository. Multiple jobs can't concurrently
access this without causing issues, so use an advisory lock to ensure that
only one job is using the repository at a time.
2019-07-12 19:56:58 +01:00
743cec7cb6 Associate a name with database connections
This helps when working out which connection to the database is doing what.
2019-07-12 19:49:26 +01:00
1b5db7adac Fix using defined? to check for the open-inferior/container function
It doesn't work as intended unless the module is also specified, so do that.
2019-07-09 19:48:01 +01:00
502dc93618 Fix issue inserting the empty log row
If the job started, and then was restarted, the row will already exist. So
don't error on a conflict.
2019-07-09 18:43:21 +01:00
f2d28b4def Move around some of the load new revision code
To better separate the code that needs to happen after a lock has been
acquired to allow concurrently loading revisions without concurrent insertion
issues.
2019-07-07 21:59:36 +01:00
2ea78cff47 Tweak how logs are stored
Previously, the query for the jobs page was really slow, as it checked the
load_new_guix_revision_job_log_parts table for each job, doing a sequential
scan through the potentially large table.

Adding an index didn't seem to help, as the query planner would belive the
query could return loads of rows, where actually, all that needed checking is
whether a single row existed with a given job_id.

To avoid adding the index to the load_new_guix_revision_job_log_parts table,
and fighting with the query planner, this commit changes the
load_new_guix_revision_job_logs table to include a blank entry for jobs which
are currently being processed. This is inserted at the start of the job, and
then updated at the end to combine and replace all the parts.

This all means that the jobs page should render quickly now.
2019-07-07 21:23:18 +01:00
54b9922466 Iterate the log viewing
Replace the Guile-side HTML escaping with a less complete, but hopefully
faster PostgreSQL side HTML escaping approach.

Also, allow reading part of the log, by default, the last 1,000,000
characters, as this should render quickly.
2019-06-24 20:30:47 +01:00
f504eec519 Direct the build output to the logging-port
So that this is logged.
2019-06-22 15:53:44 +02:00
05165929a5 Stop closing the log-port port
This part of the soft-port seems to be called, but I don't know why, and
trying to close the output port causes issues.
2019-06-22 15:52:09 +02:00
d96add30a0 Record the output from loading new revisions to the database
So that it can easily be shown through the web interface. There's two tables
being used. One which temporarily stores the output as it's output while the
job is running, and other which stores the whole log once the job has
finished.
2019-06-22 01:51:49 +02:00
baf2b17bf8 Re-arrange some of the load new revision code
Try to isolate the code that inserts in to the database, so that the relevant
tables can be locked during this time.
2019-06-21 15:47:59 +02:00
766656086f Add a couple of functions around timing
That don't rely on timing a single function.
2019-06-21 15:47:53 +02:00
398b8aab05 Log the time loading new revisions takes 2019-06-21 15:46:53 +02:00
548e628398 Set #:fallback? to #t
If a substitute fails, just build it anyway.
2019-06-21 15:45:50 +02:00
66364207f4 Process jobs starting with the most recent
Conventionally, you'd process the oldest job in a queue, but at the moment, it
would be more useful to have recent information more promptly, and fill in the
historical gaps later. I'm not sure this'll always be the case, but for now,
flip the order in which jobs are processed.
2019-06-19 23:54:12 +01:00
3df0b43146 Use line buffering for the input and output ports
As these are used for logging, which is done on a line by line basis. Remove
the now redundant calls to (force-output).
2019-06-17 18:09:10 +01:00
7f0a0ed3b1 Time everywhere a derivation is built when loading a new revision
As this is useful information.
2019-06-17 16:28:11 +01:00
ed0745096a Add a new page listing jobs 2019-06-17 11:21:58 +01:00
33956b394f Improve the error message when a load revision job fails
It's useful to know the commit.
2019-06-15 11:07:42 +01:00
0bd1fc7e87 Display a backtrace for errors in channel->derivation-file-name
To help with debugging.
2019-06-13 23:13:34 +01:00
11144a5fe9 Catch the guix available when built
And use it for the hosting the inferiors, rather than computing the guix
package at runtime. This simplifies the behaviour when the Guix Data Service
is deployed as a Guix package.
2019-06-13 23:11:35 +01:00
6f379c7937 Rework creating /etc when building the derivation for a revision
Within an inferior. Just use the presence of open-inferior/container directly,
as this is more explicit.
2019-06-13 22:58:15 +01:00