Changeset 39423 in spip-zone for _plugins_/job_queue/inc/queue.php


Ignore:
Timestamp:
Jul 21, 2010, 11:32:08 AM (10 years ago)
Author:
cedric@…
Message:

optimisation : passer le champ status en int avec un index pour accelerer les traitements et eviter les slow queries

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/job_queue/inc/queue.php

    r38751 r39423  
    77 */
    88
     9@define('_JQ_SCHEDULED',1);
     10@define('_JQ_PENDING',0);
    911
    1012/**
     
    4850                AND
    4951                        sql_countsel('spip_jobs',
    50                                 'status=\'scheduled\' AND fonction='.sql_quote($function)
     52                                'status='.intval(_JQ_SCHEDULED).' AND fonction='.sql_quote($function)
    5153                                .(($no_duplicate==='function_only')?'':
    5254                                 ' AND md5args='.sql_quote($md5args).' AND inclure='.sql_quote($file)))
     
    6769                        'priorite'=>max(-10,min(10,intval($priority))),
    6870                        'date'=>$date,
    69                         'status'=>'scheduled',
     71                        'status'=>_JQ_SCHEDULED,
    7072                ));
    7173
     
    235237        // pour qu'il ne bloque pas les autres jobs en attente
    236238        if (is_array($force_jobs) AND count($force_jobs))
    237                 $cond = "status='scheduled' AND ".sql_in("id_job", $force_jobs);
     239                $cond = "status=".intval(_JQ_SCHEDULED)." AND ".sql_in("id_job", $force_jobs);
    238240        else {
    239241                $now = date('Y-m-d H:i:s',$time);
    240                 $cond = "status='scheduled' AND date<".sql_quote($now);
     242                $cond = "status=".intval(_JQ_SCHEDULED)." AND date<".sql_quote($now);
    241243        }
    242244
     
    247249                        $nbj++;
    248250                        // il faut un verrou, a base de sql_delete
    249                         if (sql_delete('spip_jobs',"status='scheduled' AND id_job=".intval($row['id_job']))){
     251                        if (sql_delete('spip_jobs',"id_job=".intval($row['id_job']."AND status=".intval(_JQ_SCHEDULED)))){
    250252                                #spip_log("JQ schedule job ".$nbj." OK",'jq');
    251                                 // on reinsert dans la base aussitot avec un status='pending'
    252                                 $row['status'] = 'pending';
     253                                // on reinsert dans la base aussitot avec un status=_JQ_PENDING
     254                                $row['status'] = _JQ_PENDING;
    253255                                $row['date'] = $time;
    254256                                sql_insertq('spip_jobs', $row);
     
    277279
    278280/**
    279  * Terminer un job au status 'pending' :
     281 * Terminer un job au status _JQ_PENDING :
    280282 *  - le reprogrammer si c'est un cron
    281283 *  - supprimer ses liens
     
    362364        $time = time();
    363365
    364         // traiter les jobs morts au combat (pending depuis plus de 180s)
     366        // traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s)
    365367        // pour cause de timeout ou autre erreur fatale
    366         $res = sql_select("*","spip_jobs","status='pending' AND date<".sql_quote(date('Y-m-d H:i:s',$time-180)));
     368        $res = sql_select("*","spip_jobs","status=".intval(_JQ_PENDING)." AND date<".sql_quote(date('Y-m-d H:i:s',$time-180)));
    367369        while ($row = sql_fetch($res))
    368370                queue_close_job($row,$time);
     
    370372        // chercher la date du prochain job si pas connu
    371373        if (is_null($next) OR !isset($GLOBALS['meta']['queue_next_job_time'])){
    372                 $date = sql_getfetsel('date','spip_jobs',"status='scheduled'",'','date','0,1');
     374                $date = sql_getfetsel('date','spip_jobs',"status=".intval(_JQ_SCHEDULED),'','date','0,1');
    373375                $next = strtotime($date);
    374376        }
     
    376378                if ($next){
    377379                        if (is_null($nb_jobs_scheduled))
    378                                 $nb_jobs_scheduled = sql_countsel('spip_jobs',"status='scheduled' AND date<".sql_quote(date('Y-m-d H:i:s',$time)));
     380                                $nb_jobs_scheduled = sql_countsel('spip_jobs',"status=".intval(_JQ_SCHEDULED)." AND date<".sql_quote(date('Y-m-d H:i:s',$time)));
    379381                        elseif ($next<=$time)
    380382                                $nb_jobs_scheduled++;
Note: See TracChangeset for help on using the changeset viewer.