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