bulkmail_db_flush_waitWhat it does:
Run forever, waiting to flush message info to the dbDefined in: /web/philip/tcl/bulkmail-utils.tcl
Source code:
ns_share bulkmail_db_flush_wait_event ns_share bulkmail_db_flush_wait_event_mutex ns_share bulkmail_db_flush_queue ns_share bulkmail_db_flush_queue_mutex ns_share bulkmail_instances_mutex ns_share bulkmail_instances # Loop forever, waiting for events requesting the flush of the queue. # TODO: probably want to have something trigger this to stop. Maybe # put a timeout on the wait, and have a check of a shared variable. while (1) { if { [catch { # 2 second timeout ns_event wait $bulkmail_db_flush_wait_event $bulkmail_db_flush_wait_event_mutex 2 ns_mutex lock $bulkmail_db_flush_queue_mutex catch { set flush_queue $bulkmail_db_flush_queue set bulkmail_db_flush_queue [list] } ns_mutex unlock $bulkmail_db_flush_queue_mutex if { [llength $flush_queue] > 0 } { set db [ns_db gethandle] ns_db dml $db "begin transaction" foreach flushed_messages $flush_queue { foreach flush_entry $flushed_messages { set bulkmail_id [lindex $flush_entry 0] set user_id [lindex $flush_entry 1] set sent_date [lindex $flush_entry 2] ns_db dml $db "insert into bulkmail_log (bulkmail_id, user_id, sent_date) values ($bulkmail_id, $user_id, to_date('$sent_date', 'YYYY-MM-DD HH24:MI:SS'))" } # Even though we're only reading, others may be writing or deleting # our entry for update. So, we need to lock this. ns_mutex lock $bulkmail_instances_mutex catch { set instance_stats [ns_set get $bulkmail_instances $bulkmail_id] # instance_stats is a two-item list: queued sent set queued_count [lindex $instance_stats 0] set sent_count [lindex $instance_stats 1] } ns_mutex unlock $bulkmail_instances_mutex # We need to check if sent_count is empty. This might occur # if bulkmail_end finished up before db_flush_wait. if ![empty_string_p $sent_count] { ns_db dml $db "update bulkmail_instances set n_sent = $sent_count where bulkmail_id = $bulkmail_id" } } ns_db dml $db "end transaction" ns_db releasehandle $db } } errmsg] } { ns_log Notice "Caught error: $errmsg in bulkmail_db_flush_wait" if { [info exists db] && ![empty_string_p $db] && [ns_db connected $db]} { ns_db releasehandle $db } } # Unlock the event's mutex ns_mutex unlock $bulkmail_db_flush_wait_event_mutex }