Skip to content
Snippets Groups Projects
This project is mirrored from https://git.savannah.gnu.org/git/guix/guix-cuirass.git/. Pull mirroring updated .
  1. Oct 03, 2020
  2. Oct 02, 2020
    • Mathieu Othacehe's avatar
      Do not browse the store during registration. · cd89fc43
      Mathieu Othacehe authored
      * src/cuirass/database.scm (db-register-builds): Remove store argument and
      assume that 'log and 'outputs properties are provided by the evaluation.
      * src/cuirass/base.scm (build-packages): Adapt accordingly.
      cd89fc43
    • Mathieu Othacehe's avatar
      Add evaluation database workers. · 39db021a
      Mathieu Othacehe authored
      Evaluation registration involves running a large number of SQL queries. This
      can cause some database worker starvation as well as some contention. To avoid
      this issue, spawn database workers dedicated to evaluation registration.
      
      * src/cuirass/database.scm (%db-registration-channel): New variable.
      (with-db-registration-worker-thread, with-registration-workers): New macros.
      (with-db-worker-thread-no-timeout): Remove it.
      (db-register-builds): Run registration in dedicated database workers using
      "with-db-registration-worker-thread" macro.
      * bin/cuirass.in (main): Spawn database registration workers by calling
      "with-registration-workers" macro.
      39db021a
  3. Oct 01, 2020
    • Mathieu Othacehe's avatar
      Register all new outputs in one worker. · ce624ea7
      Mathieu Othacehe authored
      Make sure that all registration queries are done from within a single database
      worker. Otherwise, when builds from multiple evaluations are registered at
      the same time, some contention occurs communicating with workers.
      
      * src/cuirass/base.scm (new-outputs?, build-packages): Move build registration
      to ...
      * src/cuirass/database.scm (db-register-builds): ... this new procedure.
      (with-db-worker-thread-no-timeout): New procedure. Use it in
      "db-register-builds" to avoid timeout messages.
      ce624ea7
    • Mathieu Othacehe's avatar
      Expect nix-name and system to be part of the evaluation. · 39f6e930
      Mathieu Othacehe authored
      * src/cuirass/base.scm (evaluate): Expect 'nix-name and 'system properties to
      be provided by the evaluation.
      (build-packages): Use the eval-id provided as argument.
      39f6e930
  4. Sep 29, 2020
    • Mathieu Othacehe's avatar
      metrics: Optimize queries. · 4d7864c0
      Mathieu Othacehe authored
      Avoid full Builds table scans.
      
      * src/cuirass/metrics.scm (db-average-build-start-time-per-eval,
      db-average-build-complete-time-per-eval, db-evaluation-completion-speed):
      Rewrite query to avoid full Builds table scans.
      4d7864c0
    • Mathieu Othacehe's avatar
      Add watchdog support. · eb8d1b88
      Mathieu Othacehe authored
      * src/cuirass/watchdog.scm: New file.
      * Makefile.am (dist_pkgmodule_DATA): Add it.
      * src/cuirass/utils.scm (with-timeout, get-message-with-timeout): Export them.
      * bin/cuirass.in (main): Start the watchdog.
      eb8d1b88
  5. Sep 28, 2020
    • Mathieu Othacehe's avatar
      Optimize database queries. · 0ffcb80e
      Mathieu Othacehe authored
      Avoid full scans of Builds table that can be very time consuming by rewriting
      some queries and using new indexes.
      
      * src/sql/upgrade-12.sql: New file.
      * Makefile.am (dist_sql_DATA): Add it.
      * src/schema.sql (Builds_evaluation_index, Evaluations_status_index,
      Evaluations_specification_index): New indexes.
      * src/cuirass/database.scm (db-get-evaluations-build-summary,
      db-get-evaluation-summary): Rewrite queries to avoid full Builds table scan
      and use the new indexes.
      0ffcb80e
    • Mathieu Othacehe's avatar
      Limit builds insertion queries. · 461e07e1
      Mathieu Othacehe authored
      Once the evaluation is over, the new builds are registered. This registration
      tries to insert a new build for each derivation returned by the evaluation
      phase. If the new build does not add a new output, the insertion query is then
      rollbacked. This means that there are at least as many insertion queries as
      new derivations.
      
      SQlite allows at most one writer at a time, and even though we are using WAL
      mode, performing a lot of insertions will reduce the reading perforances.
      When multiple evaluations are performed in parallel, the large number of
      concurrent insertion queries also causes contention.
      
      To avoid those issues, check first in the "Outputs" table which derivations
      are already registered. This means that most of the insertion queries will be
      replaced by reading queries, that are much less expensive and more suitable
      for Cuirass concurrent implementation.
      
      * src/cuirass/base.scm (new-outputs?): New procedure.
      (build-packages): Use it to insert only builds registering new outputs.
      461e07e1
  6. Sep 24, 2020
    • Mathieu Othacehe's avatar
      Do not raise an exception at gcroot directory creation. · d1386d85
      Mathieu Othacehe authored
      On fresh Guix System installations, Cuirass will not be allowd to create its
      own profile directory. Instead this should be take care of by guix-daemon when
      Cuirass will initiate its first connection to it.
      
      * bin/cuirass.in (main): Do not raise an exception on gcroot directory
      creation failure.
      d1386d85
    • Mathieu Othacehe's avatar
      Add SQL query logging support. · b310f17a
      Mathieu Othacehe authored
      * bin/cuirass.in (show-help): Document "--log-queries" option.
      (%options): Add it.
      (main): Enable query logging if the above option is set.
      * src/cuirass/database.scm (db-log-queries): New procedure.
      * src/cuirass/logging.scm (query-logging-port): New parameter.
      (log-query): New procedure.
      b310f17a
  7. Sep 18, 2020
    • Mathieu Othacehe's avatar
      Fix GC race-condition in spawn-builds. · e7bebbe3
      Mathieu Othacehe authored
      If a derivation is GC'd just before calling "spawn-builds",
      "build-derivations: will throw an exception that will be catched. Then,
      "update-build-statuses!"  will call "derivation-path->output-paths" that will
      throw another exception because the derivation does not exit. This exception
      is not handled, causing Cuirass to crash.
      
      2020-09-18T10:41:18 batch of builds (partially) failed: build of `/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv' failed (status: 1)
      Backtrace:
      In ice-9/boot-9.scm:
        1736:10 11 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
      In unknown file:
                10 (apply-smob/0 #<thunk 7ffff5cbd4a0>)
      In ice-9/boot-9.scm:
          718:2  9 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
      In ice-9/eval.scm:
          619:8  8 (_ #(#(#<directory (guile-user) 7ffff58f8f00>)))
      In ice-9/boot-9.scm:
         2806:4  7 (save-module-excursion _)
        4351:12  6 (_)
      In cuirass/base.scm:
         562:10  5 (spawn-builds #<store-connection 256.99 7fffec03f910> _ #:max-batch-size _)
      In srfi/srfi-1.scm:
          634:9  4 (for-each #<procedure update! (drv)> ("/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv"))
      In cuirass/base.scm:
          474:4  3 (update! "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv")
      In guix/derivations.scm:
         552:17  2 (derivation-path->output-paths "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv")
      In ice-9/ports.scm:
         440:11  1 (call-with-input-file "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv" #<procedure read-derivation (drv-port #:optional read-derivation-from-file)> #:binary _ …)
      In unknown file:
                 0 (open-file "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv" "r" #:encoding #f #:guess-encoding #f)
      
      * src/cuirass/base.scm (update-build-statuses!): Catch
      "derivation-path->output-paths" exceptions and set the build status to
      "failed".
      e7bebbe3
  8. Sep 17, 2020
  9. Sep 16, 2020
    • Mathieu Othacehe's avatar
      metrics: Add evaluation related metrics. · 78de0da8
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-average-build-start-time-per-eval,
      db-average-build-complete-time-per-eval, db-evaluation-completion-speed,
      db-latest-evaluations): New procedures.
      (%metrics): Add 'average-eval-build-start-time,
      'average-eval-build-complete-time, 'evaluation-completion-speed.
      (db-update-metrics): Update evaluation related metrics for the evaluations
      added the past three days.
      * tests/metrics.scm ("average-eval-build-start-time",
      "average-eval-build-complete-time", "evaluation-completion-speed"): Add new
      tests.
      78de0da8
    • Mathieu Othacehe's avatar
      Log metrics update duration. · 822dbb36
      Mathieu Othacehe authored
      * bin/cuirass.in (main): Log metrics update duration.
      822dbb36
  10. Sep 15, 2020
    • Mathieu Othacehe's avatar
      tests: Improve metrics testing. · 8fc4794b
      Mathieu Othacehe authored
      * tests/metrics.scm (nearest-exact-integer): Remove as unused.
      ("db-update-metrics"): Test that 'pending-builds metric is updated on
      "db-update-metrics" call.
      8fc4794b
    • Mathieu Othacehe's avatar
      Add metrics testing. · 76427483
      Mathieu Othacehe authored
      * tests/metrics.scm: New file.
      * Makefile.am (TESTS): Add it.
      76427483
    • Mathieu Othacehe's avatar
      metrics: Add 'percentage-failed-eval-per-spec support. · f3ab04ae
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-percentage-failed-eval-per-spec): New procedure.
      (%metrics): Add 'percentage-failure-10-last-eval-per-spec,
      'percentage-failure-100-last-eval-per-spec and
      'percentage-failed-eval-per-spec metrics.
      (db-update-metrics): Add them.
      * src/cuirass/templates.scm (global-metrics-content): Add
      "percentage-failed-eval" argument. Use it to display the "percentage of failed
      evaluations" table.
      * src/cuirass/templates.scm (url-handler): Adapt accordingly.
      f3ab04ae
    • Mathieu Othacehe's avatar
      metrics: Fix db-average-eval-duration-per-spec. · ad3c6035
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-average-eval-duration-per-spec): Order results
      by descending rowid and adjust docstring.
      ad3c6035
    • Mathieu Othacehe's avatar
      metrics: Warn about metric insertion. · c5a97586
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm: Add a warning about metric insertion in %metrics
      list.
      c5a97586
    • Mathieu Othacehe's avatar
      metrics: Add 'new-derivations-per-day support. · 97ec7a2d
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-new-derivations-previous-day): New procedure.
      (%metrics): Add 'new-derivations-per-day.
      (db-update-metrics): Add it.
      * src/cuirass/templates.scm (make-line-chart): Add support for multiple
      datasets. Also add "interpolation?" and "legend?" options.
      (global-metrics-content): Add "new-derivations-per-day" argument. Adapt
      "Builds per day" chart so that it uses two datasets from
      'new-derivations-per-day and 'builds-per-day metrics.
      * src/cuirass/templates.scm (url-handler): Adapt accordingly.
      97ec7a2d
    • Mathieu Othacehe's avatar
      metrics: Change 'builds-per-day computation. · d0a2235e
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-builds-previous-day): Only take into account the
      builds that are created and processed during the previous day.
      d0a2235e
    • Mathieu Othacehe's avatar
      metrics: Add pending builds support. · f011d874
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-pending-builds, db-current-day-timestamp): New
      procedures.
      (%metrics): Add 'pending-builds.
      (db-update-metrics): Add it.
      * src/cuirass/templates.scm (global-metrics-content): Add "pending-builds"
      argument. Display pending builds in a line chart.
      * src/cuirass/http.scm (url-handler): Adapt "global-metrics-content" call
      accordingly.
      f011d874
    • Mathieu Othacehe's avatar
      Do not override onload callback. · 21a9b2b3
      Mathieu Othacehe authored
      * src/cuirass/templates.scm (make-line-chart): Do not override onload callback
      as that would prevent us from adding multiple charts.
      21a9b2b3
    • Mathieu Othacehe's avatar
      metrics: Rename 'builds-previous-day to 'builds-per-day. · 5a947e18
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (%metrics): Rename 'builds-previous-day to
      'builds-per-day.
      (db-update-metrics): Adapt accordingly.
      * src/cuirass/http.scm (url-handler): Ditto.
      5a947e18
    • Mathieu Othacehe's avatar
      metrics: Order by descending rowid by default. · cd2d2512
      Mathieu Othacehe authored
      * src/cuirass/metrics.scm (db-get-metrics-with-id): Order by descending rowid
      by default.
      * src/cuirass/http.scm (url-handler): Use the default order for
      "db-get-metrics-with-id".
      cd2d2512
  11. Sep 14, 2020
    • Mathieu Othacehe's avatar
      Add metrics support. · cf11b73d
      Mathieu Othacehe authored
      * Makefile.am: Add "upgrade-11.sql", "chart.js" and "metrics.js".
      * bin/cuirass.in (main): Add 'metrics fiber.
      * src/cuirass/http.scm (%file-white-list): Add "js/chart.js".
      (url-handler): Add "/metrics" route.
      * src/cuirass/metrics.scm: New file.
      * src/cuirass/templates.scm (html-page): Add a "Global metrics" sub-menu to
      "Status" dropdown menu.
      (make-line-chart, global-metrics-content): New procedures.
      * src/schema.sql (Metrics): New table.
      * src/sql/upgrade-11.sql: New file.
      * src/static/js/chart.js: New file.
      cf11b73d
    • Mathieu Othacehe's avatar
      database: Export procedures. · 43ed8547
      Mathieu Othacehe authored
      * src/cuirass/database.scm (last-insert-rowid, expect-one-row, %sqlite-exec):
      Export them.
      43ed8547
  12. Sep 10, 2020
Loading