Traitement bloqué d'import par Cron/Adapter

Bonjour,
On intègre des données via des adapteurs.
On les lance via des crons durant la nuit pour ne pas impacter les utilisateurs lors de la journée.
On a eu un comportement bizarre et on aimerait savoir s’il y a des pistes qui peut nous aider.
Le problème est un blocage de threads ce qui bloque nos traitement aussi .

Je vous remercie d’avance pour votre aide.

[Platform]
Status=OK
Version=5.1.54
BuiltOn=2022-10-31 15:49
Git=5.1/06cc2793ebaaa50ddf3f3dee2251b397d7bdc09b
Encoding=UTF-8
EndpointIP=10.144.23.150
EndpointURL=http://mla-api-7cc99bbd96-8w9fs:8080
TimeZone=Europe/Paris
SystemDate=2023-02-21 06:51:39

Bonjour,

Le Job est bloqué, mais il faudrait trouver la stack du thread qui bloque tout le monde.
Ca sent le deadlock entre les threads qui sont lancés en parallèle.

  • Comment sont configurées vos Cron au niveau du “run as” ? vous pouvez créer des users techniques distincts pour avoir des runAs séparés = grants et ses objects isolés
    Sinon Simplicité utilise un droit interne/système qui peut potentiellement utiliser des ressources communes en concurrence d’accès.

  • Comment sont gérées les concurrences d’accès dans votre code ? utilisez vous des synchronized sur les ressource partagées entre threads ?

Le bon pattern est le suivant :

ObjectDB o = getGrant().getBatchObject("MyObject");
synchronized (o.getLock()) {
   // searhc/select ...
   // setFieldValue ...
   // validateAndSave ...
}

Mais pour aller plus vite et ne pas bloquer le thread, on peut faire en sorte que le getGrant() ne soit jamais le même grâce au “runAs” (ou carrément faire un new Grant / init).

Ensuite si vous avez placé un lock/synchronized sur un Grant (système ou technique) ou sur une méthode Java, c’est normal qu’ils attendent tous que le premier termine. Il faut essayer de le retrouver il doit être :

  • running = normal si des millions de trucs à faire ? ou anormal = parti en boucle
  • ou blocked = à priori anormal dead-lock sur une ressource en commun
2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.