Overview
Comment: | Wait five seconds after launching a test before throttling the runner loop. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v2.0001 |
Files: | files | file ages | folders |
SHA1: |
682af2eb81e60fa8e7a216b998c2a442 |
User & Date: | matt on 2022-01-26 18:20:23 |
Other Links: | branch diff | manifest | tags |
Context
2022-01-26
| ||
18:31 | For the runner loop apply small delay on too-rapid calls, then more delay when no tests are launching check-in: 8f71552216 user: matt tags: v2.0001 | |
18:20 | Wait five seconds after launching a test before throttling the runner loop. check-in: 682af2eb81 user: matt tags: v2.0001 | |
14:45 | Separation of concerns; server is in mtserver and server stuff (will be) removed from megatest check-in: 7889ffe9e5 user: mrwellan tags: v2.0001 | |
Changes
Modified dashboard.scm from [4505f63ba6] to [eeb859c6bf].
︙ | ︙ | |||
197 198 199 200 201 202 203 | (exit 1)))) '("MT_RUN_AREA_HOME" "MT_MEGATEST" "MT_CMDINFO" "MT_TEST_RUN_DIR" "MT_LINKTREE" "MT_TESTSUITENAME")) (print ". Done. All ok."))) (if (not (null? remargs)) (begin (print "Unrecognised arguments: " (string-intersperse remargs " ")) | | | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | (exit 1)))) '("MT_RUN_AREA_HOME" "MT_MEGATEST" "MT_CMDINFO" "MT_TEST_RUN_DIR" "MT_LINKTREE" "MT_TESTSUITENAME")) (print ". Done. All ok."))) (if (not (null? remargs)) (begin (print "Unrecognised arguments: " (string-intersperse remargs " ")) )) (if (args:get-arg "-h") (begin (print help) (exit))) (if (args:get-arg "-start-dir") |
︙ | ︙ | |||
3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 | (begin (if (dboard:tabdat-layout-update-ok tabdat) (runloop (car runtal)(cdr runtal) (+ run-num 1) newdoneruns) (escapeloop #t) ;; (dboard:tabdat-layout-update-ok tabdat) ))))))))) ;; new-run-start-row ))) (debug:print 2 *default-log-port* "no tabdat for run-times-tab-updater")))) ;; handy trick for printing a record ;; ;; (pp (dboard:tabdat->alist tabdat)) ;; ;; removing the tabdat-values proc ;; ;; (define (tabdat-values tabdat) ;; runs update-rundat using the various filters from the gui ;; (define (dashboard:do-update-rundat tabdat) | > > > > > > > > > > > > > > > > < < | | | | | | < < < < | < < < > | | | 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 | (begin (if (dboard:tabdat-layout-update-ok tabdat) (runloop (car runtal)(cdr runtal) (+ run-num 1) newdoneruns) (escapeloop #t) ;; (dboard:tabdat-layout-update-ok tabdat) ))))))))) ;; new-run-start-row ))) (debug:print 2 *default-log-port* "no tabdat for run-times-tab-updater")))) (define (dashboard:calc-key-patterns tabdat) ;; generate key patterns from the target stored in tabdat (let* ((dbkeys (dboard:tabdat-dbkeys tabdat))) (let ((fres (if (dboard:tabdat-target tabdat) (let ((ptparts (append (dboard:tabdat-target tabdat)(make-list (length dbkeys) "%")))) (map (lambda (k v)(list k v)) dbkeys ptparts)) (let ((res '())) (for-each (lambda (key) (if (not (equal? key "runname")) (let ((val (hash-table-ref/default (dboard:tabdat-searchpatts tabdat) key #f))) (if val (set! res (cons (list key val) res)))))) dbkeys) res)))) fres))) ;; handy trick for printing a record ;; ;; (pp (dboard:tabdat->alist tabdat)) ;; ;; removing the tabdat-values proc ;; ;; (define (tabdat-values tabdat) ;; runs update-rundat using the various filters from the gui ;; (define (dashboard:do-update-rundat tabdat) (let* ((runnamepatt (hash-table-ref/default (dboard:tabdat-searchpatts tabdat) "runname" "%")) (numruns (dboard:tabdat-numruns tabdat)) (testnamepatt (hash-table-ref/default (dboard:tabdat-searchpatts tabdat) "test-name" "%/%")) (keypatts (dashboard:calc-key-patterns tabdat))) (dboard:update-rundat tabdat runnamepatt numruns testnamepatt keypatts))) (define (dashboard:runs-tab-updater commondat tab-num) (debug:catch-and-dump (lambda () (let* ((tabdat (dboard:common-get-tabdat commondat tab-num: tab-num)) (dbkeys (dboard:tabdat-dbkeys tabdat))) (dashboard:do-update-rundat tabdat) |
︙ | ︙ |
Modified debugprint.scm from [e5877ebcfd] to [d12dfb8eae].
︙ | ︙ | |||
30 31 32 33 34 35 36 | (define (debug:setup) (let ((debugstr (or (args:get-arg "-debug") (args:get-arg "-debug-noprop") (get-environment-variable "MT_DEBUG_MODE")))) (verbosity (debug:calc-verbosity debugstr 'q)) (debug:check-verbosity (verbosity) debugstr) ;; if we were handed a bad verbosity rule then we will override it with 1 and continue | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | (define (debug:setup) (let ((debugstr (or (args:get-arg "-debug") (args:get-arg "-debug-noprop") (get-environment-variable "MT_DEBUG_MODE")))) (verbosity (debug:calc-verbosity debugstr 'q)) (debug:check-verbosity (verbosity) debugstr) ;; if we were handed a bad verbosity rule then we will override it with 1 and continue (if (not (verbosity))(verbosity 1)) (if (and (not (args:get-arg "-debug-noprop")) (or (args:get-arg "-debug") (not (get-environment-variable "MT_DEBUG_MODE")))) (set-environment-variable! "MT_DEBUG_MODE" (if (list? (verbosity)) (string-intersperse (map conc (verbosity)) ",") (conc (verbosity))))))) |
︙ | ︙ |
Modified runsmod.scm from [ad4f7727f0] to [4424067f1c].
︙ | ︙ | |||
243 244 245 246 247 248 249 250 251 252 253 254 | (if (> (- currtime lasttime) waitval) (begin (hash-table-set! *runs:denoise* key currtime) #t) #f))) (define *too-soon-delays* (make-hash-table)) ;; to-soon delay, when matching event happened in less than dseconds delay wseconds ;; (define (runs:too-soon-delay key dseconds wseconds) (let* ((last-time (hash-table-ref/default *too-soon-delays* key #f))) | > > | | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | (if (> (- currtime lasttime) waitval) (begin (hash-table-set! *runs:denoise* key currtime) #t) #f))) (define *too-soon-delays* (make-hash-table)) (define *last-test-launch* 0) ;; to-soon delay, when matching event happened in less than dseconds delay wseconds ;; (define (runs:too-soon-delay key dseconds wseconds) (let* ((last-time (hash-table-ref/default *too-soon-delays* key #f))) (if (and (> (- (current-seconds) *last-test-launch*) 5) ;; be aggressive for five seconds after starting a test last-time (< (- (current-seconds) last-time) dseconds)) (begin (debug:print-info 4 *default-log-port* "Whoa, slow down there ... "key" has been too recently seen.") (thread-sleep! wseconds))) (hash-table-set! *too-soon-delays* key (current-seconds)))) (define (runs:can-run-more-tests runsdat run-id jobgroup max-concurrent-jobs) |
︙ | ︙ | |||
1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 | (not (member 'exclusive testmode))))) ;; (hash-table-delete! *max-tries-hash* (db:test-make-full-name test-name item-path)) ;; we are going to reset all the counters for test retries by setting a new hash table ;; this means they will increment only when nothing can be run (set! *max-tries-hash* (make-hash-table)) (run:test run-id run-info keyvals runname test-record flags #f test-registry all-tests-registry runsdat testdat) (runs:incremental-print-results run-id) (hash-table-set! test-registry (db:test-make-full-name test-name item-path) 'running) (runs:shrink-can-run-more-tests-count runsdat) ;; DELAY TWEAKER (still needed?) ;; (thread-sleep! *global-delta*) (if (or (not (null? tal))(not (null? reg))) (runs:loop-values tal reg reglen regfull reruns) ;; hed should be dropped at this time #f)) | > | 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 | (not (member 'exclusive testmode))))) ;; (hash-table-delete! *max-tries-hash* (db:test-make-full-name test-name item-path)) ;; we are going to reset all the counters for test retries by setting a new hash table ;; this means they will increment only when nothing can be run (set! *max-tries-hash* (make-hash-table)) (run:test run-id run-info keyvals runname test-record flags #f test-registry all-tests-registry runsdat testdat) (set! *last-test-launch* (current-seconds)) (runs:incremental-print-results run-id) (hash-table-set! test-registry (db:test-make-full-name test-name item-path) 'running) (runs:shrink-can-run-more-tests-count runsdat) ;; DELAY TWEAKER (still needed?) ;; (thread-sleep! *global-delta*) (if (or (not (null? tal))(not (null? reg))) (runs:loop-values tal reg reglen regfull reruns) ;; hed should be dropped at this time #f)) |
︙ | ︙ |
Added ulex-dual/Makefile version [1659f80ce4].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | all : ulex.pdf ulex.png ulex.pdf : ulex.dot dot -Tpdf ulex.dot -o ulex.pdf ulex.png : ulex.dot dot -Tpng ulex.dot -o ulex.png |
Added ulex-dual/ulex.dot version [08f8e06c6d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | // Copyright 2006-2017, Matthew Welland. // // This file is part of Megatest. // // Megatest is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Megatest is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Megatest. If not, see <http://www.gnu.org/licenses/>. digraph G { // graph[center=true, margin=0.2, nodesep=0.1, ranksep=0.3] layout=neato; // layout=fdp; // overlap=scalexy; //false, compress, ... overlap=scalexy; // sep="+1"; // 0.1, +1 sep="-0.1"; user_program [label="user program"]; subgraph cluster_1 { node [style=filled,shape=oval]; label = "caller"; color=brown; send_receive [label="(send-receive uconn\n host-port qrykey cmd data)"]; send [label="(send uconn host-port\n qrykey cmd data)"]; ulex_cmd_loopcaller [label="(ulex-cmd-loop uconn)"]; ulex_handlercaller [label="(ulex-handler uconn rdat)"]; mailbox [label="mailbox\n\nrdat\n...",shape=box]; send_receive -> send; ulex_cmd_loopcaller -> ulex_handlercaller; ulex_handlercaller -> mailbox; mailbox -> send_receive; } subgraph cluster_2 { node [shape=oval]; label = "listener"; color=green; ulex_cmd_loop [label="(ulex-cmd-loop uconn)"]; ulex_handler [label="(ulex-handler \nuconn rdat)"]; add_to_work_queue [label="(add-to-work-queue\n uconn rdat)"]; queue [label="queue\n\nrdat\n...",shape=box]; process_work_queue [label="(process-work-queue uconn)"]; do_work [label="(do-work uconn rdat)\nrdat: '(rem-host-port qrykey cmd params)"]; user_proc [label="(proc rem-host-port\n qrykey cmd params)\n;; proc supplied by user"]; sendlis [label="(send uconn host-port\n qrykey 'response result)"]; ulex_cmd_loop -> ulex_handler [label="rdat"]; ulex_handler -> add_to_work_queue [label="rdat"]; add_to_work_queue -> queue [label="rdat"]; subgraph cluster_3 { label = "remote work"; color=blue; queue -> process_work_queue [label="rdat"]; process_work_queue -> do_work [label="rdat"]; do_work -> user_proc; // [label="rdat: '(rem-host-port\n qrykey cmd params)"]; } } user_proc -> sendlis; user_program -> send_receive; send_receive -> user_program; send -> ulex_cmd_loop [label="rdat: '(host-port\n qrykey cmd data)"]; sendlis -> ulex_cmd_loopcaller [label="rdat: '(host-port qrykey\n 'response result)"]; ulex_handler -> send [label="'ack"]; ulex_handlercaller -> sendlis [label="'ack"]; } // check_available_queue -> remove_entries_over_10s_old; // remove_entries_over_10s_old -> set_available [label="num_avail < 3"]; // remove_entries_over_10s_old -> exit [label="num_avail > 2"]; // // set_available -> delay_2s; // delay_2s -> check_place_in_queue; // // check_place_in_queue -> "http:transport-launch" [label="at head"]; // check_place_in_queue -> exit [label="not at head"]; // // "client:login" -> "server:shutdown" [label="login failed"]; // "server:shutdown" -> exit; // // subgraph cluster_2 { // "http:transport-launch" -> "http:transport-run"; // "http:transport-launch" -> "http:transport-keep-running"; // // "http:transport-keep-running" -> "tests running?"; // "tests running?" -> "client:login" [label=yes]; // "tests running?" -> "server:shutdown" [label=no]; // "client:login" -> delay_5s [label="login ok"]; // delay_5s -> "http:transport-keep-running"; // } // // start_server -> "server_running?"; // "server_running?" -> set_available [label="no"]; // "server_running?" -> delay_2s [label="yes"]; // delay_2s -> "still_running?"; // "still_running?" -> ping_server [label=yes]; // "still_running?" -> set_available [label=no]; // ping_server -> exit [label=alive]; // ping_server -> remove_server_record [label=dead]; // remove_server_record -> set_available; // set_available -> avail_delay [label="delay 3s"]; // avail_delay -> "first_in_queue?"; // // "first_in_queue?" -> set_running [label=yes]; // set_running -> get_next_port -> handle_requests; // "first_in_queue?" -> "dead_entry_in_queue?" [label=no]; // "dead_entry_in_queue?" -> "server_running?" [label=no]; // "dead_entry_in_queue?" -> "remove_dead_entries" [label=yes]; // remove_dead_entries -> "server_running?"; // // handle_requests -> start_shutdown [label="no traffic\nno running tests"]; // handle_requests -> shutdown_request; // start_shutdown -> shutdown_delay; // shutdown_request -> shutdown_delay; // shutdown_delay -> exit; |
Added ulex-dual/ulex.pdf version [a11f1937d3].
cannot compute difference between binary files
Added ulex-dual/ulex.png version [1ca21b08ef].
cannot compute difference between binary files