Index: dbfile.scm ================================================================== --- dbfile.scm +++ dbfile.scm @@ -453,10 +453,13 @@ (with-output-to-port (current-error-port) (lambda () (apply print params)))) +;; +;; converge this with dbmod:safely-open-db +;; (define (dbfile:cautious-open-database fname init-proc sync-mode journal-mode #!key (tries-left 500)(force-init #f)) (let* ((busy-file (conc fname "-journal")) (delay-time (* (- 51 tries-left) 1.1)) (write-access (file-write-access? fname)) Index: dbmod.scm ================================================================== --- dbmod.scm +++ dbmod.scm @@ -27,13 +27,15 @@ (declare (uses mtargs)) (declare (uses mtmod)) (module dbmod ( - ;; for debug, can be commented out + ;; for debug, can be commented out in production dbmod:safely-open-db - + dbmod:with-db + + ;; used elsewhere, keep dbmod:db-to-db-sync db:test-get-event_time db:test-get-item-path db:test-get-testname @@ -297,24 +299,27 @@ ;; MOVE THIS CALL TO INSIDE THE sync-proc CALL (dbr:dbstruct-last-update-set! dbstruct curr-secs) ))) (assert (sqlite3:database? dbh) "FATAL: bad db handle in dbmod:with-db") (if use-mutex (mutex-lock! *db-with-db-mutex*)) - (let* ((res (let loop ((count 3)) + (let* ((res (let loop ((count 10)) (condition-case (apply proc dbdat dbh params) - (exn (busy) + (exn (sqlite3) ;; was 'busy', but never got hit (if (> count 0) (begin (debug:print-info 0 *default-log-port* "dbmod:with-db, database is busy, will try "count" more times.") (thread-sleep! 1) (loop (- count 1))) (begin - (debug:print-info 0 *default-log-port* "dbmod:with-db, database is busy, giving up.") + (debug:print-info 0 *default-log-port* "dbmod:with-db, database is busy, giving up. params: "params) (exit 1)))) + (exn (locked) + (dbfile:print-err exn "ERROR: dbmod:with-db: database locked for run-id "run-id", params "params", message: " + ((condition-property-accessor 'exn 'message) exn))) (exn () - (dbfile:print-err exn "ERROR: dbmod:with-db: Unknown error with database for run-id "run-id", message: " + (dbfile:print-err exn "ERROR: dbmod:with-db: Unknown error with database for run-id "run-id", params "params", message: " ((condition-property-accessor 'exn 'message) exn)) (exit 2)))))) (if use-mutex (mutex-unlock! *db-with-db-mutex*)) res))) @@ -354,10 +359,13 @@ (else (debug:print 0 *default-log-port* "Unknown dbfile:cache-method setting: " (dbfile:cache-method)) #f))) +;; +;; converge this with dbfile:cautious-open-database +;; (define (dbmod:safely-open-db dbfullname init-proc write-access) (dbfile:with-simple-file-lock (conc dbfullname".lock") (lambda () (let* ((dbexists (file-exists? dbfullname)) Index: megatest.scm ================================================================== --- megatest.scm +++ megatest.scm @@ -35,11 +35,11 @@ (declare (uses processmod)) (declare (uses processmod.import)) (declare (uses configfmod)) (declare (uses configfmod.import)) (declare (uses pgdb)) -;; (declare (uses pgdb.import)) +(declare (uses pgdb.import)) (declare (uses mtmod)) (declare (uses mtmod.import)) (declare (uses servermod)) (declare (uses servermod.import)) (declare (uses dbfile)) @@ -57,22 +57,21 @@ (declare (uses apimod)) (declare (uses apimod.import)) (declare (uses rmtmod)) (declare (uses rmtmod.import)) (declare (uses tasksmod)) -;; (declare (uses tasksmod.import)) +(declare (uses tasksmod.import)) (declare (uses testsmod)) -;; (declare (uses testsmod.import)) +(declare (uses testsmod.import)) (declare (uses subrunmod)) -;; (declare (uses subrunmod.import)) +(declare (uses subrunmod.import)) (declare (uses archivemod)) -;; (declare (uses archivemod.import)) +(declare (uses archivemod.import)) (declare (uses runsmod)) -;; comment out following line for performance, but debug result. (declare (uses runsmod.import)) (declare (uses cpumod)) -;; (declare (uses cpumod.import)) +(declare (uses cpumod.import)) (declare (uses runsmod)) (declare (uses ezstepsmod)) (declare (uses launchmod)) (declare (uses tdb))