X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-queued;h=8c07638b3fd66661a3b487af9242be2db6c47901;hb=4ee28b411fa819a420926b8a6e60be043fdb1d2e;hp=3a0a9b4e50d76a34b867ebe429f5d612a47bda4a;hpb=673b9a458d9138523026963df6fa3b4683e09bae;p=freeside.git diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 3a0a9b4e5..8c07638b3 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -10,11 +10,8 @@ use FS::Record qw(qsearch qsearchs); use FS::queue; use FS::queue_depend; -# no autoloading just yet -use FS::cust_main; -use FS::svc_acct; +# no autoloading for non-FS classes... use Net::SSH 0.07; -use FS::part_export; $DEBUG = 0; @@ -44,7 +41,7 @@ while ( $@ ) { } } -logfile( "/usr/local/etc/freeside/queuelog.". $FS::UID::datasrc ); +logfile( "%%%FREESIDE_LOG%%%/queuelog.". $FS::UID::datasrc ); warn "completing daemonization (detaching))\n" if $DEBUG; daemonize2(); @@ -84,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; @@ -107,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 ); @@ -167,7 +156,7 @@ while (1) { #auto-use classes... #if ( $ljob->job =~ /(FS::part_export::\w+)::/ ) { - if ( $ljob->job =~ /(FS::part_export::\w+)::/ + if ( $ljob->job =~ /(FS::(part_export|cust_main)::\w+)::/ || $ljob->job =~ /(FS::\w+)::/ ) {