@@ -2571,43 +2571,53 @@ ;; (if (args:get-arg "-db2db") (let* ((duh (launch:setup)) (src-db (args:get-arg "-from")) (dest-db (args:get-arg "-to")) - (sync-period (args:get-arg "-period")) ;; NOT IMPLEMENTED YET - (sync-timeout (args:get-arg "-timeout")) ;; NOT IMPLEMENTED YET + (sync-period (args:get-arg-number "-period")) + (sync-timeout (args:get-arg-number "-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)) (lockfile (conc dest-db".sync-lock")) (keys (db:get-keys #f)) - ) - - (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 () - ;;(with-output-to-file lockfile - ;; (lambda () - ;; (print (current-process-id)))) - (debug:print-info 0 *default-log-port* "Attempting to sync data from "src-db" to "dest-db"...") - (if #f ;; (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)))) - (let ((res (dbmod:db-to-db-sync src-db dest-db 0 (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.")))) - ;; (delete-file* lockfile) - ))) - (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))) + (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))) + (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))) (if (args:get-arg "-list-test-time") (let* ((toppath (launch:setup))) (task:get-test-times) (set! *didsomething* #t)))