Changeset 110157 in spip-zone


Ignore:
Timestamp:
May 9, 2018, 2:42:03 PM (14 months ago)
Author:
marcimat@…
Message:

Lorqu’on déclare une nouvelle mailing-liste synchronisée… qui contient beaucoup d’entrées…
La synchro prend un temps fou et timeout… et ne reprend que 24h plus tard…
Plutôt que d’attendre, si la synchro n’est pas terminée avant un timeout proche, on remet le job
pour qu’elle continue au prochain hit.

Location:
_plugins_/mailsubscribers/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailsubscribers/trunk/inc/mailsubscribers.php

    r109801 r110157  
    542542                        $n = count($abonnes);
    543543                        spip_log("Synchronise liste $liste avec $n abonnes (fonction $f)", "mailsubscribers");
    544                         mailsubscribers_synchronise_liste($liste, $abonnes);
     544                        if (!mailsubscribers_synchronise_liste($liste, $abonnes)) {
     545                                job_queue_add(
     546                                        "mailsubscribers_do_synchro_list",
     547                                        "Synchro liste (poursuivre) " . $liste,
     548                                        array($liste),
     549                                        "inc/mailsubscribers"
     550                                );
     551                        }
    545552                } else {
    546553                        spip_log("Synchronise liste $liste : abonnes mal formes en retour de la fonction $f",
     
    596603 *   bool addonly : pour ajouter uniquement les nouveaux abonnes, et ne desabonner personne
    597604 *   bool graceful : pour ne pas reabonner ceux qui se sont desabonnes manuellement
     605 * @return bool
     606 *   - true : indique que la synchronisation s’est terminée (ou qu’il n’y avait rien à faire)
     607 *   - false : indique que la synchronisation ne s’est pas terminée à cause d’un timeout proche
    598608 */
    599609function mailsubscribers_synchronise_liste($liste, $abonnes, $options = array()) {
     
    602612                'identifiant=' . sql_quote($liste));
    603613        if (!$id_mailsubscribinglist) {
    604                 return;
    605         }
     614                spip_log("Mailing liste $liste introuvable pour synchro", 'mailsubscribers');
     615                return true;
     616        }
     617
     618        $timeout = ini_get('max_execution_time');
     619        // valeur conservatrice si on a pas reussi a lire le max_execution_time
     620        if (!$timeout) {
     621                $timeout = 30;
     622        } // parions sur une valeur tellement courante ...
     623        $max_time = time() + $timeout / 2;
    606624
    607625        if (is_bool($options)) {
     
    638656                        //echo "unsubscribe ".$sub['email']."<br />";
    639657                        $unsubscribe($sub['email'], array('listes' => $listes, 'notify' => false, 'remove' => true));
     658                }
     659                if (time() >= $max_time) {
     660                        return false;
    640661                }
    641662        }
     
    659680                }
    660681                $subscribe($email, $data_subscriber);
     682                if (time() >= $max_time) {
     683                        return false;
     684                }
    661685        }
    662686
     
    666690                debloquer_tous($id_a);
    667691        }
    668 }
     692
     693        return true;
     694}
  • _plugins_/mailsubscribers/trunk/paquet.xml

    r109801 r110157  
    22        prefix="mailsubscribers"
    33        categorie="communication"
    4         version="2.7.3"
     4        version="2.7.4"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.