Problème d'upload sur un NFS (trop lent ?)
Pour garder une trace et tenter de trouver une parade à un bug qu'on a chez Infini avec bigup. Le contexte, les fichiers des sites qu'on y héberge sont stockés sur un NFS (disque réseau) accessible depuis nos différentes VMs qui portent apache. Certainement à cause de la latence engendrée par le NFS, l'upload avec bigup échoue X fois sur Y, en renvoyant une erreur "Indiquez un fichier !".
Après pas mal d'échanges avec @maieul qui nous a remonté le bug, et suite à différents tests, j'ai trouvé ce qui semble être l'origine du problème dans la méthode trouver_fichiers()
de la classe CacheRepertoire
ici :
Le test sur !is_dir($directory)
renvoie parfois false, et génère le bug en question.
J'ai tenté pas mal de choses, comme :
- ajouter un
opendir()/closedir()
avant le test cf https://stackoverflow.com/questions/41723458/php-file-exists-or-is-file-does-not-answer-correctly-for-10-20s-on-nfs-files-ec => sans succès - ajouter un
clearstatcache()
sur le répertoire avant le test, car comme indiqué dans https://www.php.net/manual/en/function.is-dir.php "The results of this function are cached. See clearstatcache() for more details." => sans succès
Pour l'instant, la seule parade qui fonctionne est d'ajouter un sleep(1)
(ou autre valeur) avant le test sur is_dir()
, mais ça n'est pas viable...
Pour info, j'ai trouvé mention de ce type de bug chez nextcloud https://github.com/nextcloud/server/issues/7124 qui pour contourner un problème similaire avec is_writable()
sur NFS applique le patch suivant https://github.com/nextcloud/server/pull/13237
Complément d'info : j'ai testé et confirmé le bug sur nos VMs PHP 7.2 et 7.4, avec SPIP 4.0, 4.1 et 3.2 plus bigup.