You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Propositions de modification liées à #418
Cette PR est basé sur #417 qui devrait être mergée avant cette PR.
Testée uniquement en local et sous windows, à valider sous Linux avec une attention particulière sur les performances et l'impact sur l'utilisation de la BD Postgres.
gmaillet
changed the title
Fix resource busy error
protection de l'API pour des commandes concurrentes sur la même branche
Jul 1, 2024
J'ai testé en local sous Linux et je n'ai pas observé de ralentissement sur mes petits caches.
Pour tester les performances, il faudrait tester sur des caches de prod, avec plusieurs utilisateurs concurrents...
Testé sur l'infra de production: j'ai l'impression que le code fonctionne, mais visiblement le verrouillage n'est pas suffisant dans le cas où on utilise deux serveurs. Je pense qu'il y a un mécanisme de cache sur les montages NFS du store. Du coup, le traitement est vu comme terminé sur un serveur, mais l'état n'est pas encore cohérent sur l'autre serveur.
C'est tout de même beaucoup moins fréquent.
Il reste encore la possibilité d'intercepter l'erreur du rename (voir exemple ci-dessous) puisque maintenant on sait qu'en attendant un peu avant une nouvelle tentative ça devrait fonctionner.
(node:172225) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, rename '/mnt/store-SIA/PACKO/cache_ortho_tipi/cache_packo/graph/21/00/00/22/YA/232_G0.tif' -> '/mnt/store-SIA/PACKO/cache_ortho_tipi/cache_packo/graph/21/00/00/22/YA/232_G0_1.tif'
at Object.renameSync (fs.js:798:3)
at rename (/var/packo/middlewares/patch.js:49:6)
at /var/packo/middlewares/patch.js:490:5
at Array.forEach ()
at undo (/var/packo/middlewares/patch.js:457:9)
at runMicrotasks ()
at processTicksAndRejections (internal/process/task_queues.js:95:5)
J'ai poussé une nouvelle version qui vérifie l'accès à tous les fichiers avant de commencer les renommages (pour les undo/redo). En cas d'erreur sur l'un des fichiers: on ne fait rien et on informe l'utilisateur. Cela évite de faire les modifs à moitié et de compromettre l'intégrité du cache (et de bloquer l'API avec un exception non gérée).
Je ne suis pas certain que ça élimine tous les risques dans le cas de l'utilisation de plusieurs serveurs avec du cache NFS, mais ça me semble plus sain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Propositions de modification liées à #418
Cette PR est basé sur #417 qui devrait être mergée avant cette PR.
Testée uniquement en local et sous windows, à valider sous Linux avec une attention particulière sur les performances et l'impact sur l'utilisation de la BD Postgres.