Overview
Context
Changes
Modified dbmod.scm
from [7a67cc9d95]
to [b670c82b28].
︙ | | |
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
;; open or create the disk db file
;; create and fill the inmemory db
;; assemble into dbr:dbdat struct and return
;;
(define (db:open-dbdat apath dbfile dbinit-proc)
(let* (;; (dbfile (db:run-id->path apath run-id))
(db (db:open-run-db dbfile dbinit-proc))
(inmem (db:open-inmem-db dbinit-proc))
;; (inmem (db:open-inmem-db dbinit-proc))
(dbdat (make-dbr:dbdat
db: #f ;; db
inmem: inmem
inmem: db ;; inmem
;; run-id: run-id ;; no can do, there are many run-id values that point to single db
fname: dbfile)))
;; now sync the disk file data into the inmemory db
(db:sync-tables (db:sync-all-tables-list) '("last_update" . 0) db inmem)
(sqlite3:finalize! db) ;; open and close every sync
;; (db:sync-tables (db:sync-all-tables-list) '("last_update" . 0) db inmem)
;; (sqlite3:finalize! db) ;; open and close every sync
dbdat))
;; (define (db:open-dbdat apath dbfile dbinit-proc)
;; (let* (;; (dbfile (db:run-id->path apath run-id))
;; (db (db:open-run-db dbfile dbinit-proc))
;; (inmem (db:open-inmem-db dbinit-proc))
;; (dbdat (make-dbr:dbdat
;; db: #f ;; db
;; inmem: inmem
;; ;; run-id: run-id ;; no can do, there are many run-id values that point to single db
;; fname: dbfile)))
;; ;; now sync the disk file data into the inmemory db
;; (db:sync-tables (db:sync-all-tables-list) '("last_update" . 0) db inmem)
;; (sqlite3:finalize! db) ;; open and close every sync
;; dbdat))
;; open the disk database file
;; NOTE: May need to add locking to file create process here
;; returns an sqlite3 database handle
;;
(define (db:open-run-db dbfile dbinit-proc)
(let* ((parent-dir (pathname-directory dbfile)))
|
︙ | | |
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
|
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
|
-
+
-
+
|
;; - uses db:initialize-db to create the schema
;;
;; Make the dbstruct, call for main db at least once
;; sync disk db to inmem
;;
;; called in http-transport and replicated in rmt.scm for *local* access.
;;
(define (db:setup run-id)
(define (db:setup db-file) ;; run-id)
(assert *toppath* "FATAL: db:setup called before toppath is available.")
(let* ((dbstruct (or *dbstruct-db* (make-dbr:dbstruct)))
(db-file (db:run-id->path *toppath* run-id)))
#;(db-file (db:run-id->path *toppath* run-id)))
(db:get-dbdat dbstruct *toppath* db-file)
(if (not *dbstruct-db*)(set! *dbstruct-db* dbstruct))
dbstruct))
;;======================================================================
;; setting/getting a lock on the db for only one server per db
;;
|
︙ | | |
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
|
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
|
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
;; ;; (mutex-unlock! *db-multi-sync-mutex*)
;; ;; (stack-push! (dbr:dbstruct-dbstack dbstruct) tmpdb)))
;; NOTE: touched logic is disabled/not done
;; sync run to disk if touched
;;
(define (db:sync-inmem->disk dbstruct apath dbfile #!key (force-sync #f))
#f) ;; disabled
(let* ((dbdat (db:get-dbdat dbstruct apath dbfile))
(dbfullname (conc apath "/" dbfile))
(db (db:open-run-db dbfullname db:initialize-db)) ;; (dbr:dbdat-db dbdat))
(inmem (dbr:dbdat-inmem dbdat))
(start-t (current-seconds))
(last-update (dbr:dbdat-last-write dbdat))
(last-sync (dbr:dbdat-last-sync dbdat)))
(debug:print-info 0 *default-log-port* "Syncing for dbfile: "dbfile", last-update: "last-update", last-sync: "last-sync)
(mutex-lock! *db-multi-sync-mutex*)
(let* ((update_info (cons "last_update" (if force-sync 0 last-update))) ;; "last_update"))
(need-sync (or force-sync (>= last-update last-sync))))
(if need-sync
(begin
(db:sync-tables (db:sync-all-tables-list) update_info inmem db)
(dbr:dbdat-last-sync-set! dbdat start-t))
(debug:print 0 *default-log-port* "Skipping sync as nothing touched.")))
(sqlite3:finalize! db)
(mutex-unlock! *db-multi-sync-mutex*)))
;; (let* ((dbdat (db:get-dbdat dbstruct apath dbfile))
;; (dbfullname (conc apath "/" dbfile))
;; (db (db:open-run-db dbfullname db:initialize-db)) ;; (dbr:dbdat-db dbdat))
;; (inmem (dbr:dbdat-inmem dbdat))
;; (start-t (current-seconds))
;; (last-update (dbr:dbdat-last-write dbdat))
;; (last-sync (dbr:dbdat-last-sync dbdat)))
;; (debug:print-info 0 *default-log-port* "Syncing for dbfile: "dbfile", last-update: "last-update", last-sync: "last-sync)
;; (mutex-lock! *db-multi-sync-mutex*)
;; (let* ((update_info (cons "last_update" (if force-sync 0 last-update))) ;; "last_update"))
;; (need-sync (or force-sync (>= last-update last-sync))))
;; (if need-sync
;; (begin
;; (db:sync-tables (db:sync-all-tables-list) update_info inmem db)
;; (dbr:dbdat-last-sync-set! dbdat start-t))
;; (debug:print 0 *default-log-port* "Skipping sync as nothing touched.")))
;; (sqlite3:finalize! db)
;; (mutex-unlock! *db-multi-sync-mutex*)))
;; TODO: Add final sync to this
;;
#;(define (db:safely-close-sqlite3-db db stmt-cache #!key (try-num 3))
(if (<= try-num 0)
#f
(handle-exceptions
|
︙ | | |
744
745
746
747
748
749
750
751
752
753
754
755
756
757
|
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
|
+
|
(not (equal? (vector-ref fromrow i)(vector-ref curr i))))
(set! same #f))
(if (and same
(< i (- num-fields 1)))
(loop (+ i 1))))
(if (not same)
(begin
(debug:print 0 *default-log-port* "applying data "fromrow"to table "tablename", numrecs="numrecs)
(apply sqlite3:execute stmth (vector->list fromrow))
(hash-table-set! numrecs tablename (+ 1 (hash-table-ref/default numrecs tablename 0)))))))
fromdat-lst))))
fromdats)
(sqlite3:finalize! stmth)
(if (member "last_update" field-names)
(db:create-trigger db tablename)))))
|
︙ | | |
Modified tests/unittests/basicserver.scm
from [1303cd104d]
to [928bc7546a].
︙ | | |
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
-
+
|
;; (for-each (lambda (tdat)
;; (test #f tdat (loop-test (rmt:conn-ipaddr *main*)
;; (rmt:conn-port *main*) tdat)))
;; (list 'a
;; '(a "b" 123 1.23 )))
(test #f #t (rmt:send-receive 'ping #f 'hello))
(define *db* (db:setup #f))
(define *db* (db:setup ".db/main.db"))
;; these let me cut and paste from source easily
(define apath *toppath*)
(define dbname ".db/2.db")
(define remote *rmt:remote*)
(define keyvals '(("SYSTEM" "a")("RELEASE" "b")))
|
︙ | | |
Modified tests/unittests/server.scm
from [998fe5c2f9]
to [288618866d].
︙ | | |
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
-
+
-
+
|
;; rmt:get-conn
;; common:watchdog
;; rmt:find-main-server
;; get-all-server-pkts
;; get-viable-servers
;; get-best-candidate
;; api:run-server-process
api:process-request
;; api:process-request
;; rmt:run
;; rmt:try-start-server
)
(define *db* (db:setup #f))
(define *db* (db:setup ".db/main.db"))
;; these let me cut and paste from source easily
(define apath *toppath*)
(define dbname ".db/2.db")
(define remote *rmt:remote*)
(define keyvals '(("SYSTEM" "a")("RELEASE" "b")))
|
︙ | | |