X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-queued;h=8c07638b3fd66661a3b487af9242be2db6c47901;hb=4ee28b411fa819a420926b8a6e60be043fdb1d2e;hp=815def49d94df78ae3784faab30c273a7d4c8025;hpb=54d73dfad0b27edd10ec7c917a96c88d45ad6789;p=freeside.git diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 815def49d..8c07638b3 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -81,22 +81,22 @@ while (1) { # local $FS::UID::AutoCommit = 0; $FS::UID::AutoCommit = 0; - #assuming mysql 4.1 w/subqueries now - #my $nodepend = driver_name eq 'mysql' - # ? '' - # : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. - # ' WHERE queue_depend.jobnum = queue.jobnum ) '; my $nodepend = 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. - ' WHERE queue_depend.jobnum = queue.jobnum ) '; - - my $job = qsearchs( - 'queue', - { 'status' => 'new' }, - '', - driver_name eq 'mysql' - ? "$nodepend ORDER BY jobnum LIMIT 1 FOR UPDATE" - : "$nodepend ORDER BY jobnum FOR UPDATE LIMIT 1" - ) or do { + ' WHERE queue_depend.jobnum = queue.jobnum )'; + + #anything with a priority goes after stuff without one + my $order_by = ' ORDER BY COALESCE(priority,0) ASC, jobnum ASC '; + + $order_by .= ( driver_name eq 'mysql' + ? ' LIMIT 1 FOR UPDATE ' + : ' FOR UPDATE LIMIT 1 ' ); + + my $job = qsearchs({ + 'table' => 'queue', + 'hashref' => { 'status' => 'new' }, + 'extra_sql' => $nodepend, + 'order_by' => $order_by, + }) or do { # if $oldAutoCommit { dbh->commit or do { warn "WARNING: database error, closing connection: ". dbh->errstr; @@ -104,18 +104,10 @@ while (1) { next; }; # } - sleep 5; #connecting to db is expensive + sleep 1; next; }; - #assuming mysql 4.1 w/subqueries now - #if ( driver_name eq 'mysql' - # && qsearch('queue_depend', { 'jobnum' => $job->jobnum } ) ) { - # dbh->commit or die dbh->errstr; #if $oldAutoCommit; - # sleep 5; #would be better if mysql could do everything in query above - # next; - #} - my %hash = $job->hash; $hash{'status'} = 'locked'; my $ljob = new FS::queue ( \%hash );