Index: http-transportmod.scm ================================================================== --- http-transportmod.scm +++ http-transportmod.scm @@ -169,13 +169,15 @@ ((equal? (uri-path (request-uri (current-request))) '(/ "api")) (send-response ;; the $ is the request vars proc body: ((api-proc) *dbstruct-db* $) headers: '((content-type text/plain))) - (mutex-lock! *heartbeat-mutex*) - (set! *db-last-access* (current-seconds)) - (mutex-unlock! *heartbeat-mutex*)) + (set! *db-last-access* (current-seconds))) + ((equal? (uri-path (request-uri (current-request))) + '(/ "ping")) + (send-response body: (conc *toppath*"/"(args:get-arg "-db")) + headers: '((content-type text/plain)))) ((equal? (uri-path (request-uri (current-request))) '(/ "")) (send-response body: ((http-get-function 'http-transport:main-page)))) ((equal? (uri-path (request-uri (current-request))) '(/ "json_api")) @@ -466,16 +468,25 @@ (define (server-address srv-pkt) (conc (alist-ref 'host srv-pkt) ":" (alist-ref 'port srv-pkt))) -(define (server-ready? host port) ;; server-address is host:port +(define (server-ready? host port key) ;; server-address is host:port ;; ping the server and ask it ;; if it ready - (let* ((sdat (servdat-init #f host port #f))) - (http-transport:send-receive sdat "abc" 'ping '()))) - + ;; (let* ((sdat (servdat-init #f host port #f))) + ;; (http-transport:send-receive sdat "abc" 'ping '()))) + (let* ((res (with-input-from-request + (conc "http://"host":"port"/ping") ;; returns *toppath*/dbname + #f + read-string))) + (if (equal? res key) + #t + (begin + (debug:print-info 0 *default-log-port* "server-ready? key="key", received="res) + #f)))) + ;; from the pkts return servers associated with dbpath ;; NOTE: Only one can be alive - have to check on each ;; in the list of pkts returned ;; (define (get-viable-servers serv-pkts dbpath) @@ -493,15 +504,16 @@ ;; (define (get-the-server serv-pkts) (let loop ((tail serv-pkts)) (if (null? tail) #f - (let* ((spkt (car tail)) - (host (alist-ref 'ipaddr spkt)) - (port (alist-ref 'port spkt)) - (addr (server-address spkt))) - (if (server-ready? host port) + (let* ((spkt (car tail)) + (host (alist-ref 'ipaddr spkt)) + (port (alist-ref 'port spkt)) + (dbpth (alist-ref 'dbpath spkt)) + (addr (server-address spkt))) + (if (server-ready? host port dbpth) spkt (loop (cdr tail))))))) ;; am I the "first" in line server? I.e. my D card is smallest ;; use Z card as tie breaker Index: rmtmod.scm ================================================================== --- rmtmod.scm +++ rmtmod.scm @@ -205,12 +205,12 @@ ))) (if the-srv ;; yes, we have a server, now try connecting to it (let* ((srv-addr (server-address the-srv)) (ipaddr (alist-ref 'ipaddr the-srv)) (port (alist-ref 'port the-srv)) - (srvready (server-ready? ipaddr port)) - (fullpath (db:dbname->path apath dbname))) + (fullpath (db:dbname->path apath dbname)) + (srvready (server-ready? ipaddr port fullpath))) (if srvready (begin (hash-table-set! (rmt:remote-conns remote) fullpath (make-rmt:conn Index: tests/Makefile ================================================================== --- tests/Makefile +++ tests/Makefile @@ -53,13 +53,14 @@ cd release;dashboard -rows 25 & ## basicserver.log : unittests/basicserver.scm ## script -c "./rununittest.sh basicserver $(DEBUG)" basicserver.log -%.log : build unittests/%.scm $(MTEST) +%.log : unittests/%.scm ../bin/.*/mtest script -c "./rununittest.sh $* $(DEBUG)" $*.log - if logpro unit.logpro $*.html < $*.log > /dev/null;then echo ALLPASS;else echo ALLFAIL;mv $*.log $*.log.FAIL;fi + +# if logpro unit.logpro $*.html < $*.log > /dev/null;then echo ALLPASS;else echo ALLFAIL;mv $*.log $*.log.FAIL;fi server : cd fullrun;$(MEGATEST) -server - -debug $(DEBUG) -run-id $(RUNID) stopserver : Index: tests/unittests/basicserver.scm ================================================================== --- tests/unittests/basicserver.scm +++ tests/unittests/basicserver.scm @@ -23,11 +23,11 @@ ;; ./rununittest.sh server 1;(cd simplerun;megatest -stop-server 0) (import rmtmod trace) (trace-call-sites #t) (trace - rmt:find-main-server + ;; rmt:find-main-server ) (test #f #t (rmt:remote? (let ((r (make-rmt:remote))) (set! *rmt:remote* r) r)))