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. Aug 27, 2018
    • Clément Lassieur's avatar
      database: Add a Checkouts table. · 8d40c491
      Clément Lassieur authored
      It is used to know when a new evaluation must be triggered and to display
      input changes.
      
      * Makefile.am (dist_sql_DATA): Add 'src/sql/upgrade-3.sql'.
      * bin/cuirass.in (main): Call DB-SET-EVALUATION-DONE at startup to clear
      'in-progress' evaluations.
      * bin/evaluate.in (input-checkout, format-checkouts): Rename '#:name' to
      '#:input'.
      * doc/cuirass.texi (Stamps): Remove section.
      (Checkouts): New section.
      * src/cuirass/base.scm (fetch-input, fetch-inputs, compile-checkouts): Rename
      '#:name' to '#:input'.
      (evaluate): Remove the COMMITS argument.  Add an EVAL-ID argument.  Don't call
      DB-ADD-EVALUATION because it was called sooner.  Remove the EVAL-ID argument
      to AUGMENT-JOB because it's a closure.
      (build-packages): Add an EVAL-ID argument.  Call DB-SET-EVALUATION-DONE once
      all the derivations are registered.
      (process-specs): Replace the stamping mechanism by the primary key constraint
      of the Checkouts table: call "evaluate" only when DB-ADD-EVALUATION is true,
      which means that at least one checkout was added.  Change the EVALUATE and
      BUILD-PACKAGES arguments accordingly.
      * src/cuirass/database.scm (db-add-stamp, db-get-stamp): Remove procedures.
      (db-set-evaluations-done, db-set-evaluation-done): New exported procedure.
      (db-add-checkout): New procedure that returns #f if a checkout with the same
      revision already exists.
      (db-add-evaluation): Replace the EVAL argument with a SPEC-NAME and a
      CHECKOUTS arguments.  Insert the evaluation only if at least one checkout was
      inserted.  Return #f otherwise.
      (db-get-checkouts): New procedure.
      (db-get-evaluations, db-get-evaluations-build-summary): Handle the
      'in_progress' column, remove the 'commits' column.  Return the result of
      DB-GET-CHECKOUTS as part of the evaluation.
      * src/cuirass/templates.scm (input-changes, evaluation-badges): New
      procedures.
      (evaluation-info-table): Rename "Commits" to "Input changes".  Use
      INPUT-CHANGES to display the input changes that triggered the evaluation.  Use
      EVALUATION-BADGES to display a message indicating that the evaluation is in
      progress.
      * src/schema.sql (Stamps): Remove table.
      (Checkouts): New table.
      (Evaluations): Remove the 'commits' column.  Add an 'in_progress' column.
      * src/sql/upgrade-3.sql: New file with SQL queries to upgrade the database.
      * tests/database.scm (make-dummy-eval): Remove procedure.
      (make-dummy-checkouts): New procedure.
      ("sqlite-exec"): Remove the 'commits' column.  Add the 'in_progress' column.
      ("db-update-build-status!", "db-get-builds", "db-get-pending-derivations"):
      Update the arguments of DB-ADD-EVALUATION accordingly.
      * tests/http.scm (hash-table=?): Add support for lists of hash tables.
      (evaluations-query-result): Replace '#:commits' with '#:checkouts'.  Return a
      list instead of returning one element, for symmetry.
      ("fill-db"): Add a new input so that the second checkout can refer to it.
      Replace EVALUATION1 and EVALUATION2 with CHECKOUTS1 and CHECKOUTS2.  Update
      the arguments of DB-ADD-EVALUATION accordingly.
      ("/api/queue?nr=100"): Take the CAR of the EVALUATIONS-QUERY-RESULT list to
      make it symmetrical with the other argument of HASH-TABLE=?.
      8d40c491
  2. Aug 17, 2018
    • Clément Lassieur's avatar
      database: Serialize all database accesses in a thread. · 4612a3a7
      Clément Lassieur authored
      Fixes <https://bugs.gnu.org/32234>.
      
      * bin/cuirass.in (main): Keep only one WITH-DATABASE call around all fibers.
      Remove all DB arguments.
      * src/cuirass/base.scm (evaluate, update-build-statuses!, spawn-builds,
      handle-build-event, build-packages): Remove all DB arguments.
      (clear-build-queue, cancel-old-builds): Wrap in WITH-DB-CRITICAL-SECTION,
      remove all DB arguments.
      (restart-builds): Remove the NON-BLOCKING call, remove all DB arguments.
      (process-specs): Remove all DB arguments, remove the WITH-DATABASE call.
      * src/cuirass/database.scm (%db-channel): New parameter.
      (with-db-critical-section): New macro.
      (db-add-input, db-add-specification, db-get-inputs, db-get-specifications,
      db-add-evaluation, db-add-build, db-update-build-status!, db-get-outputs,
      db-get-builds, db-get-build, db-get-pending-derivations, db-get-stamp,
      db-add-stamp, db-get-evaluations, db-get-evaluations-build-summary,
      db-get-evaluations-id-min, db-get-evaluations-id-max, db-get-builds-min,
      db-get-builds-max): Wrap in WITH-DB-CRITICAL-SECTION, remove all DB arguments.
      (with-database): Wrap BODY in PARAMETERIZE form that sets %DB-CHANNEL to the
      channel returned by MAKE-CRITICAL-SECTION.
      * src/cuirass/http.scm (handle-build-request, handle-builds-request): Remove
      all DB arguments.
      (url-handler): Remove all DB arguments, remove the DB-CHANNEL state, remove
      the WITH-CRITICAL-SECTION calls.
      (run-cuirass-server): Remove the DB arguments, remove the
      MAKE-CRITICAL-SECTION call.
      * src/cuirass/utils.scm (make-critical-section): Replace SPAWN-FIBER with
      CALL-WITH-NEW-THREAD.  Wrap body in PARAMETERIZE form that clears
      CURRENT-FIBER.
      * tests/database.scm (with-temporary-database, "db-add-specification",
      "db-add-build", "db-update-build-status!", "db-get-builds",
      "db-get-pending-derivations"): Remove the DB arguments.
      ("db-init"): Set the %DB-CHANNEL parameter to the channel returned by
      MAKE-CRITICAL-SECTION, and return #t.
      ("database"): Set %DB-CHANNEL to #f during cleanup.
      * tests/http.scm ("db-init"): Set the %DB-CHANNEL parameter to the channel
      returned by MAKE-CRITICAL-SECTION, and return #t.
      ("cuirass-run", "fill-db"): Remove the DB arguments.
      ("http"): Set %DB-CHANNEL to #f during cleanup.
      4612a3a7
    • Clément Lassieur's avatar
      utils: Avoid deadlock when WITH-CRITICAL-SECTION calls are nested. · e66e545b
      Clément Lassieur authored
      * src/cuirass/utils.scm (%critical-section-args): New parameter.
      (make-critical-section): Put ARGS into a parameter, so that
      CALL-WITH-CRITICAL-SECTION knows when it's called from the critical section.
      In that case it would just apply PROC to ARGS.
      (call-with-critical-section): If already in the critical section, apply PROC
      to %CRITICAL-SECTION-ARGS instead of sending the message through the critical
      section channel.
      e66e545b
    • Clément Lassieur's avatar
      database: Merge Derivations into Builds table. · 4db99f64
      Clément Lassieur authored
      Fixes <https://bugs.gnu.org/32190>.
      
      * Makefile.am (dist_sql_DATA): Add 'src/sql/upgrade-2.sql'.
      * doc/cuirass.texi (Derivations): Remove section.
      (Builds): Update accordingly.  Add columns from the Derivations table.
      (Outputs): Replace 'id' with 'derivation'.
      * src/cuirass/base.scm (evaluate): Don't add jobs to the Derivations table.
      (build-packages): Add columns that were in the Derivations table before.  Only
      build the derivations that were successfully registered, that is, those that
      didn't exist in the Builds table.  Give a derivation instead of a build id to
      DB-GET-BUILD.  Compute the number of failed jobs based on the derivations that
      were added to the table, instead of the jobs.
      * src/cuirass/database.scm (db-add-derivation, db-get-derivation): Remove
      exported procedures.
      (db-add-build): Catch SQLITE_CONSTRAINT_PRIMARYKEY error, which means that two
      jobs produced the same derivation, and return #f in that case.  Add columns
      that were in the Derivations table before.  Use 'derivation' as primary key
      for the Outputs table.
      (db-get-outputs): Use 'derivation' as identifier, instead of 'build-id'.
      (filters->order): Replace 'id' with 'rowid'.
      (db-get-builds): Add a 'derivation' filter.  Replace 'id' with 'rowid'.
      Remove the 'INNER JOIN Derivations'.  Replace Derivations with Builds.  Return
      'derivation' in first position to make it clear that it's the primary key.
      Pass DERIVATION instead of ID to DB-GET-OUTPUTS.
      (db-get-build): Allow to take a derivation as argument.  Use NUMBER? to
      differentiate between derivations and ids.
      (db-get-pending-derivations): Remove the 'SELECT DISTINCT' clause now that
      derivations are unique.  Remove the 'INNER JOIN Builds'.
      (db-get-evaluations-build-summary, db-get-builds-min, db-get-builds-max):
      Replace 'id' with 'rowid'.
      * src/schema.sql (Derivations): Remove table.
      (Outputs): Replace Builds.id with Builds.derivation.
      (Builds): Use 'derivation' as primary key.  Remove the 'id' column.  Add
      'job_name', 'system', 'nix_name' columns that were in the Derivations table
      before.
      (Builds_Derivations_index): Rename to Builds_index.  Update accordingly.
      (Derivations_index): Remove index.
      * src/sql/upgrade-2.sql: New file with SQL queries to upgrade the database.
      * tests/database.scm (make-dummy-job, make-dummy-derivation): Remove
      procedures.
      (make-dummy-build): Add columns that were in MAKE-DUMMY-DERIVATION.  Get the
      DRV parameter to be mandatory because it's a primary key.
      (%id): Remove parameter.
      ("db-add-derivation", "db-get-derivation"): Remove tests.
      ("db-add-build"): Expect #f, because it adds twice the same derivation.  Pass
      the derivation argument to MAKE-DUMMY-BUILD.
      ("db-update-build-status!"): Rename 'id' to 'derivation'.  Pass the derivation
      argument to MAKE-DUMMY-BUILD.  Remove the DB-ADD-DERIVATION call.
      ("db-get-builds", "db-get-pending-derivations"): Pass the derivation argument
      to MAKE-DUMMY-BUILD.  Remove the DB-ADD-DERIVATION calls.
      * tests/http.scm ("fill-db"): Remove DERIVATION1 and DERIVATION2, and put
      their content in BUILD1 and BUILD2.  Remove the DB-ADD-DERIVATION calls.
      4db99f64
    • Clément Lassieur's avatar
      database: Fix the builds limit issue. · b4d058fc
      Clément Lassieur authored
      Fixes <https://bugs.gnu.org/32300>.
      
      * src/cuirass/database.scm (filters->order): New procedure.
      (db-get-builds): Remove FORMAT-OUTPUT, CONS-OUTPUT, COLLECT-OUTPUTS,
      FINISH-GROUP, SAME-GROUP?, GROUP-OUTPUTS procedures.  Remove the 'LEFT JOIN
      Outputs' clause.  Use DB-GET-OUTPUTS for each build that was fetched.
      b4d058fc
    • Clément Lassieur's avatar
      database: Put database in /var/lib to avoid removal at each boot. · 31a398f8
      Clément Lassieur authored
      Fixes <https://bugs.gnu.org/32330>.
      
      * src/cuirass/database.scm (%package-database): Change default file name from
      /var/run/cuirass/cuirass.db to /var/lib/cuirass/cuirass.db.
      31a398f8
  3. Aug 05, 2018
  4. Aug 04, 2018
  5. Jul 30, 2018
    • Clément Lassieur's avatar
      http: Change the paramater format from two-elements lists to pairs. · 99241ef1
      Clément Lassieur authored
      * src/cuirass/database.scm (assqx-ref): Remove exported procedure.
      (db-get-builds, db-get-build): Adapt to new format.
      * src/cuirass/http.scm (request-parameters): Use (cons key param) instead
      of (list key param).
      (url-handler): Adapt to new format.
      * tests/database.scm ("db-get-builds"): Idem.
      99241ef1
    • TSholokhova's avatar
      Add a web interface. · 675cd04a
      TSholokhova authored
      
      * Makefile.am (dist_sql_DATA): Add static files.
      * src/cuirass/database.scm (assqx-ref): Export it.
      (db-get-builds): Add 'evaluation' filter and filters for pagination.
      (db-get-evaluations-build-summary, db-get-evaluations-id-min,
      db-get-evaluations-id-max, db-get-builds-min, db-get-builds-max): New exported
      procedures.
      * src/cuirass/http.scm (%static-directory): New parameter.
      (%page-size, %file-mime-types, %file-white-list): New variables.
      (handle-build-request, handle-builds-request): Move the WITH-CRITICAL-SECTION
      call out.
      (url-handler): Add RESPOND-HTML, RESPOND-STATIC-FILE and RESPOND-NOT-FOUND
      procedures.  Call WITH-CRITICAL-SECTION sooner for the '/build',
      '/api/latestbuilds' and '/api/queue' routes.  Add '/', '/jobset/<name>',
      '/eval/<id>', '/static/<path>' routes.  Use RESPOND-NOT-FOUND when the route
      isn't found.
      * src/cuirass/templates.scm: New file.
      (html-page, specifications-table, evaluation-info-table,
      build-eval-table): New exported procedures.
      (pagination): New procedure.
      
      Signed-off-by: default avatarClément Lassieur <clement@lassieur.org>
      675cd04a
    • TSholokhova's avatar
      Add static files. · e0cd000d
      TSholokhova authored
      This adds Bootstrap v4.1.1 (https://getbootstrap.com/) and Open Iconic
      v1.1.0 (https://useiconic.com/open
      
      ).
      
      * src/static/css/bootstrap.css: New file.
      * src/static/css/open-iconic-bootstrap.css: New file.
      * src/static/fonts/open-iconic.eot: New file.
      * src/static/fonts/open-iconic.otf: New file.
      * src/static/fonts/open-iconic.svg: New file.
      * src/static/fonts/open-iconic.ttf: New file.
      * src/static/fonts/open-iconic.woff: New file.
      * src/static/images/logo.png: New file.
      
      Signed-off-by: default avatarClément Lassieur <clement@lassieur.org>
      e0cd000d
  6. Jul 28, 2018
  7. Jul 20, 2018
    • Clément Lassieur's avatar
      database: Use SQLite in Multi-thread mode. · 6f8dc0b6
      Clément Lassieur authored
      This disables mutexing on database connection and prepared statement objects,
      thus making us responsible for serializing access to database connections and
      prepared statements.  It may result in a performance improvement.
      
      * src/cuirass/database.scm (db-init, db-open): Pass the SQLITE_OPEN_NOMUTEX
      flag to SQLITE-OPEN.
      6f8dc0b6
  8. Jul 17, 2018
    • Clément Lassieur's avatar
      Add support for multiple inputs. · 7b2f9e0d
      Clément Lassieur authored
      * Makefile.am (dist_sql_DATA): Add src/sql/upgrade-1.sql.
      * bin/cuirass.in (show-help, %options, main): Remove the LOAD-PATH option that
      was used afterwards as %GUIX-PACKAGE-PATH.
      * bin/evaluate.in (absolutize, input-checkout, spec-source, spec-load-path,
      spec-package-path, format-checkouts): New procedures.
      (%not-colon): Remove variable.
      (main): Take the load path, package path and PROC from the checkouts that
      result from the inputs.  Format the checkouts before sending them to the
      procedure.  Remove the LOAD-PATH argument.
      * doc/cuirass.texi (Overview, Database schema): Document the changes.
      * examples/{guix-jobs.scm, hello-git.scm, hello-singleton.scm,
      hello-subset.scm, random.scm}: Adapt to the new specification format.
      * examples/guix-track-git.scm (package->spec): Rename to PACKAGE->INPUT.
      (package->git-tracked): Replace FETCH-REPOSITORY with FETCH-INPUT and handle
      the new format of its return value.
      * examples/random-jobs.scm (make-random-jobs): Rename RANDOM to CHECKOUT.
      Rename the checkout from 'random (which is a specification) to 'cuirass (which
      is a checkout resulting from an input).
      * src/cuirass/base.scm (fetch-repository): Rename to fetch-input.  Rename SPEC
      to INPUT.  Return a checkout object instead of returning two values.
      (evaluate): Take a list of CHECKOUTS and COMMITS as arguments, instead of
      SOURCE.  Remove TOKENIZE and LOAD-PATH.  Pass the CHECKOUTS instead of the
      SOURCE to "evaluate".  Remove %GUIX-PACKAGE-PATH.  Build the EVAL object
      instead of getting it from "evaluate".
      (compile?, fetch-inputs, compile-checkouts): New procedures.
      (process-specs): Fetch all inputs instead of only fetching one repository.
      The result of that fetching operation is a list of CHECKOUTS whose COMMITS are
      used as a STAMP.
      (%guix-package-path, set-guix-package-path): Remove them.
      * src/cuirass/database.scm (db-add-input, db-get-inputs): New procedures.
      (db-add-specification, db-get-specifications): Adapt to the new specification
      format.  Add/get all inputs as well.
      (db-add-evaluation): Rename REVISION to COMMITS.  Store COMMITS as space
      separated commit hashes.
      (db-get-builds): Rename REPO_NAME to NAME.
      (db-get-stamp): Rename COMMIT to STAMP.  Return #f when there is no STAMP.
      (db-add-stamp): Rename COMMIT to STAMP.  Deal with DB-GET-STAMP's new return
      value.
      (db-get-evaluations): Rename REVISION to COMMITS.  Tokenize COMMITS.
      * src/cuirass/utils.scm (%non-blocking): Export it.
      * src/schema.sql (Inputs): New table that refers to the Specifications table.
      (Specifications): Move input related fields to the Inputs table.  Rename
      REPO_NAME to NAME.  Rename ARGUMENTS to PROC_ARGS.  Rename FILE to PROC_FILE.
      Add LOAD_PATH_INPUTS, PACKAGE_PATH_INPUTS and PROC_INPUT fields that refer to
      the Inputs table.
      (Stamps): Rename REPO_NAME to NAME.
      (Evaluations): Rename REPO_NAME to NAME.  Rename REVISION to COMMITS.
      (Specifications_index): Replace with Inputs_index.
      * src/sql/upgrade-1.sql: New file.
      * tests/database.scm (example-spec, make-dummy-eval, sqlite-exec): Adapt to
      the new specifications format.  Rename REVISION to COMMITS.
      * tests/http.scm (evaluations-query-result, fill-db): Idem.
      7b2f9e0d
  9. Jul 15, 2018
    • Clément Lassieur's avatar
      database: Call a specification 'jobset' instead of 'project'. · be713f8a
      Clément Lassieur authored
      This removes the possibility to filter specifications by branch, because
      branches were previously called 'jobset'.  But it doesn't matter because later
      on, specifications will have as many branches as inputs.  And people should
      filter by specification name instead.
      
      * doc/cuirass.texi (Build Information, Latest builds): Remove 'jobset',
      replace 'project' with 'jobset'.
      * src/cuirass/http.scm (build->hydra-build): Idem.
      * tests/database.scm (db-get-builds): Idem.
      * tests/http.scm (build-query-result, /api/latestbuilds?nr=1&jobset=guix,
      /api/latestbuilds?nr=1&jobset=gnu): Idem.
      * src/cuirass/database.scm (db-format-build, db-get-builds): Don't associate
      builds with branches (which were called 'jobset' afterwards).
      (db-get-builds): Remove the #:project filter.
      be713f8a
    • Clément Lassieur's avatar
      database: Add support for database upgrades. · 03c4095f
      Clément Lassieur authored
      * src/cuirass/database.scm (%package-sql-dir): New parameter.
      (db-load, db-schema-version, db-set-schema-version, latest-db-schema-version,
      schema-upgrade-file, db-upgrade): New procedures.
      (db-init): Set version corresponding to the existing upgrade-n.sql files.
      (db-open): If database exists, upgrade it.
      03c4095f
  10. Jul 14, 2018
  11. Jun 18, 2018
    • Clément Lassieur's avatar
      evaluate: Use a generic key to identify Cuirass arguments. · 14f310f3
      Clément Lassieur authored
      So that Cuirass specifications used to build 'guix-modular' can be named
      differently than "guix" and "guix-modular" (see Guix's
      build-aux/hydra/guix-modular.scm).
      
      The name is used as a primary key, so before that commit, it was also
      impossible to have several such specifications.
      
      This is a workaround, Cuirass should normally support several inputs per
      specification, as Hydra does.  The specification's name would then only be
      used to identify it.  See <https://bugs.gnu.org/31813
      
      >.
      
      * bin/evaluate.in (main): Replace custom NAME (passed to PROC) with 'guix'.
      
      Co-authored-by: default avatarMathieu Othacehe <m.othacehe@gmail.com>
      14f310f3
  12. Apr 23, 2018
  13. Apr 19, 2018
    • Mathieu Othacehe's avatar
      http: Add /api/evaluations route. · c40e61bd
      Mathieu Othacehe authored
      * src/cuirass/database.scm (db-get-evaluations): New exported procedure.
      * src/cuirass/http.scm (url-handler): Add /api/evaluations route.
      * tests/http.scm ("http"): Add /api/evaluations test route.
      c40e61bd
  14. Apr 10, 2018
  15. Apr 09, 2018
    • Ludovic Courtès's avatar
      Use the 2.2 'setvbuf' API style. · 43be95c4
      Ludovic Courtès authored
      * bin/cuirass.in (main): Use the 2.2 'setvbuf' API style.
      * examples/guix-track-git.scm (current-error-port): Likewise.
      43be95c4
    • Ludovic Courtès's avatar
      base: 'spawn-builds' really builds by chunks. · 2f374036
      Ludovic Courtès authored
      Fixes a regression introduced in
      074b9d02 whereby we'd attempt to build
      all of DRV at once.
      
      * src/cuirass/base.scm (spawn-builds): Pass BATCH, not DRV, to
      'build-derivations&' and to 'update-build-statuses!'.
      2f374036
    • Ludovic Courtès's avatar
      evaluate: Change '%load-path' once and for all. · 297b2919
      Ludovic Courtès authored
      * bin/evaluate.in (main): Do not restore the original '%load-path'.
      297b2919
    • Ludovic Courtès's avatar
      evaluate: Leave GUILE_LOAD_PATH unchanged. · c2298d44
      Ludovic Courtès authored
      Previously we'd systematically add the first argument to the search
      path.  When that first argument was the empty string (as with the
      'guix-modular' jobset), we'd thus add the current directory to the
      search path, even if the intent was to leave the load path unchanged.
      
      Furthermore, a3a7c09b changed load-path
      handling to be explicit in Scheme.
      
      * bin/evaluate.in: Remove GUILE_LOAD_PATH assignment.
      c2298d44
    • Ludovic Courtès's avatar
      evaluate: Change directory to SOURCE. · ce405612
      Ludovic Courtès authored
      * bin/evaluate.in (with-directory-excursion): Remove.
      (main): chdir to SOURCE.
      ce405612
    • Ludovic Courtès's avatar
      evaluate: Do not load Guix/Cuirass modules upfront. · e8cfbe67
      Ludovic Courtès authored
      This avoids a situation whereby, when evaluating from a Guix checkout,
      we'd have already loaded slightly different and incompatible (guix …)
      modules.
      
      Hydra's 'hydra-eval-guile-jobs' implemented the same solution as in this
      patch already.
      
      * bin/evaluate.in: Remove use of (cuirass …) and (guix …) modules.
      (ref): New procedure.
      (with-directory-excursion): New macro.
      (main): Use 'ref'.  Remove uses of Guix or Cuirass modules.
      e8cfbe67
  16. Apr 08, 2018
  17. Apr 06, 2018
    • Ludovic Courtès's avatar
      evaluate: Really pass arguments like Hydra. · 38d367d7
      Ludovic Courtès authored
      * bin/evaluate.in (main): Use SPEC's #:name as a key in ARGS.
      * examples/random-jobs.scm (make-random-jobs): Adjust accordingly.
      38d367d7
    • Ludovic Courtès's avatar
      base: Let sqlite handle deduplication of the list of pending derivations. · 074b9d02
      Ludovic Courtès authored
      Previously we would make a SQL query that would return many build jobs,
      and then call 'delete-duplicates' on that.  This was extremely wasteful
      because the list of returned by the query was huge leading to a heap of
      several tens of GiB on a big database, and 'delete-duplicates' would
      lead to more GC and it would take ages.
      
      Furthermore, since 'delete-duplicates' is written in C as of Guile
      2.2.3, it is uninterruptible from Fiber's viewpoint.  Consequently, the
      kernel thread running the 'restart-builds' fiber would never schedule
      other fibers, which could lead to deadlocks--e.g., since fibers are
      scheduled on a circular shuffled list of kernel threads, once every N
      times, a web server fiber would be sent to that kernel thread and not be
      serviced.
      
      * src/cuirass/base.scm (shuffle-jobs): Remove.
      (shuffle-derivations): New procedure.
      (spawn-builds): Take a list of derivations instead of a list of jobs.
      (restart-builds): Remove 'builds' parameter.  Remove 'delete-duplicates'
      call.  Remove done/remaining partitioning.
      (build-packages): Adjust to pass 'spawn-builds' a list of derivations.
      * bin/cuirass.in (main): Remove computation of PENDING.  Remove second
      parameter in call to 'restart-builds'.
      074b9d02
    • Ludovic Courtès's avatar
      database: Add 'db-get-pending-derivations'. · fc24ca2e
      Ludovic Courtès authored
      * src/cuirass/database.scm (db-get-pending-derivations): New procedure.
      * tests/database.scm ("database")["db-get-pending-derivations"]: New test.
      fc24ca2e
  18. Apr 05, 2018
  19. Apr 03, 2018
    • Ludovic Courtès's avatar
      utils: Add critical sections. · f090c0f4
      Ludovic Courtès authored
      * src/cuirass/utils.scm (make-critical-section)
      (call-with-critical-section): New procedures.
      (with-critical-section): New macro.
      * src/cuirass/http.scm (with-database-access): Remove.
      (handle-build-request, handle-builds-request, url-handler): Use
      'with-critical-section' instead of 'with-database-access'.
      (run-cuirass-server): Remove 'spawn-fiber' call.  Use
      'make-critical-section' instead.
      f090c0f4
  20. Apr 02, 2018
    • Ludovic Courtès's avatar
      base: Do not resort to Coreutils' "chmod". · 543709fb
      Ludovic Courtès authored
      * src/cuirass/base.scm (make-writable-copy)[chmod+w]: New procedure.
      Replace 'system*' call with 'file-system-fold' call.
      543709fb
    • Ludovic Courtès's avatar
      base: Make a writable copy of the checkout only when #:no-compile? is false. · 2fe7ff87
      Ludovic Courtès authored
      This avoids copying things back and forth.
      
      * src/cuirass/base.scm (fetch-repository): Add #:writable-copy?
      parameter.  Call 'make-writable-copy' when it's true.
      (copy-repository-cache): Remove.
      (make-writable-copy): New procedure.
      (evaluate): Add 'source' parameter and pass it to the 'evaluate' program.
      (process-specs): Define 'compile?'.  Pass #:writable-copy? to
      'fetch-repository'.  Remove call to 'copy-repository-cache'.  Remove
      computation of the checkout directory name.  Pass CHECKOUT to 'evaluate'.
      * bin/evaluate.in (main): Replace 'cachedir' with 'source'.  Remove
      computation of the checkout directory name.
      2fe7ff87
Loading