Megatest

Check-in [39f9bda2f2]
Login
Overview
Comment:Added mutex to prevent overlapping runs of launch:setup
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | v1.62-no-rpc
Files: files | file ages | folders
SHA1: 39f9bda2f2087938a41325749a8f63ad6d40587e
User & Date: matt on 2016-11-27 07:35:25
Other Links: branch diff | manifest | tags
Context
2016-11-27
08:25
Added mutex for homehost calculation check-in: 8d4f021975 user: matt tags: v1.62-no-rpc
07:35
Added mutex to prevent overlapping runs of launch:setup check-in: 39f9bda2f2 user: matt tags: v1.62-no-rpc
2016-11-26
22:21
Keep server alive for sync to megatest.db now working check-in: f0223f5b3a user: matt tags: v1.62-no-rpc
Changes

Modified common.scm from [4ce144b0a8] to [ee5bda4eeb].

127
128
129
130
131
132
133
134


135
136
137
138
139
140
141
127
128
129
130
131
132
133

134
135
136
137
138
139
140
141
142







-
+
+







(define *keyvals*           (make-hash-table))
(define *toptest-paths*     (make-hash-table)) ;; cache toptest path settings here
(define *test-paths*        (make-hash-table)) ;; cache test-id to test run paths here
(define *test-ids*          (make-hash-table)) ;; cache run-id, testname, and item-path => test-id
(define *test-info*         (make-hash-table)) ;; cache the test info records, update the state, status, run_duration etc. from testdat.db

(define *run-info-cache*    (make-hash-table)) ;; run info is stable, no need to reget

(define *launch-setup-mutex* (make-mutex))     ;; need to be able to call launch:setup often so mutex it and re-call the real deal only if *toppath* not set
(define *homehost-mutex*     (make-mutex))
;; Awful. Please FIXME
(define *env-vars-by-run-id* (make-hash-table))

;; Testconfig and runconfig caches. 
(define *testconfigs*       (make-hash-table)) ;; test-name => testconfig
(define *runconfigs*        (make-hash-table)) ;; target    => runconfig

807
808
809
810
811
812
813


814
815



816


817
818
819
820
821
822

823
824
825
826
827
828
829
808
809
810
811
812
813
814
815
816
817

818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837







+
+

-
+
+
+

+
+






+







	    #f))))

;; logic for getting homehost. Returns (host . at-home)
;; IF *toppath* is not set, wait up to five seconds trying every two seconds
;; (this is to accomodate the watchdog)
;;
(define (common:get-homehost #!key (trynum 5))
  ;; called often especially at start up. use the launch setup mutex to eliminate collisions
  (mutex-lock! *homehost-mutex*)
  (cond
   (*home-host*     *home-host*)
   (*home-host*
    (mutex-unlock! *homehost-mutex*)
    *home-host*)
   ((not *toppath*)
    (mutex-unlock! *homehost-mutex*)
    (launch:setup) ;; safely mutexed now
    (if (> trynum 0)
	(begin
	  (thread-sleep! 2)
	  (common:get-homehost trynum: (- trynum 1)))
	#f))
   (else
    (mutex-unlock! *homehost-mutex*)
    (let* ((currhost (get-host-name))
	   (bestadrs (server:get-best-guess-address currhost))
	   ;; first look in config, then look in file .homehost, create it if not found
	   (homehost (or (configf:lookup *configdat* "server" "homehost" )
			 (let ((hhf (conc *toppath* "/.homehost")))
			   (if (file-exists? hhf)
			       (with-input-from-file hhf read-line)

Modified launch.scm from [8b28cbf454] to [df256f9067].

700
701
702
703
704
705
706










707
708
709
710
711
712
713
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723







+
+
+
+
+
+
+
+
+
+







;;     *toppath*
;;   side effects:
;;     sets; *configdat*    (megatest.config info)
;;           *runconfigdat* (runconfigs.config info)
;;           *configstatus* (status of the read data)
;;
(define (launch:setup #!key (force #f))
  (mutex-lock! *launch-setup-mutex*)
  (if *toppath*
      (begin
	(mutex-unlock! *launch-setup-mutex*)
	*toppath*)
      (let ((res (launch:setup-body force: force)))
	(mutex-unlock! *launch-setup-mutex*)
	res)))

(define (launch:setup-body #!key (force #f))
  (let* ((toppath  (or *toppath* (getenv "MT_RUN_AREA_HOME"))) ;; preserve toppath
	 (runname  (common:args-get-runname))
	 (target   (common:args-get-target))
	 (linktree (common:get-linktree))
	 (sections (if target (list "default" target) #f)) ;; for runconfigs
	 (mtconfig (or (args:get-arg "-config") "megatest.config")) ;; allow overriding megatest.config 
	 (rundir   (if (and runname target linktree)(conc linktree "/" target "/" runname) #f))