augmentconfigdefaults(
OwnerDaemonHost => $c{ControlDaemonHost},
QueueDaemonHost => $c{ControlDaemonHost},
+ OwnerDaemonDbRetry => $c{QueueDaemonRetry},
);
#---------- configuration reader etc. ----------
source ./tcl/daemonlib.tcl
+set dead_tasks {}
+
proc chan-destroy-stuff {chan} {
+ global dead_tasks
+
upvar #0 chanawait($chan) await
catch { unset await }
upvar #0 chantasks($chan) tasks
if {![info exists tasks]} return
+ puts-chan-desc $chan "-- $tasks"
+
+ foreach task $tasks {
+ lappend dead_tasks $task
+ }
+ unset tasks
+ after idle record-dead-tasks
+}
+
+proc record-dead-tasks {} {
+ global c dead_tasks
+
+ if {![llength $dead_tasks]} return
+
+ puts "record-dead-tasks ... $dead_tasks"
+
+ set retry [expr {$c(OwnerDaemonDbRetry) * 1000}]
+ set eafter [after $retry record-dead-tasks-retry]
+
jobdb::transaction resources {
- puts-chan-desc $chan "-- $tasks"
- foreach task $tasks {
+ foreach task $dead_tasks {
jobdb::db-execute "
UPDATE tasks
SET live = 'f'
"
}
}
- puts-chan-desc $chan "== $tasks"
- unset tasks
+ after cancel $eafter
+ puts "record-dead-tasks OK. $dead_tasks"
+ set dead_tasks {}
after idle await-endings-notify
}
+proc record-dead-tasks-retry {} {
+ after idle record-dead-tasks
+ puts "** reconnecting/retrying **"
+ catch { jobdb::db-close }
+ jobdb::db-open
+}
+
proc await-endings-notify {} {
global chanawait
foreach chan [array names chanawait] {