AtlatestRepositoryfolio

folio / tree / testf3b-renamer.sgl

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 coordinator
3;;; is built, waits for the start file, runs the rename, prints RENAMER_DONE
4;;; or the refusal. The gate SIGKILLs it at staggered delays and then proves
5;;; 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))
9
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 root
18 (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)))))