Bonjour,

Je vous contacte suite à un problème que je rencontre avec GLPI 0.84.8 et 
FusionInventory sur mon serveur Apache.

Mon problème ressemble beaucoup à celui-là : 
http://forum.fusioninventory.org/viewtopic.php?id=2595

Du coup, j'ai recherché le patch et je l'ai appliqué sur mon serveur : 
https://github.com/fusioninventory/fusioninventory-for-glpi/commit/b4182019cb303d4e02c2b6f33281b7de2cbc5af5

Sauf qu'en lisant le code de la classe incriminée 
(https://raw.githubusercontent.com/fusioninventory/fusioninventory-for-glpi/master/inc/inventorycomputerinventory.class.php)
 , je me rend compte qu'il doit y avoir un autre problème.

En effet, la fonction import() est contient les lignes :

      // Clean all DB LOCK if exist more than 10 minutes
      $time = 600;
      $query = "DELETE FROM `glpi_plugin_fusioninventory_dblockinventorynames` "
              . " WHERE `date` <  CURRENT_TIMESTAMP() - ".$time;
      $query = "DELETE FROM `glpi_plugin_fusioninventory_dblockinventories` "
              . " WHERE `date` <  CURRENT_TIMESTAMP() - ".$time;
      $query = "DELETE FROM `glpi_plugin_fusioninventory_dblocksoftwares` "
              . " WHERE `date` <  CURRENT_TIMESTAMP() - ".$time;
      $query = "DELETE FROM 
`glpi_plugin_fusioninventory_dblocksoftwareversions` "
              . " WHERE `date` <  CURRENT_TIMESTAMP() - ".$time;

      // DB LOCK
      $query = "INSERT INTO `glpi_plugin_fusioninventory_dblockinventorynames`
            SET `value`='".$name."'";
      $CFG_GLPI["use_log_in_files"] = FALSE;
      $start_time = date('U');
      while(!$DB->query($query)) {
         usleep(100000);
                ...

Contexte : il existe dans ma table 
glpi_plugin_fusioninventory_dblockinventorynames plusieurs entrées. 
Vraisemblablement, des locks qui n'ont pu être supprimés suite à un redémarrage 
du serveur apache, tuant des processus en cours qui avaient créé les locks, 
mais qui du coup n'ont pas pu les supprimer.
Du coup, en lisant le code, je me dis qu'il doit bien y avoir quelque chose 
pour supprimer ces entrées (vieilles car datant d'au moins 1 mois).  Dans le 
code que j'ai retranscrit plus haut, il y a bien les query de suppression, mais 
elles ne sont pas exécutées. D'où le problème que je pense qu'il y a.

Ne manque-t-il pas des $DB->query($query) après chaque ligne $query = DELETE 
..... ?

Le patch cache ce problème en libérant la connexion plus rapidement, mais le 
lock reste et la machine ne sera jamais mise à jour en base.


Qu'en pensez-vous ?

Cordialement,


Matthieu MARC

----------------------------------------------------------
Matthieu MARC
Ingénieur informatique
Direction des Systèmes d'Information

[Description : cid:8D30A827-01D1-4BAD-8638-C748210F90D9]
Ecole Nationale Supérieure d'Arts et Métiers
2 boulevard du ronceray 49035 ANGERS
http://www.ensam.eu<http://www.ensam.eu/>

_______________________________________________
Fusioninventory-devel mailing list
Fusioninventory-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/fusioninventory-devel

Répondre à