Overview
Comment: | Added mutex for homehost calculation |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v1.62-no-rpc |
Files: | files | file ages | folders |
SHA1: |
8d4f0219755110fe5db5c834243cbb25 |
User & Date: | matt on 2016-11-27 08:25:31 |
Other Links: | branch diff | manifest | tags |
Context
2016-11-27
| ||
11:58 | Run launch:setup in launch:execute - needed now due to refactoring. check-in: b19499a3eb user: matt tags: v1.62-no-rpc | |
08:25 | Added mutex for homehost calculation check-in: 8d4f021975 user: matt tags: v1.62-no-rpc | |
07:35 | Added mutex to prevent overlapping runs of launch:setup check-in: 39f9bda2f2 user: matt tags: v1.62-no-rpc | |
Changes
Modified common.scm from [ee5bda4eeb] to [a2d76e3385].
︙ | ︙ | |||
808 809 810 811 812 813 814 | #f)))) ;; logic for getting homehost. Returns (host . at-home) ;; IF *toppath* is not set, wait up to five seconds trying every two seconds ;; (this is to accomodate the watchdog) ;; (define (common:get-homehost #!key (trynum 5)) | | < > | 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 | #f)))) ;; logic for getting homehost. Returns (host . at-home) ;; IF *toppath* is not set, wait up to five seconds trying every two seconds ;; (this is to accomodate the watchdog) ;; (define (common:get-homehost #!key (trynum 5)) ;; called often especially at start up. use mutex to eliminate collisions (mutex-lock! *homehost-mutex*) (cond (*home-host* (mutex-unlock! *homehost-mutex*) *home-host*) ((not *toppath*) (mutex-unlock! *homehost-mutex*) (launch:setup) ;; safely mutexed now (if (> trynum 0) (begin (thread-sleep! 2) (common:get-homehost trynum: (- trynum 1))) #f)) (else (let* ((currhost (get-host-name)) (bestadrs (server:get-best-guess-address currhost)) ;; first look in config, then look in file .homehost, create it if not found (homehost (or (configf:lookup *configdat* "server" "homehost" ) (let ((hhf (conc *toppath* "/.homehost"))) (if (file-exists? hhf) (with-input-from-file hhf read-line) (if (file-write-access? *toppath*) (begin (with-output-to-file hhf (lambda () (print bestadrs))) (common:get-homehost)) #f))))) (at-home (or (equal? homehost currhost) (equal? homehost bestadrs)))) (set! *home-host* (cons homehost at-home)) (mutex-unlock! *homehost-mutex*) *home-host*)))) ;; am I on the homehost? ;; (define (common:on-homehost?) (let ((hh (common:get-homehost))) (if hh |
︙ | ︙ |
Modified rmt.scm from [47bcf5283a] to [80d13e1dc6].
︙ | ︙ | |||
56 57 58 59 60 61 62 | (define (rmt:send-receive cmd rid params #!key (attemptnum 1)) ;; start attemptnum at 1 so the modulo below works as expected ;; clean out old connections ;; (mutex-lock! *db-multi-sync-mutex*) ;; 1. check if server is started IFF cmd is a write OR if we are not on the homehost, store in *runremote* ;; 2. check the age of the connections. refresh the connection if it is older than timeout-20 seconds. ;; 3. do the query, if on homehost use local access | | | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | (define (rmt:send-receive cmd rid params #!key (attemptnum 1)) ;; start attemptnum at 1 so the modulo below works as expected ;; clean out old connections ;; (mutex-lock! *db-multi-sync-mutex*) ;; 1. check if server is started IFF cmd is a write OR if we are not on the homehost, store in *runremote* ;; 2. check the age of the connections. refresh the connection if it is older than timeout-20 seconds. ;; 3. do the query, if on homehost use local access ;; (if (and #f ;; FORCE NO GO FOR RIGHT NOW (not *runremote*) ;; we trust *runremote* to reflect that a server was found previously (not (member cmd api:read-only-queries))) ;; we don't trust so much the list of write queries (let ((serverconn (server:check-if-running *toppath*))) (if serverconn (set! *runremote* serverconn) ;; the string can be consumed by the client setup if needed (server:kind-run *toppath*)))) |
︙ | ︙ |