AtlatestRepositoryfolio
1
;;; f3b-renamer.sgl -- one real writer process performing the 3-file rename,2
;;; for gate-f3b.sh's kill arms. Prints RENAMER_READY once the coordinator3
;;; is built, waits for the start file, runs the rename, prints RENAMER_DONE4
;;; or the refusal. The gate SIGKILLs it at staggered delays and then proves5
;;; the all-or-nothing invariant.6
(import (sigil core) (sigil io) (sigil fs) (sigil string) (sigil time) (sigil path)7
(folio doc revision) (folio doc bounded) (folio doc service)8
(folio doc coordinator) (folio doc transaction) (folio doc structural))10
(define (need name)11
(or (getenv name) (begin (println "RENAMER ERROR ~a not set" name) (exit 3))))12
(define root (need "F3B_ROOT"))13
(define start-file (need "F3B_START_FILE"))14
(define lib-dir (or (getenv "F3B_LIB") "build/dev/lib"))15
(define src-dir (or (getenv "F3B_SRC") "src"))17
(define coord (make-coordinator root18
(make-service (default-worker-argv lib-dir src-dir)19
default-limits)))20
(println "RENAMER_READY")21
(let wait () (unless (file-exists? start-file) (sleep 0.005) (wait)))22
(let ((r (folio-rename-id! coord "t-target" "t-retargeted"23
(revision-of-file (path-join root "owner.sgd")))))24
(cond ((sop-result? r) (println "RENAMER_DONE ~a" (sop-result-detail r)))25
((txn-refusal? r) (println "RENAMER_REFUSED ~a" (txn-refusal-reason r)))))