Megatest

Diff
Login

Differences From Artifact [edd9ff6647]:

To Artifact [a0cd34a8aa]:


155
156
157
158
159
160
161
162
163
164
165
166
167
168







169
170
171
172
173
174
175
155
156
157
158
159
160
161







162
163
164
165
166
167
168
169
170
171
172
173
174
175







-
-
-
-
-
-
-
+
+
+
+
+
+
+







	 *task-db*))))

;;======================================================================
;; Server and client management
;;======================================================================

;; make-vector-record tasks hostinfo id interface port pubport transport pid hostname
(define (tasks:hostinfo-get-id          vec)    (vector-ref  vec 0))
(define (tasks:hostinfo-get-interface   vec)    (vector-ref  vec 1))
(define (tasks:hostinfo-get-port        vec)    (vector-ref  vec 2))
(define (tasks:hostinfo-get-pubport     vec)    (vector-ref  vec 3))
(define (tasks:hostinfo-get-transport   vec)    (vector-ref  vec 4))
(define (tasks:hostinfo-get-pid         vec)    (vector-ref  vec 5))
(define (tasks:hostinfo-get-hostname    vec)    (vector-ref  vec 6))
(define (tasks:hostinfo-get-id          vec)    (safe-vector-ref  vec 0))
(define (tasks:hostinfo-get-interface   vec)    (safe-vector-ref  vec 1))
(define (tasks:hostinfo-get-port        vec)    (safe-vector-ref  vec 2))
(define (tasks:hostinfo-get-pubport     vec)    (safe-vector-ref  vec 3))
(define (tasks:hostinfo-get-transport   vec)    (safe-vector-ref  vec 4))
(define (tasks:hostinfo-get-pid         vec)    (safe-vector-ref  vec 5))
(define (tasks:hostinfo-get-hostname    vec)    (safe-vector-ref  vec 6))

(define (tasks:server-lock-slot mdb run-id)
  (tasks:server-clean-out-old-records-for-run-id mdb run-id " tasks:server-lock-slot")
  (if (< (tasks:num-in-available-state mdb run-id) 4)
      (begin 
	(tasks:server-set-available mdb run-id)
	(thread-sleep! (/ (random 1500) 1000)) ;; (thread-sleep! 2) ;; Try removing this. It may not be needed.
378
379
380
381
382
383
384
385

386
387

388
389
390
391
392
393
394
395

396
397
398
399
400
401
402
378
379
380
381
382
383
384

385
386

387
388
389
390
391
392
393
394

395
396
397
398
399
400
401
402







-
+

-
+







-
+







     (else
      #f))))

;; try to start a server and wait for it to be available
;;
(define (tasks:start-and-wait-for-server tdbdat run-id delay-max-tries)
  ;; ensure a server is running for this run
  (let loop ((server-dat (tasks:get-server (db:delay-if-busy tdbdat) run-id))
  (let loop ((server-running (tasks:server-running? (db:delay-if-busy tdbdat) run-id))
	     (delay-time 0))
      (if (and (not server-dat)
      (if (and (not server-running)
	       (< delay-time delay-max-tries))
	  (begin
	    (if (common:low-noise-print 60 "tasks:start-and-wait-for-server" run-id)
		(debug:print 0 "Try starting server for run-id " run-id))
	    (thread-sleep! (/ (random 2000) 1000))
	    (server:kind-run run-id)
	    (thread-sleep! (min delay-time 1))
	    (loop (tasks:get-server (db:delay-if-busy tdbdat) run-id)(+ delay-time 1))))))
	    (loop (tasks:server-running? (db:delay-if-busy tdbdat) run-id)(+ delay-time 1))))))

(define (tasks:get-all-servers mdb)
  (let ((res '()))
    (sqlite3:for-each-row
     (lambda (id pid hostname interface port pubport start-time priority state mt-version last-update transport run-id)
       ;;                       0  1     2         3      4     5          6        7     8          9          10        11     12
       (set! res (cons (vector id pid hostname interface port pubport start-time priority state mt-version last-update transport run-id) res)))
416
417
418
419
420
421
422
423
424
425



426
427
428
429
430
431
432
416
417
418
419
420
421
422



423
424
425
426
427
428
429
430
431
432







-
-
-
+
+
+







 
;; look up a server by run-id and send it a kill, also delete the record for that server
;;
(define (tasks:kill-server-run-id run-id #!key (tag "default"))
  (let* ((tdbdat  (tasks:open-db))
	 (sdat    (tasks:get-server (db:delay-if-busy tdbdat) run-id)))
    (if sdat
	(let ((hostname (vector-ref sdat 6))
	      (pid      (vector-ref sdat 5))
	      (server-id (vector-ref sdat 0)))
	(let ((hostname (safe-vector-ref sdat 6))
	      (pid      (safe-vector-ref sdat 5))
	      (server-id (safe-vector-ref sdat 0)))
	  (tasks:server-set-state! (db:delay-if-busy tdbdat) server-id "killed")
	  (debug:print-info 0 "Killing server " server-id " for run-id " run-id " on host " hostname " with pid " pid)
	  (tasks:kill-server hostname pid)
	  (tasks:server-delete-record (db:delay-if-busy tdbdat) server-id tag) )
	(debug:print-info 0 "No server found for run-id " run-id ", nothing to kill"))
    ;; (sqlite3:finalize! tdb)
    ))
544
545
546
547
548
549
550
551

552
553
554

555
556
557
558
559
560
561
544
545
546
547
548
549
550

551
552
553

554
555
556
557
558
559
560
561







-
+


-
+







		      owner
		      target
		      runname
		      testpatt
		      (if params params "")))))

(define (keys:key-vals-hash->target keys key-params)
  (let ((tmp (hash-table-ref/default key-params (vector-ref (car keys) 0) "")))
  (let ((tmp (hash-table-ref/default key-params (safe-vector-ref (car keys) 0) "")))
    (if (> (length keys) 1)
	(for-each (lambda (key)
		    (set! tmp (conc tmp "/" (hash-table-ref/default key-params (vector-ref key 0) ""))))
		    (set! tmp (conc tmp "/" (hash-table-ref/default key-params (safe-vector-ref key 0) ""))))
		  (cdr keys)))
    tmp))
								
;; for use from the gui, not ported
;;
;; (define (tasks:add-from-params mdb action keys key-params var-params)
;;   (let ((target    (keys:key-vals-hash->target keys key-params))