Overview
Comment: | Added additional time to the transient test state/status change resistance. Now at 40 seconds. Seems to resist all reasonable transient changes. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v1.65 |
Files: | files | file ages | folders |
SHA1: |
5a7b531a5237bc6f9d8ccdf4ead5db55 |
User & Date: | mrwellan on 2018-06-04 08:43:49 |
Other Links: | branch diff | manifest | tags |
Context
2018-06-06
| ||
18:48 | fix for tagexpr and default timeout on tsend check-in: 96a83f9ea5 user: pjhatwal tags: v1.65 | |
2018-06-04
| ||
08:43 | Added additional time to the transient test state/status change resistance. Now at 40 seconds. Seems to resist all reasonable transient changes. check-in: 5a7b531a52 user: mrwellan tags: v1.65 | |
2018-05-31
| ||
14:52 | Added glob support to configf include directives check-in: ac5c30cfa9 user: mrwellan tags: v1.65 | |
Changes
Modified tcmt.scm from [ea85906b50] to [679021e6ef].
︙ | ︙ | |||
187 188 189 190 191 192 193 | ;;;;;;; ((PASS SKIP WARN WAIVED) (print "##teamcity[testFinished name='" tctname "' duration='" (* 1e3 duration) "'" cmtstr details " flowId='" flowid "']")) ;;;;;;; (else ;;;;;;; (print "##teamcity[testFailed name='" tctname "' " cmtstr details " flowId='" flowid "']"))) ;;;;;;; (flush-output) ;; (trace rmt:get-tests-for-run) | | | > | 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | ;;;;;;; ((PASS SKIP WARN WAIVED) (print "##teamcity[testFinished name='" tctname "' duration='" (* 1e3 duration) "'" cmtstr details " flowId='" flowid "']")) ;;;;;;; (else ;;;;;;; (print "##teamcity[testFailed name='" tctname "' " cmtstr details " flowId='" flowid "']"))) ;;;;;;; (flush-output) ;; (trace rmt:get-tests-for-run) (define (update-queue-since data run-ids last-update tsname target runname flowid flush #!key (delay-flag #t)) ;; (let ((now (current-seconds)) (still-running #f)) ;; (handle-exceptions ;; exn ;; (begin (print-call-chain) (print "Error message: " ((condition-property-accessor 'exn 'message) exn))) (for-each (lambda (run-id) (let* ((tests (rmt:get-tests-for-run run-id "%" '() '() #f #f #f #f #f #f last-update #f))) ;; (print "DEBUG: got tests=" tests) |
︙ | ︙ | |||
212 213 214 215 216 217 218 219 | (status (db:test-get-status test-rec)) (etime (db:test-get-event_time test-rec)) (duration (or (any->number (db:test-get-run_duration test-rec)) 0)) (comment (db:test-get-comment test-rec)) (logfile (db:test-get-final_logf test-rec)) (hostn (db:test-get-host test-rec)) (pid (db:test-get-process_id test-rec)) (newstat (cond | > > > > > > > > > > > > | > > | > | > > | | | > > | | | | | 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 | (status (db:test-get-status test-rec)) (etime (db:test-get-event_time test-rec)) (duration (or (any->number (db:test-get-run_duration test-rec)) 0)) (comment (db:test-get-comment test-rec)) (logfile (db:test-get-final_logf test-rec)) (hostn (db:test-get-host test-rec)) (pid (db:test-get-process_id test-rec)) (test-cont (> (+ etime duration 40) (current-seconds))) ;; test has not been over for more than 20 seconds (adj-state (if delay-flag (if test-cont (begin (set! still-running #t) "RUNNING") state) state)) (newstat (cond ;; ((or (not delay-flag) ;; (< (+ etime duration) ;; (- (current-seconds) 10))) ;; (print "Skipping as delay hasn't hit") "RUNNING") ((equal? adj-state "RUNNING") (set! still-running #t) "RUNNING") ((equal? adj-state "COMPLETED") status) (flush (conc state "/" status)) (else "UNK"))) (cmtstr (if (and (not flush) comment) comment (if flush (conc "Test ended in state/status=" state "/" status (if (string-match "^\\s*$" comment) ", no Megatest comment found." (conc ", Megatest comment=\"" comment "\""))) ;; special case, we are handling stragglers #f))) (details (if (string-match ".*html$" logfile) (conc *toppath* "/lt/" target "/" runname "/" testname (if (equal? itempath "") "/" (conc "/" itempath "/")) logfile) #f)) (prev-tdat (hash-table-ref/default data tname #f)) (tdat (if is-top #f (let ((new (or prev-tdat (make-testdat)))) ;; recycle the record so we keep track of already printed items (testdat-flowid-set! new (or (testdat-flowid new) (if (eq? pid 0) tctname (conc hostn "-" pid)))) (testdat-tctname-set! new tctname) (testdat-tname-set! new tname) (testdat-state-set! new adj-state) (testdat-status-set! new status) (testdat-comment-set! new cmtstr) (testdat-details-set! new details) (testdat-duration-set! new duration) (testdat-event-time-set! new etime) ;; (current-seconds)) (testdat-overall-set! new newstat) (hash-table-set! data tname new) new)))) (if (not is-top) (hash-table-set! data 'tqueue (cons tdat tqueue))) (hash-table-set! data tname tdat) )) tests))) run-ids) (list now still-running))) (define (monitor pid) (let* ((run-ids '()) (testdats (make-hash-table)) ;; each entry is a list of testdat structs (keys #f) (last-update 0) (target (or (args:get-arg "-target") (args:get-arg "-reqtarg"))) |
︙ | ︙ | |||
300 301 302 303 304 305 306 | rows))) (set! run-ids run-ids-in))) ;; (print "TCMT: pidres=" pidres " exittype=" exittype " exitstatus=" exitstatus " run-ids=" run-ids) (if (eq? pidres 0) (begin (if keys (begin | | | > > > > > > > | > > > > | | | | | | > > > > > | 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 | rows))) (set! run-ids run-ids-in))) ;; (print "TCMT: pidres=" pidres " exittype=" exittype " exitstatus=" exitstatus " run-ids=" run-ids) (if (eq? pidres 0) (begin (if keys (begin (set! last-update (- (car (update-queue-since testdats run-ids last-update tsname target runname flowid #f delay-flag: #t)) 5)) (process-queue testdats tdelay #f))) (thread-sleep! 3) (loop))))) ;; the megatest runner is done - now wait for all processes to be COMPLETED or NO Processes to be RUNNING > 1 minute (let loop () (let* ((new-last-update-info (update-queue-since testdats run-ids last-update tsname target runname flowid #f delay-flag: #t)) (still-running (cadr new-last-update-info)) (new-last-update (- (car new-last-update-info) 5))) (process-queue testdats tdelay #f) (if still-running (begin (print "TCMT: Tests still running, keep watching...") (thread-sleep! 3) (loop))))) ;; (print "TCMT: pidres=" pidres " exittype=" exittype " exitstatus=" exitstatus " run-ids=" run-ids) (print "TCMT: processing any tests that did not formally complete.") (update-queue-since testdats run-ids 0 tsname target runname flowid #t #f delay-flag: #f) ;; call in flush mode (process-queue testdats 0 #t) (print "TCMT: All done.") )) ;;;;; ) ;; (trace print-changes-since) ;; (if (not (eq? pidres 0)) ;; (not exitstatus)) ;; (begin ;; (thread-sleep! 3) ;; (loop)) ;; (print "Process: megatest " (string-intersperse origargs " ") " is done."))))) (if (file-exists? ".tcmtrc") (load ".tcmtrc")) (define (main) (let* ((mt-done #f) (pid #f) (th1 (make-thread (lambda () (print "Running megatest " (string-intersperse origargs " ")) (set! pid (process-run "megatest" origargs))) "Megatest job")) |
︙ | ︙ |