Megatest

Diff
Login

Differences From Artifact [0b444a0bb7]:

To Artifact [0c7d16446b]:


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
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






-
+


+
-
-
+
+
+
-
-
+
+
+





-
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+







              id         INTEGER PRIMARY KEY,
              test_id    INTEGER,
              run_lock   TEXT,
              CONSTRAINT runlock_constraint UNIQUE (run_lock));"))))
    (sqlite3:set-busy-handler! db handler)
    db))

(define (lock-queue:set-state db test-id newstate #!key (count 10))
(define (lock-queue:set-state db test-id newstate #!key (remtries 10))
  (handle-exceptions
   exn
   (if (> remtries 0)
   (begin
     (thread-sleep! 10)
       (begin
	 (debug:print 0 "WARNING: exception on lock-queue:set-state. Trying again in 30 seconds.")
	 (thread-sleep! 30)
     (if (> count 0)
	 (lock-queue:set-state db test-id newstate (- count 1))
	 (lock-queue:set-state db test-id newstate remtries: (- remtries 1)))
       (begin
	 (debug:print 0 "ERROR:  Failed to set lock state for test with id " test-id ", error: " ((condition-property-accessor 'exn 'message) exn) ", giving up.")
	 #f))
   (sqlite3:execute db "UPDATE queue SET state=? WHERE test_id=?;"
		    newstate
		    test-id)))

(define (lock-queue:any-younger? db mystart test-id #!key (count 10))
(define (lock-queue:any-younger? db mystart test-id #!key (remtries 10))
  (let ((res #f))
    (handle-exceptions
     exn
     (begin
       (thread-sleep! 10)
  (handle-exceptions
   exn
   (if (> remtries 0)
       (begin
	 (debug:print 0 "WARNING: exception on lock-queue:any-younger. Trying again in 30 seconds.")
	 (thread-sleep! 30)
       (if (> count 0)
	   (lock-queue:any-younger? db mystart test-id count: (- count 1))
	   #f))
	 (lock-queue:any-younger? db mystart test-id remtries: (- remtries 1)))
       (begin
	 (debug:print 0 "ERROR:  Failed to find younger locks for test with id " test-id ", error: " ((condition-property-accessor 'exn 'message) exn) ", giving up.")
	 #f))
   (let ((res #f))
     (sqlite3:for-each-row
      (lambda (tid)
	;; Actually this should not be needed as mystart cannot be simultaneously less than and test-id same as 
	(if (not (equal? tid test-id)) 
	    (set! res tid)))
      db
      "SELECT test_id FROM queue WHERE start_time > ?;" mystart)