Index: server.scm ================================================================== --- server.scm +++ server.scm @@ -131,7 +131,13 @@ ;; note: client:start will set *runremote*. this needs to be changed ;; also, client:start will login to the server, also need to change that. ;; ;; client:start returns #t if login was successful. ;; - (client:start run-id server) + (let ((res (client:start run-id server))) + ;; if the server didn't respond we must remove the record + (if res + res + (begin + (open-run-close tasks:server-force-clean-running-records-for-run-id tasks:open-db run-id) + res))) #f))) Index: tasks.scm ================================================================== --- tasks.scm +++ tasks.scm @@ -125,17 +125,20 @@ (lambda (num-in-queue) (set! res num-in-queue)) mdb "SELECT count(id) FROM servers WHERE run_id=?;" run-id) - res)) + (< res 3))) (define (tasks:server-clean-out-old-records-for-run-id mdb run-id) (sqlite3:execute mdb "DELETE FROM servers WHERE state in ('available','shutting-down') AND (strftime('%s','now') - start_time) > 30 AND run_id=?;" run-id) (if (server:check-if-running run-id) (sqlite3:execute mdb "DELETE FROM servers WHERE run_id=?;" run-id))) +(define (tasks:server-force-clean-running-records-for-run-id mdb run-id) + (sqlite3:execute mdb "DELETE FROM servers WHERE state = 'running' AND run_id=?;" run-id)) + (define (tasks:server-set-state! mdb server-id state) (sqlite3:execute mdb "UPDATE servers SET state=? WHERE id=?;" state server-id)) (define (tasks:server-delete-record! mdb server-id) (sqlite3:execute mdb "DELETE FROM servers WHERE id=?;" server-id)) @@ -209,14 +212,14 @@ (sqlite3:for-each-row (lambda (id interface port pubport transport pid hostname) (set! res (vector id interface port pubport transport pid hostname))) mdb ;; removed: - ;; strftime('%s','now')-heartbeat < 10 AND + ;; strftime('%s','now')-heartbeat < 10 AND mt_version = ? "SELECT id,interface,port,pubport,transport,pid,hostname FROM servers - WHERE mt_version=? AND run_id=? AND state='running' - ORDER BY start_time DESC LIMIT 1;" (common:version-signature) run-id) + WHERE run_id=? AND state='running' + ORDER BY start_time DESC LIMIT 1;" run-id) ;; (common:version-signature) run-id) res)) (define (tasks:get-all-servers mdb) (let ((res '())) (sqlite3:for-each-row