Pb sur usecase.orangeab.simplicite.io

Bonjour à tous,
Je rencontre un probléme depuis hier soir sur l’instance usecase.orangeab.simplicite.io

L’instance ne se charge plus et impossible d’y accéder aux BO pour corriger le bug. La dérniére manip que j’ai faite était de changer le Field Id dans la foreign key (Facture_Projet_Id) d’une relation entre l’objet “Facture” et “Projet”.

J’ai vu que le lien entre ces deux objet a disparu, surement à cause du Field id dans la relation que j’ai changé (il était vide d’ailleurs)

Pouvez vous nous aider svp à corriger ce bug ? je pense qu’il faut passer par la base de donner et corrigé ce lien entre ces deux BO, je n’ai pas encore la connaissance nécessaire sur les tables de simplicité qui gèrent les BO et les relations.

Je vous remercie d’avance

J’ai fait un arrêt/relance de cette instance et je ne vois rien de techniquement problématique au démarrage sur cette instance, cf. https://usecase.orangeab.simplicite.io/health

Je n’ai pas votre mot de passe designer donc je ne peux donc rien regarder de plus que le /health qui me dit que tout est OK.

Je surveille votre VM et je vois que cette instance consomme 100% du CPU:


Ca sent la boucle infinie ou dans le genre dans votre code…

Bonjour David,
Merci, par contre je n’ai toujours pas l’accés à un BO.*

Puis-je savoir svp quelles sont les tables qui gérent les lien entre les BO ? je vais essayé de régler ça sur la base de donnée.
Merci

Je ne sais pas ce que vous voulez dire par “BO” …

Je fais un arret/relance de cette instance pour ne pas pénaliser les autres utilisateurs de ce serveur.

Essayez de relire/corriger votre code avant de retomber dans ce qui provoque cette surconsomation de 100% du CPU

Je voulais dire je n’arrive toujours pas à ouvrir le business object “Facture”.

Je pense que c’est un lien entre deux business object que j’ai cassé en faisant des tests hier, mais comme je ne peux plus accéder au business object “Facture” je ne peux pas corriger ce probléme. avez vous des préconisation svp ?

Après l’arret relance on retombe à un niveau de CPU normal

Pour corriger votre pb n’ accédez pas à l’objet en question mais passez par Administration > Business object > etc. et rectifiez votre paramétrage si vous pensez que c’est ça votre pb.

C’est bon c’est réglé, j’ai pu accéder au lien et corriger le problème.

Je vous remercie

OK très bien, maintenant que la situation est débloquée, décrivez nous précisément le paramétrage qui a abouti à cette situation où l’instance est “partie en boucle” afin qu’on regarde si on peut faire quelque chose pour éviter à d’autres ce pb.

Oui si on arrive à isoler ce type de paramétrage ce serait bien.

Dans un cas général, il faudrait créer un mode rescue/sans echec au démarrage pour que simplicité ne charge que ses propres modules systèmes pour pouvoir corriger ce genre de paramétrage qui part en boucle infinie (à mon avis une FK qui pointe sur elle-même ou une boucle sans fin dans les hooks).

  • Une boucle infinie d’appel de méthode finit en stack-overflow donc ne bloque pas la JVM

  • Fut un temps ou pouvait faire un dump de la JVM avec tous ses threads + heap : plus facile pour détecter dans les stacks la méthode qui boucle.

  • Mais une boucle infinie dans une fonction (platform ou object hooks), là on peut rien faire, sauf créer un redémarrage en rescue => pas de hooks, que du system…

Un mode “recue” simple consiste à désactiver (via I/O) les responsabilités de designer sur les groupes métier, genre:

<?xml version="1.0" encoding="UTF-8"?>
<simplicite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.simplicite.fr/base" xsi:schemaLocation="http://www.simplicite.fr/base https://www.simplicite.io/resources/schemas/base.xsd">
<object>
	<name>Responsability</name>
	<action>update</action>
	<data>
		<rsp_login_id.usr_login>designer</rsp_login_id.usr_login>
		<rsp_group_id.grp_name>MY_GROUP</rsp_group_id.grp_name>
		<rsp_activ>0</rsp_activ>
	</data>
</object>
</simplicite>

Puis se connecter en designer

PS: un while (true); Java fait bien une boucle infinie qui consomme 100% du CPU sans tomber en stackoverflow pour autant…

Bref @Sofiane94 on voudrait avoir une description précise du paramétrage qui vous a mis dans ce pb.

C’est pas pour vous embêter ou vous faire perdre du temps, c’est pour essayer de comprendre le cas et, si possible, le “blinder” pour les autres qui pourraient éventuellement tomber dans le même cas.

Ce forum est un forum d’entraide, ça marche dans les deux sens . Merci d’avance

Pas de soucis, avec plaisir
en fait mon besoin était de définir le champ qui va servir de “picker” pour un objet liée, j’ai pas trouvé un moyen de le faire visiuellement sur la template, j’ai pensé à modifier dans le Lien entre mes 2 business object : j’ai donc modifié la foreign key et c’est ce qui a causé ce problème

Oui je parlais de hooks qui s’appelleraient en boucle (ex courant : un postSave qui refait un save sur la même instance), ça finit toujours par une exception de stack-overflow.

Mais un while(true) au postLoadGrant, là même un accès I/O à la Gandalf ne passera pas.

OK @Sofiane94, merci pour le retour, peut on voir la définition de l’attribut Facture_Projet_id ?

PS1: le nommage de vos attributs et de vos objets n’est pas très bon, pourquoi n’utilisez vous pas les préfixes de modules et d’objets qui proposent des nommages plus rigoureux/uniques ?
image

PS2: le template editor permet la création de relations :
image

Merci David pour les détails, effectivement je me suis rendu compte trop târd.
En tout cas c’est juste un use case justement le but est de monter en compétence sur simplicité.

OK mais, cf. ma réponse précédente, je veux bien les infos sur votre attribut Facture_Projet_id pour investiguer les causes de votre pb

Voilà la capture du champ Facture_Projet_id

Avec les éléments fournis je ne vois pas trop pourquoi ce que vous avez paramétré aurait pu provoquer un pb comme celui que vous avez eu (100% de CPU).

Vous aviez aussi paramétré l’object field de la FK ? Mais bon si vous ne l’aviez pas fait, au pire vous auriez eu une simple erreur de requête SQL, pas une instance qui part en boucle…