Index: http-transport.scm ================================================================== --- http-transport.scm +++ http-transport.scm @@ -307,19 +307,23 @@ (define (http-transport:server-dat-get-iface vec) (vector-ref vec 0)) (define (http-transport:server-dat-get-port vec) (vector-ref vec 1)) (define (http-transport:server-dat-get-api-uri vec) (vector-ref vec 2)) (define (http-transport:server-dat-get-api-url vec) (vector-ref vec 3)) (define (http-transport:server-dat-get-api-req vec) (vector-ref vec 4)) +(define (http-transport:server-dat-get-last-access vec) (vector-ref vec 5)) (define (http-transport:server-dat-make-url vec) (if (and (http-transport:server-dat-get-iface vec) (http-transport:server-dat-get-port vec)) (conc "http://" (http-transport:server-dat-get-iface vec) ":" (http-transport:server-dat-get-port vec)) #f)) + +(define (http-transport:server-dat-update-last-access vec) + (vector-set! vec 5 (current-seconds))) ;; ;; connect ;; (define (http-transport:client-connect iface port) Index: rmt.scm ================================================================== --- rmt.scm +++ rmt.scm @@ -57,10 +57,20 @@ ;; cmd is a symbol ;; vars is a json string encoding the parameters for the call ;; (define (rmt:send-receive cmd rid params) + ;; clean out old connections + (let ((expire-time (- (current-seconds) 60))) + (for-each + (lambda (run-id) + (let ((connection (hash-table-ref *runremote* run-id))) + (if (> (http-transport:server-dat-get-last-access connection) expire-time) + (begin + (debug:print-info 0 "Discarding connection to server for run-id " run-id ", too long between accesses") + (hash-table-delete! *runremote* run-id))))) + (hash-table-keys *runremote*))) (let* ((run-id (if rid rid 0)) (connection-info (let ((cinfo (hash-table-ref/default *runremote* run-id #f))) (if cinfo cinfo ;; NB// can cache the answer for server running for 10 seconds ... @@ -72,10 +82,11 @@ #f)) #f)))) (jparams (db:obj->string params))) (if connection-info (let ((res (http-transport:client-api-send-receive run-id connection-info cmd jparams))) + (http-transport:server-dat-update-last-access connection-info) (if res (db:string->obj res) (let ((new-connection-info (client:setup run-id))) (debug:print 0 "WARNING: Communication failed, trying call to http-transport:client-api-send-receive again.") (rmt:send-receive cmd run-id params))))