On Monday 06 August 2007 19:34, Gerhard Killesreiter wrote:
Hi there,
our search module uses a shutdown function in its cron hook. While re-indexing scratch.d.o to test Doug's patch, I encountered the following situation:
1) There are runnign several update routines from search_update_totals in parallel.
2) The final select query in that function run for hours.
I believe that 1) is caused by the fact that the shutdown function isn't governed by our cron semaphore. That is, it runs until it is done and it won't stop other cron jobs from running. So if there are enough dirty workds to update, it is possible that there are several of them running in parallel. I've seen as many as 5. Does anybody consider this a problem?
I am not sure I understand the problem. If you want to make sure only one process runs at a time, we can use a locking mechanism like I do in one module: Making sure we get the lock prevents a race condition, a problem that make poormanscron.module currently unuseable (see link in code comment). /** * Implementation of hook_cron(). */ function hook_cron() { // Check if we have another instance of cron running. if (variable_get('hook_cron_running', 0)) { return; } // hook_cron is not already running. // See if we can get the lock before another process does. // Algorithm found here: http://drupal.org/node/43511. $result = db_query("UPDATE {variable} SET value = 'i:1;' WHERE name = 'hook_cron_running' AND value = 'i:0;'"); if (db_affected_rows() != 1) { // We didn't get the lock. Another process outran us. watchdog('hook_cron', 'This cron process was outraced.'); return; } // Do stuff here... // then, at the end: // Unlock. variable_set('hook_cron_running', 0); return; } -- http://www.wechange.org/ Because we and the world need to change. http://www.reuniting.info/ Intimate Relationships, peace and harmony in the couple.