Index: loadwatch/queuefeeder-server.scm ================================================================== --- loadwatch/queuefeeder-server.scm +++ loadwatch/queuefeeder-server.scm @@ -65,15 +65,21 @@ (cond ((and (> res 0)(< res 0.01)) 0.01) ((> res 45) 45) ;; cap at 45 seconds (else res)))))) +;; x input value (current number in the queue) +;; targ is the desired queue length +;; (define (piecewise-droop-calc x targ) (let ((top 50)) (cond - ((> (- x targ) 0) top) ;; top off at 45 seconds - ((> x (- targ top))(+ (* 1 (- x (- targ top)))(/ (- top targ) targ))) + ((> (- x targ) 0) + top) ;; top off at top seconds + ((> x (- targ top)) + (+ (* 1 (- x (- targ top))) + (/ (- top targ) targ))) (else (let ((res (/ x targ))) (if (< res 0.01) 0.01 res)))))) @@ -154,11 +160,11 @@ ;; update the *current-delay* value every minute or QUEUE_CHK_DELAY seconds (thread-start! (make-thread (lambda () (let ((delay-time (string->number (or (get-environment-variable "QUEUE_CHK_DELAY") "30")))) (let loop () (with-input-from-pipe - cmd + cmd ;;; my query to get queue length (lambda () (let* ((val (read)) (droop-val (if (number? val)(piecewise-droop-calc val queuelen) #f))) ;; val is number of jobs in queue. Use a linear droop of val/40 (mutex-lock! *current-delay-mutex*) Index: loadwatch/queuefeeder.scm ================================================================== --- loadwatch/queuefeeder.scm +++ loadwatch/queuefeeder.scm @@ -78,18 +78,19 @@ (let ((signature (make-signature))) (thread-start! (lambda () (thread-sleep! 60) (print "Give up on waiting for the server") - (nn-close req) + ;; (nn-close req) ;; (exit) )) (thread-join! (thread-start! (lambda () (let-values (((delay-time msg)(get-delay signature))) (print "INFO: sleeping " delay-time " seconds per request of queuefeeder server") (thread-sleep! delay-time) - (print "INFO: done waiting, now executing requested task.")))))) + (print "INFO: done waiting, now executing requested task."))))) + (nn-close req)) (process-execute (car cmd) (cdr cmd))