Megatest

Check-in [4c15e85b4d]
Login
Overview
Comment:Fixed overlapping calls to sync to on disk db
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | v1.80
Files: files | file ages | folders
SHA1: 4c15e85b4d8d34707e81c740004e9554d126ba23
User & Date: matt on 2023-04-11 08:21:23
Other Links: branch diff | manifest | tags
Context
2023-04-11
14:23
added exception handler to deletion of .servinfo file check-in: c96bc5893d user: mmgraham tags: v1.80
08:21
Fixed overlapping calls to sync to on disk db check-in: 4c15e85b4d user: matt tags: v1.80
2023-04-10
19:36
Improved run away server throttling check-in: 4115ca72bc user: matt tags: v1.80
Changes

Modified dbmod.scm from [2c4a7875e4] to [7169609c84].

147
148
149
150
151
152
153


154
155
156
157
158
159
160
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162







+
+







   (lambda ()
     (let* ((db      (sqlite3:open-database dbfullname))
	    (handler (sqlite3:make-busy-timeout 136000)))
       (sqlite3:set-busy-handler! db handler)
       (if write-access
	   (init-proc db))
       db))))

(define *sync-in-progress* #f)

;; Open the inmem db and the on-disk db
;; populate the inmem db with data
;;
;; Updates fields in dbstruct
;; Returns dbstruct
;;
192
193
194
195
196
197
198
199
200
201








202
203
204
205
206
207
208
194
195
196
197
198
199
200



201
202
203
204
205
206
207
208
209
210
211
212
213
214
215







-
-
-
+
+
+
+
+
+
+
+







    ;; (assert (sqlite3:database? db) "FATAL:  open-dbmoddb: db is not a db")
    (dbr:dbstruct-inmem-set!     dbstruct inmem)
    (dbr:dbstruct-ondiskdb-set!  dbstruct db)
    (dbr:dbstruct-dbfile-set!    dbstruct dbfullname)
    (dbr:dbstruct-dbfname-set!   dbstruct dbfname)
    (dbr:dbstruct-sync-proc-set! dbstruct
				 (lambda (last-update)
				   ;; (if db
				       (dbmod:sync-gasket tables last-update inmem db
						    dbfullname syncdir))) ;; )
				   (if *sync-in-progress*
				       (debug:print 0 *default-log-port* "WARNING: overlapping calls to sync to disk")
				       (begin
					 (set! *sync-in-progress* #t)
					 (dbmod:sync-gasket tables last-update inmem db
							    dbfullname syncdir)
					 (thread-sleep! 0.5) ;; ensure at least 1/2 second down time between sync calls
					 (set! *sync-in-progress* #f)))))
    ;; (dbmod:sync-tables tables #f db inmem)
    ;; (if db
    (dbmod:sync-gasket tables #f inmem db dbfullname 'fromdest) ;; ) ;; load into inmem
    (dbr:dbstruct-last-update-set! dbstruct (current-seconds)) ;; should this be offset back in time by one second?
    dbstruct))

;;    (if (eq? syncdir 'todisk) ;; sync to disk normally, sync from in dashboard
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
230
231
232
233
234
235
236

237
238
239
240
241
242
243







-







    (else
     (case direction
       ((todisk)
	(dbmod:sync-tables tables last-update inmem dbh)
	)
       (else
	(dbmod:sync-tables tables last-update dbh inmem))))))


(define (dbmod:close-db dbstruct)
  ;; do final sync to disk file
  ;; (do-sync ...)
  (sqlite3:finalize! (dbr:dbstruct-ondiskdb dbstruct)))

;;======================================================================