@@ -2571,53 +2571,55 @@ (let* ((duh (launch:setup)) (src-db (args:get-arg "-from")) (dest-db (args:get-arg "-to")) ;; (sync-period (args:get-arg-number "-period")) ;; (sync-timeout (args:get-arg-number "-timeout")) - (sync-period-in (args:get-arg "-period")) + (sync-period-in (args:get-arg "-period")) (sync-timeout-in (args:get-arg "-timeout")) - (sync-period (if sync-period-in (string->number sync-period-in) #f)) - (sync-timeout (if sync-timeout-in (string->number sync-timeout-in) #f)) + (sync-period (if sync-period-in (string->number sync-period-in) #f)) + (sync-timeout (if sync-timeout-in (string->number sync-timeout-in) #f)) (lockfile (conc dest-db".sync-lock")) (keys (db:get-keys #f)) (thesync (lambda (last-update) (debug:print-info 0 *default-log-port* "Attempting to sync data from "src-db" to "dest-db"...") (if (not (file-exists? dest-db)) (begin - (dbfile:with-simple-file-lock - (conc dest-db ".lock") ;; is the db being opened right now? - (lambda () - (debug:print 0 *default-log-port* "Using copy to create "dest-db" from "src-db) - (file-copy src-db dest-db) - 1))) + (debug:print 0 *default-log-port* "Using copy to create "dest-db" from "src-db) + (file-copy src-db dest-db) + 1) (let ((res (dbmod:db-to-db-sync src-db dest-db last-update (dbfile:db-init-proc) keys))) (if res (debug:print-info 0 *default-log-port* "Synced " res " records from "src-db" to "dest-db) (debug:print-info 0 *default-log-port* "No sync due to permissions or other issue.")) - res))))) - (if (and src-db dest-db) - (if (file-exists? src-db) - (if (file-exists? lockfile) - (debug:print 0 *default-log-port* "Lock "lockfile" exists, skipping sync...") - (dbfile:with-simple-file-lock - (conc dest-db"-sync-running") - (lambda () - (let loop ((last-changed (current-seconds)) - (last-update 0)) - (let* ((changes (dbfile:with-simple-file-lock - lockfile - (lambda () - (thesync last-update)))) - (now-time (current-seconds))) - (if (and sync-period sync-timeout) ;; - (if (> sync-timeout (- now-time last-changed)) - (begin - (if sync-period (thread-sleep! sync-period)) - (loop (if (> changes 0) now-time last-changed) now-time))))))))) - (debug:print 0 *default-log-port* "No sync due to unreadble or non-existant source file"src-db)) - (debug:print 0 *default-log-port* "Usage for -db2db; -to and -from must be specified")) - (set! *didsomething* #t))) + res)))) + (start-time (current-seconds))) + (if (and src-db dest-db) + (if (file-exists? src-db) + (if (file-exists? lockfile) + (debug:print 0 *default-log-port* "Lock "lockfile" exists, skipping sync...") + (dbfile:with-simple-file-lock + lockfile + (lambda () + (let loop ((last-changed (current-seconds)) + (last-update 0)) + (let* ((changes (handle-exceptions + exn + (begin + (debug:print 0 *default-log-port* "Exception in sync: "(condition->list exn)) + (delete-file lockfile) + (exit)) + (thesync last-update))) + (now-time (current-seconds))) + (if (and sync-period sync-timeout) ;; + (if (and (< (- now-time start-time) 600) ;; hard limit on how long we run for + (> sync-timeout (- now-time last-changed))) + (begin + (if sync-period (thread-sleep! sync-period)) + (loop (if (> changes 0) now-time last-changed) now-time))))))))) + (debug:print 0 *default-log-port* "No sync due to unreadble or non-existant source file"src-db)) + (debug:print 0 *default-log-port* "Usage for -db2db; -to and -from must be specified")) + (set! *didsomething* #t))) (if (args:get-arg "-list-test-time") (let* ((toppath (launch:setup))) (task:get-test-times) (set! *didsomething* #t)))