Overview
Comment: | basics for main.db working |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v1.6584-ck5 |
Files: | files | file ages | folders |
SHA1: |
a80b708d01fbf6a83ba10df045829a77 |
User & Date: | matt on 2021-04-29 22:37:59 |
Other Links: | branch diff | manifest | tags |
Context
2021-05-01
| ||
12:10 | beginnings of basic client check-in: 4ab7adb0ad user: matt tags: v1.6584-ck5 | |
2021-04-29
| ||
22:37 | basics for main.db working check-in: a80b708d01 user: matt tags: v1.6584-ck5 | |
21:58 | wip check-in: f3260cf6bc user: matt tags: v1.6584-ck5 | |
Changes
Modified dbmod.scm from [21e8eceb8c] to [8fd2471d40].
︙ | ︙ | |||
240 241 242 243 244 245 246 | ;; setting/getting a lock on the db for only one server per db ;; ;; NOTE: ;; These operate directly on the disk file, NOT on the inmemory db ;; The lockname is the filename (can have many to one, run-id to fname ;;====================================================================== | > > > > > > > | | | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 | ;; setting/getting a lock on the db for only one server per db ;; ;; NOTE: ;; These operate directly on the disk file, NOT on the inmemory db ;; The lockname is the filename (can have many to one, run-id to fname ;;====================================================================== ;; only use for main.db - need to re-write some of this :( ;; (define (db:get-main-lock dbfile) (db:with-lock-db dbfile (lambda (dbh dbfile) (db:get-iam-server-lock dbh dbfile)))) (define (db:with-lock-db dbfile proc) (let* ((dbh (db:open-run-db dbfile db:initialize-db)) (res (proc dbh dbfile))) (sqlite3:finalize! dbh) res)) ;; called before db is open? ;; (define (db:get-iam-server-lock dbh dbfname) (sqlite3:with-transaction dbh (lambda () (let* ((locker (db:get-locker dbh dbfname))) (if locker #f (db:take-lock dbh dbfname)))))) ;; (exn sqlite3) (define (db:get-locker dbh dbfname) (condition-case (sqlite3:first-row dbh "SELECT owner_pid,owner_host,event_time FROM locks WHERE lockname=?;" dbfname) (exn (sqlite3) #f))) ;; should never fail because it is run in a transaction with a test for the lock ;; (define (db:take-lock dbh dbfname) ;; (condition-case ;; (begin |
︙ | ︙ |
Modified http-transportmod.scm from [ce6e1560b9] to [c6036c9806].
︙ | ︙ | |||
448 449 450 451 452 453 454 | (server-dat (vector iface port api-uri api-url api-req (current-seconds) server-id))) server-dat)) ;;====================================================================== ;; NEW SERVER METHOD ;;====================================================================== | < < < < < < < < | 448 449 450 451 452 453 454 455 456 457 458 459 460 461 | (server-dat (vector iface port api-uri api-url api-req (current-seconds) server-id))) server-dat)) ;;====================================================================== ;; NEW SERVER METHOD ;;====================================================================== (define *srvpktspec* `((server (host . h) (port . p) (servkey . k) (pid . i) (ipaddr . a) (dbpath . d)))) |
︙ | ︙ | |||
630 631 632 633 634 635 636 | (let* ((all-pkts (get-all-server-pkts pkts-dir *srvpktspec*)) (viables (get-viable-servers all-pkts db-file)) (best-srv (get-best-candidate viables db-file)) (best-srv-key (if best-srv (alist-ref 'servkey best-srv) #f))) (debug:print 0 *default-log-port* "best-srv-key: "best-srv-key", server-key: "server-key) ;; am I the best-srv, compare server-keys to know (if (equal? best-srv-key server-key) | | | 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 | (let* ((all-pkts (get-all-server-pkts pkts-dir *srvpktspec*)) (viables (get-viable-servers all-pkts db-file)) (best-srv (get-best-candidate viables db-file)) (best-srv-key (if best-srv (alist-ref 'servkey best-srv) #f))) (debug:print 0 *default-log-port* "best-srv-key: "best-srv-key", server-key: "server-key) ;; am I the best-srv, compare server-keys to know (if (equal? best-srv-key server-key) (if (db:get-main-lock db-file) (begin (debug:print 0 *default-log-port* "I'm the server!") (servdat-dbfile-set! sdat db-file)) (begin (debug:print 0 *default-log-port* "I'm not the server, exiting.") (bdat-time-to-exit-set! *bdat* #t) (thread-sleep! 0.2) |
︙ | ︙ |
Modified rmtmod.scm from [b48d720a5c] to [681d0db458].
︙ | ︙ | |||
1777 1778 1779 1780 1781 1782 1783 | (dbfile (servdat-dbfile *server-info*))) (debug:print-info 0 *default-log-port* "removing pkt "pkt-file) (delete-file* pkt-file) (if (and dbfile (string-match ".*/main.db$" dbfile)) (begin (debug:print-info 0 *default-log-port* "Releasing lock for "dbfile) | | | | | 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 | (dbfile (servdat-dbfile *server-info*))) (debug:print-info 0 *default-log-port* "removing pkt "pkt-file) (delete-file* pkt-file) (if (and dbfile (string-match ".*/main.db$" dbfile)) (begin (debug:print-info 0 *default-log-port* "Releasing lock for "dbfile) (db:with-lock-db (servdat-dbfile *server-info*) (lambda (dbh dbfile) (db:release-lock dbh))))))) (if (bdat-task-db *bdat*) ;; TODO: Check that this is correct for task db (let ((db (cdr (bdat-task-db *bdat*)))) (if (sqlite3:database? db) (begin (sqlite3:interrupt! db) (sqlite3:finalize! db #t) (bdat-task-db-set! *bdat* #f))))) |
︙ | ︙ |