Moodle 3.7 - Inscription par base de données - problème de synchronisation

Moodle 3.7 - Inscription par base de données - problème de synchronisation

par Séverin Terrier,
Nombre de réponses : 5
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

J'utilise actuellement Moodle 3.7.7. La majorité des inscriptions aux cours sont réalisées grâce à la méthode d'inscription par base de données, ce qui fonctionne très bien, et depuis des années. Techniquement, le serveur tourne actuellement avec CentOS 7 et utilise PHP 7.1.33 et MariaDB 5.5.65.

Je réalise la synchronisation des inscriptions entre la base de données et Moodle grâce au script dédié enrol/database/cli/sync.php (je sais, il faudrait basculer vers la tâche dédiée).

Je constate que depuis la réactivation fin août de cette synchronisation, j'ai parfois, après toutes les lignes indiquant les inscriptions et désinscriptions des utilisateurs, en fin de script, une immense liste reprenant les cours, avec comme message d'erreur "error: skipping course 'IDNUMBER' - could not match with external database".
Et concrètement, dans ce cas, la synchronisation de ces inscriptions ne se fait pas (ce qui est très gênant en période de rentrée).

En cherchant, je suis tombé sur cette conversation en anglais, mais qui n'apporte aucun élément utile.
D'autres personnes auraient remarqué un tel problème ? Et auraient une explication ? Voire une solution ?

Parce qu'actuellement, tout ce que j'imagine, c'est vérifier la bonne exécution de cette synchronisation, et la relancer si ce genre d'erreur se produit...

Séverin

Moyenne des évaluations  -
En réponse à Séverin Terrier

Re: Moodle 3.7 - Inscription par base de données - problème de synchronisation

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles

Hello Séverin,

J'avais fait un test avec une bdd externe pour la création de cours, je viens de le faire pour les inscriptions (Moodle 3.9.1)
Forcément, je n'ai qu'une petite bdd, mais pas d'erreurs.

Après, ce que tu peux essayer de faire, c'est tracer en ligne de commande le contenu.

Visiblement, l'erreur vient du fichier <MOODLE>/enrol/database/lib.php :

    289     /**
    290      * Forces synchronisation of all enrolments with external database.
    291      *
    292      * @param progress_trace $trace
    293      * @param null|int $onecourse limit sync to one course only (used primarily in restore)
    294      * @return int 0 means success, 1 db connect failure, 2 db read failure
    295      */
    296     public function sync_enrolments(progress_trace $trace, $onecourse = null) {
    297         global $CFG, $DB;
...........................
    545                 $rs->Close();
    546             } else {
    547                 $trace->output("error: skipping course '$course->mapping' - could not match with external database", 1);
    548                 continue;
    549             }
    550             unset($usermapping);

Donc après, un test possible serait de faire un dump du contenu des tableaux, en executant la tâche en cli

Exemple pour le dump :

    498             $sql = $this->db_get_sql($table, array($coursefield=>$course->mapping), $sqlfields);
    499             print("#table#\n");
    500             print($table."\n");
    501             print("#array#\n");
    502             print_r(array($coursefield=>$course->mapping));
    503             print("#sqlfields#\n");
    504             print_r($sqlfields);
    505             if ($rs = $extdb->Execute($sql)) {

Par contre, tu risque d'avoir une grosse sortie, mais bon, cela te permettra peut-être de cibler qq chose

Bruno

En réponse à Bruno Malaval

Re: Moodle 3.7 - Inscription par base de données - problème de synchronisation

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Bruno,

Merci beaucoup pour ta réponse et suggestion.

En fait, tout se passe bien la plupart du temps, mais parfois ça ne fonctionne pas. Et je me demande bien pourquoi...

Je garde l'idée sous le coude pour quand j'aurais un peu plus de temps pour ça.

Séverin
En réponse à Séverin Terrier

Re: Moodle 3.7 - Inscription par base de données - problème de synchronisation

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour,

Juste pour signaler que depuis que j'ai modifié l'heure de lancement du script d'inscriptions automatiques de 5h à 6h, je n'ai plus rencontré ce problème. Simple coïncidence, ou pas, bonne question.

Je surveille malgré tout, au cas où...
Avec une simple commande cherchant dans les fichiers de log le nombre d'occurrences de ce message d'erreur :
grep -c "could not match with external database" chemin/vers/fichiers/logs_inscriptions.*
Séverin
En réponse à Séverin Terrier

Re: Moodle 3.7 - Inscription par base de données - problème de synchronisation

par Anne Garnavault Remy,
Bonjour Severin,
Ta base de données externe bénéficie t'elle aussi d'une mise a jour au cours de la nuit? Concretement le message d’erreur est significatif que le le script ne trouve pas la correspondance dans la BD externe d'un cours existant sur Moodle et le changement d'heure semble régler en partie le pb. A Caen, en période de rentrée , l’alimentation de notre BD externe qui provient d'une requête de la BD du logiciel de scolarité APOGEE est plus longue (normal, il y a plein d'inscription) . A vérifier en tout cas
En réponse à Anne Garnavault Remy

Re: Moodle 3.7 - Inscription par base de données - problème de synchronisation

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Anne,

En fait, ce qui est étrange, c'est que j'ai (depuis des années) un script permettant de rapatrier des données issues d'APOGEE et ADE, les charger dans des tables, effectuer toute une série de requêtes afin de constituer la table d'inscription pour Moodle, puis terminer par la synchronisation avec Moodle.

Et tout fonctionnait bien, hormis la synchronisation finale qui rencontrait ce problème en cette rentrée...

J'en suis malgré tout à préférer que cela fonctionne, quitte à ne pas savoir exactement pourquoi (ou plutôt, pourquoi cela ne fonctionnait pas avant) clin d’œil

Séverin