Index: dbfile.scm ================================================================== --- dbfile.scm +++ dbfile.scm @@ -1034,59 +1034,71 @@ (define keep-age-param (make-parameter 10)) (define qif-slope (make-parameter 100)) ;; create a dropping near the db file in a qif dir ;; use count of such files to gate queries (queries in flight) -;; + + (define (dbfile:wait-for-qif fname run-id params) (let* ((thedir (pathname-directory fname)) (destdir (conc thedir"/qif-"run-id)) + ;; (destdir (conc thedir"/qif")) (uniqn (get-area-path-signature (conc (or run-id "main") params))) (crumbn (conc destdir"/"(current-seconds)"-"uniqn"."(current-process-id)))) (if (not (file-exists? destdir))(create-directory (conc destdir"/attic") #t)) + (let loop ((count 0)) (let* ((currlks (glob (conc destdir"/*"))) (numqrys (length currlks)) + (cleanup + (if (> numqrys 0) + (for-each + (lambda (f) + (if + (and (not (directory? f)) + (> (- (current-seconds) + (handle-exceptions + exn + (current-seconds) ;; file is likely gone, just fake out + (file-modification-time f) + ) + ) + (keep-age-param) + ) + ) + (let* ((basedir (pathname-directory f)) + (filen (pathname-file f)) + (destf (conc basedir"/attic/"filen))) + ;; (dbfile:print-err "Moving qif file "f" older than " (keep-age-param) " seconds to "destf) + ;; (delete-file* f) + (handle-exceptions + exn + #t + (file-move f destf #t))))) + currlks + ) + ) + ) (delayval (cond ;; do a droopish curve ((> numqrys 50) - (if (> numqrys 50) - (for-each - (lambda (f) - (if (> (- (current-seconds) - (handle-exceptions - exn - (current-seconds) ;; file is likely gone, just fake out - (file-modification-time f))) - (keep-age-param)) - (let* ((basedir (pathname-directory f)) - (filen (pathname-file f)) - (destf (conc basedir"/attic/"filen))) - (dbfile:print-err "Moving qif file "f" older than 10 seconds to "destf) - ;; (delete-file* f) - (handle-exceptions - exn - #t - (file-move f destf #t))))) - currlks)) - 1) ;; 50 and above => 1 + 1) ;; 50 and above => 1 ((> numqrys 10) (* numqrys (/ 1 (qif-slope)))) ;; slope of 1/100 - ;; ((> numqrys 30) 0.50) - ;; ((> numqrys 25) 0.20) - ;; ((> numqrys 20) 0.10) - ;; ((> numqrys 15) 0.05) - ;; ((> numqrys 10) 0.01) (else #f)))) (if (and delayval (< count 5)) (begin + ;; -(print "wait-for-qif sleeping " delayval " numqrys = " numqrys " fname = " fname) (thread-sleep! delayval) (loop (+ count 1)))))) (with-output-to-file crumbn (lambda () (print fname" run-id="run-id" params="params) )) crumbn)) + + + (define no-condition-db-with-db (make-parameter #t)) ;; (db:with-db dbstruct run-id sqlite3:exec "select blah fgrom blaz;") ;; r/w is a flag to indicate if the db is modified by this query #t = yes, #f = no