Index: Makefile ================================================================== --- Makefile +++ Makefile @@ -159,11 +159,11 @@ vg.o dashboard.o : vg_records.scm dcommon.o : run_records.scm # module deps http-transport.o : mofiles/portlogger.o -megatest.o : mofiles/nmsg-transport.o +megatest.o rnt.o : mofiles/nmsg-transport.o # Temporary while transitioning to new routine # runs.o : run-tests-queue-classic.scm run-tests-queue-new.scm megatest-fossil-hash.scm : $(SRCFILES) megatest.scm *_records.scm Index: rmt.scm ================================================================== --- rmt.scm +++ rmt.scm @@ -23,18 +23,72 @@ (declare (unit rmt)) (declare (uses api)) (declare (uses http-transport)) (include "common_records.scm") +(declare (uses portlogger)) +(import portlogger) +(declare (uses nmsg-transport)) +(import (prefix nmsg-transport nmsg:)) + +(use (prefix pkts pkts:) srfi-18) ;; ;; THESE ARE ALL CALLED ON THE CLIENT SIDE!!! ;; ;; generate entries for ~/.megatestrc with the following ;; ;; grep define ../rmt.scm | grep rmt: |perl -pi -e 's/\(define\s+\((\S+)\W.*$/\1/'|sort -u +;;====================================================================== +;; N A N O M S G S E R V E R +;;====================================================================== + +(defstruct nmsg + (conn #f) + (hosts (make-hash-table)) + pkt + (pktspec '((server (hostname . h) + (port . p) + (pid . i) + ))) + (mutex (make-mutex)) + ) + +;; make it a global +(define *nmsg-conndat* (make-nmsg)) + +;; get a port +;; start the nmsg server +;; look for other servers +;; contact other servers and compile list of servers +;; there are two types of server +;; main servers - dashboards, runners and dedicated servers - need pkt +;; passive servers - test executers, step calls, list-runs - no pkt +;; +(define (rmt:start-nmsg #!key (force-server-type #f)) + (mutex-lock! (nmsg-mutex *nmsg-conndat*)) + (let* ((server-type (or force-server-type + (if (args:any? "-run" "-server") + 'main + 'passive))) + (port-num (portlogger:open-run-close portlogger:find-port)) + (nmsg-conn (nmsg:start-server port-num)) + (pktspec (nmsg-pktspec *nmsg-conndat*)) + (pktdir (conc (get-environment-variable "MT_RUN_AREA_HOME") + "/.server-pkts"))) + ;; server is started, now create pkt if needed + (if (eq? server-type 'main) + (nmsg-pkt-set! *nmsg-conndat* + (pkts:write-alist-pkt + pktdir + `((hostname . ,(get-host-name)) + (port . ,port-num) + (pid . ,(current-process-id))) + pktspec))) + (nmsg-conn-set! *nmsg-conndat* nmsg-conn) + )) ;;====================================================================== ;; S U P P O R T F U N C T I O N S ;;====================================================================== ;; if a server is either running or in the process of starting call client:setup