Index: tcp-transportmod.scm ================================================================== --- tcp-transportmod.scm +++ tcp-transportmod.scm @@ -220,11 +220,11 @@ (load-b (tt:get-server-threads b))) (< load-a load-b)))))))) ;; (let ((indx (max (random (- (length sdats) 1)) 0))) ;; (list-ref sdats indx))))) - (debug:print-info 1 *default-log-port* "found sdat " sdat" from sdats: "sdats) + ;; (debug:print-info 1 *default-log-port* "found sdat " sdat" from sdats: "sdats) (match sdat ((host port start-time server-id pid dbfname2 servinffile) (assert (equal? dbfname dbfname2) "FATAL: read server info from wrong file.") (debug:print-info 2 *default-log-port* "no conn - in match servinffile:" servinffile) (let* ((host-port (conc host":"port)) @@ -295,14 +295,14 @@ (hash-table-set! *server-load* (conc host":"port) (cons meta (current-seconds)))) (define (tt:get-server-threads dat) (let* ((host (car dat)) (port (cadr dat)) - (dat (tt:get-server-meta host port #t)) - (meta (if dat (car dat) #f))) - (if (list? meta) - (or (alist-ref 'sload meta) 99998) + (dat (tt:get-server-meta host port #t))) + ;; (debug:print 0 *default-log-port* "host: "host" port: "port" dat: "dat) + (if (list? dat) + (or (alist-ref 'sload dat) 99998) 99999))) ;; absurd number means don't use this one ;; lazy get, does not auto-refresh meta, this might be a problem ;; (define (tt:get-server-meta host port #!optional (do-ping #f)) @@ -323,16 +323,18 @@ (get-lowest-thread-load (lambda () (let* ((sdats (tt:get-server-info-sorted ttdat dbfname))) (car (map tt:get-server-threads sdats)))))) (if ttdat - (let loop () - (if (> (get-lowest-thread-load) 5) ;; load is pretty high - (begin - (debug:print 0 *default-log-port* "Servers appear overloaded, waiting...") - (thread-sleep! 1) - (loop)))) + (let loop ((count 0)) + (let* ((lowestload (get-lowest-thread-load))) + (if (> lowestload 5) ;; load is pretty high + (begin + (debug:print 0 *default-log-port* "Servers appear overloaded with "lowestload" threads, waiting...") + (thread-sleep! 1) + (if (< count 10) + (loop (+ count 1))))))) (debug:print 0 *default-log-port* "Can't wait on server load, *ttdat* not set"))))) (define (tt:ping host port server-id #!optional (tries-left 5)) (let* ((res (tt:send-receive-direct host port `(ping #f #f #f) ping-mode: #t)) ;; please send me your server-id (try-again (lambda ()