bulkmail_end db bulkmail_idWhat it does:
Finalizes the info regarding the instance in bulkmail_instancesDefined in: /web/philip/tcl/bulkmail-utils.tcl
Source code:
ns_share bulkmail_db_flush_wait_event_mutex ns_share bulkmail_db_flush_wait_event ns_share bulkmail_instances_mutex ns_share bulkmail_instances ns_share bulkmail_finished_instances_mutex ns_share bulkmail_finished_instances ns_share bulkmail_instance_finished_event_mutex ns_share bulkmail_instance_finished_event ns_share bulkmail_message_queue_mutex # Spit out any lingering messages in the message queue. If we have # anything still queued up, this will start them sending ns_mutex lock $bulkmail_message_queue_mutex catch { bulkmail_process_message_queue } ns_mutex unlock $bulkmail_message_queue_mutex # Wait until all of our messages have been sent. while (1) { # a bulkmail_instance_finished_event is triggered when all of an # instance's queued messages have been sent. Let's wait 10 seconds # on the event. If it times out, we'll check to see if our instance # is finished, in case we missed the event (Thanks, Henry!) ns_event wait $bulkmail_instance_finished_event $bulkmail_instance_finished_event_mutex 10 # Check to see if the instance we're waiting on is one that finished. ns_mutex lock $bulkmail_finished_instances_mutex if { [catch { set n_sent [ns_set get $bulkmail_finished_instances $bulkmail_id] } errmsg] } { ns_log Error "Error getting n_sent: $errmsg\n" } ns_log Notice "bulkmail_id: $bulkmail_id, n_sent: $n_sent\n" ns_mutex unlock $bulkmail_finished_instances_mutex # It was us, so let's finish up if ![empty_string_p $n_sent] { # Remove this instance from the list of finished instances ns_mutex lock $bulkmail_finished_instances_mutex catch { ns_set delkey $bulkmail_finished_instances $bulkmail_id } ns_mutex unlock $bulkmail_finished_instances_mutex # We want to wait until the db_flush_wait proc is done flushing # (the mutex for the wait event is unlocked) before we try # telling it to flush. We'll do this by trying to lock the # mutex. ns_mutex lock $bulkmail_db_flush_wait_event_mutex ns_mutex unlock $bulkmail_db_flush_wait_event_mutex # Now trigger it. ns_event set $bulkmail_db_flush_wait_event # Remove this instance from bulkmail_instances # This is placed far down, because it's called in # bulkmail_db_flush_wait (so we need to make sure we don't # call it until all our guys have made it.) ns_mutex lock $bulkmail_instances_mutex catch { ns_set delkey $bulkmail_instances $bulkmail_id } ns_mutex unlock $bulkmail_instances_mutex # Wahoo! We're all clear kid! break } } # Once everything is done, let's finalize the data # It should have already been done by the db_flush proc, but just in # case, let's set it here. ns_db dml $db "update bulkmail_instances set end_date = sysdate where bulkmail_id = $bulkmail_id"