Index: db.scm
==================================================================
--- db.scm
+++ db.scm
@@ -332,10 +332,13 @@
 	       ;(tmpdbmodtime (if dbfexists  (common:lazy-sqlite-db-modification-time tmpdbfname) #f)) 
 					;if wal mode is on -WAL and -shm file get created when db:open-megatest-db is called. modtimedelta will always be < 10 so db in tmp not get synced
           ;(tmpdbmodtime (if dbfexists (db:get-last-update-time (car tmpdb)) #f))    
           ;(fmt (file-modification-time tmpdbfname))
 	       (modtimedelta (and mtdbmodtime tmpdbmodtime (- mtdbmodtime tmpdbmodtime))))
+          (sqlite3:execute (car mtdb) "drop trigger if exists update_tests_trigger")
+          (sqlite3:execute (car mtdb) "drop trigger if exists update_runs_trigger")
+          
          ;(print "mtdbmodtime " mtdbmodtime " tmpdbmodtime " tmpdbmodtime " mtdbpath " mtdbpath " " (conc *toppath* "/megatest.db"))
 	        ;;(debug:print-info 13 *default-log-port* "db:open-db>> mtdbpath="mtdbpath" mtdbexists="mtdbexists" and write-access="write-access)
           (if (and dbexists (not write-access))
               (begin
                 (set! *db-write-access* #f)
@@ -510,20 +513,22 @@
 	 '("run_duration"   #f)
 	 '("comment"        #f)
 	 '("event_time"     #f)
 	 '("fail_count"     #f)
 	 '("pass_count"     #f)
-	 '("archived"       #f))
+	 '("archived"       #f)
+         '("last_update"    #f))
   (list "test_steps"
 	 '("id"             #f)
 	 '("test_id"        #f)
 	 '("stepname"       #f)
 	 '("state"          #f)
 	 '("status"         #f)
 	 '("event_time"     #f)
 	 '("comment"        #f)
-	 '("logfile"        #f))
+	 '("logfile"        #f)
+         '("last_update"    #f))
    (list "test_data"
 	 '("id"             #f)
 	 '("test_id"        #f)
 	 '("category"       #f)
 	 '("variable"       #f)
@@ -531,11 +536,12 @@
 	 '("expected"       #f)
 	 '("tol"            #f)
 	 '("units"          #f)
 	 '("comment"        #f)
 	 '("status"         #f)
-	 '("type"           #f))))
+	 '("type"           #f)
+         '("last_update"    #f))))
 
 ;; needs db to get keys, this is for syncing all tables
 ;;
 (define (db:sync-main-list dbstruct)
   (let ((keys  (db:get-keys dbstruct)))
@@ -547,11 +553,11 @@
      (list "metadat" '("var" #f) '("val" #f))
      (append (list "runs" 
 		   '("id"  #f))
 	     (map (lambda (k)(list k #f))
 		  (append keys
-			  (list "runname" "state" "status" "owner" "event_time" "comment" "fail_count" "pass_count" "contour" ))))
+			  (list "runname" "state" "status" "owner" "event_time" "comment" "fail_count" "pass_count" "contour" "last_update"))))
      (list "test_meta"
 	   '("id"             #f)
 	   '("testname"       #f)
 	   '("owner"          #f)
 	   '("description"    #f)
@@ -728,11 +734,11 @@
 					    "last_update"
 					    (car last-update))
 					#f))
 		 (num-fields (length fields))
 		 (field->num (make-hash-table))
-		 (num->field (apply vector (map car fields)))
+		 (num->field (apply vector (map car fields))) ;; BBHERE
 		 (full-sel   (conc "SELECT " (string-intersperse (map car fields) ",") 
 				   " FROM " tablename (if use-last-update ;; apply last-update criteria
 							  (conc " WHERE " last-update-field " >= " last-update-value)
 							  "")
 				   ";"))
@@ -741,11 +747,14 @@
 		 (fromdat    '())
 		 (fromdats   '())
 		 (totrecords 0)
 		 (batch-len  (string->number (or (configf:lookup *configdat* "sync" "batchsize") "100")))
 		 (todat      (make-hash-table))
-		 (count      0))
+		 (count      0)
+
+                 (delay-handicap  (string->number (or (configf:lookup *configdat* "sync" "delay-handicap") "0")))
+                 )
 
 	    ;; set up the field->num table
 	    (for-each
 	     (lambda (field)
 	       (hash-table-set! field->num field count)
@@ -769,17 +778,23 @@
 		(set! fromdats (cons fromdat fromdats)))
 
 	    (if (common:low-noise-print 120 "sync-records")
 		(debug:print-info 4 *default-log-port* "found " totrecords " records to sync"))
 
-	    ;; read the target table
+	    ;; read the target table; BBHERE
 	    (sqlite3:for-each-row
 	     (lambda (a . b)
 	       (hash-table-set! todat a (apply vector a b)))
 	     (db:dbdat-get-db todb)
 	     full-sel)
 
+            (when (and delay-handicap (> delay-handicap 0))
+              (debug:print-info 0 *default-log-port* "imposing synthetic sync delay of "delay-handicap" seconds since sync/delay-handicap is configured")
+              (thread-sleep! delay-handicap)
+              (debug:print-info 0 *default-log-port* "synthetic sync delay of "delay-handicap" seconds completed")
+              )
+            
 	    ;; first pass implementation, just insert all changed rows
 	    (for-each 
 	     (lambda (targdb)
 	       (let* ((db     (db:dbdat-get-db targdb))
 		      (stmth  (sqlite3:prepare db full-ins)))