Index: launch.scm ================================================================== --- launch.scm +++ launch.scm @@ -413,13 +413,15 @@ (work-area (assoc/default 'work-area cmdinfo)) ;; work-area is the test run area (test-name (assoc/default 'test-name cmdinfo)) (runscript (assoc/default 'runscript cmdinfo)) (ezsteps (assoc/default 'ezsteps cmdinfo)) ;; (runremote (assoc/default 'runremote cmdinfo)) - (transport (assoc/default 'transport cmdinfo)) + ;; (transport (assoc/default 'transport cmdinfo)) ;; not used ;; (serverinf (assoc/default 'serverinf cmdinfo)) - (port (assoc/default 'port cmdinfo)) + ;; (port (assoc/default 'port cmdinfo)) + (serverurl (assoc/default 'serverurl cmdinfo)) + (homehost (assoc/default 'homehost cmdinfo)) (run-id (assoc/default 'run-id cmdinfo)) (test-id (assoc/default 'test-id cmdinfo)) (target (assoc/default 'target cmdinfo)) (itemdat (assoc/default 'itemdat cmdinfo)) (env-ovrd (assoc/default 'env-ovrd cmdinfo)) @@ -440,10 +442,33 @@ (file-execute-access? fulln)) fulln runscript))))) ;; assume it is on the path ) ;; (rollup-status 0) + ;; On NFS it can be slow and unreliable to get needed startup information. + ;; i. Check if we are on the homehost, if so, proceed + ;; ii. Check if host and port passed in via CMDINFO are valid and if + ;; possible use them. + (let ((bestadrs (server:get-best-guess-address (get-host-name)))) + (if (equal? homehost bestadrs) ;; we are likely on the homehost + (debug:print-info 0 *default-log-port* "test " test-name " appears to be running on the homehost " homehost) + (let ((host-port (if serverurl (string-split serverurl ":") #f))) + (if (not *runremote*)(set! *runremote* (make-remote))) ;; init *runremote* + (if (string? homehost) + (if (and host-port + (> (length host-port) 1)) + (match-let* (((host port) host-port) + ((start-res) (http-transport:client-connect host port)) + (ping-res (rmt:login-no-auto-client-setup start-res))) + (if (and start-res + ping-res) + (let ((url (http-transport:server-dat-make-url start-res))) + (remote-conndat-set! *runremote* start-res) + (remote-url-set! *runremote* url) + (debug:print-info 0 *default-log-port* "connected to " url " using CMDINFO data.")) + (debug:print-info 0 *default-log-port* "received " host ":" port " for url but could not connect.") + ))))))) ;; NFS might not have propagated the directory meta data to the run host - give it time if needed (let loop ((count 0)) (if (or (file-exists? top-path) (> count 10)) (change-directory top-path) @@ -1172,12 +1197,19 @@ (set! cmdparms (base64:base64-encode (z3:encode-buffer (with-output-to-string (lambda () ;; (list 'hosts hosts) (write (list (list 'testpath test-path) - (list 'transport (conc *transport-type*)) + ;; (list 'transport (conc *transport-type*)) ;; (list 'serverinf *server-info*) + (list 'homehost (let* ((hhdat (common:get-homehost))) + (if hhdat + (car hhdat) + #f))) + (list 'serverurl (if *runremote* + (remote-server-url *runremote*) + #f)) ;; (list 'toppath *toppath*) (list 'work-area work-area) (list 'test-name test-name) (list 'runscript runscript) (list 'run-id run-id ) Index: rmt.scm ================================================================== --- rmt.scm +++ rmt.scm @@ -32,18 +32,20 @@ ;; if a server is either running or in the process of starting call client:setup ;; else return #f to let the calling proc know that there is no server available ;; (define (rmt:get-connection-info areapath #!key (area-dat #f)) ;; TODO: push areapath down. - (let* ((runremote (or area-dat *runremote*)) - (cinfo (remote-conndat runremote)) - (run-id 0)) - (if cinfo - cinfo - (if (server:check-if-running areapath) - (client:setup areapath) - #f)))) + (let* ((runremote (or area-dat *runremote*))) + (if runremote + (let* ((cinfo (remote-conndat runremote)) + (run-id 0)) + (if cinfo + cinfo + (if (server:check-if-running areapath) + (client:setup areapath) + #f))) + #f))) (define *send-receive-mutex* (make-mutex)) ;; should have separate mutex per run-id ;; RA => e.g. usage (rmt:send-receive 'get-var #f (list varname)) ;;