Versions en parallèle

Bonjour,

NB: Version=4.0.P23
BuiltOn=2019-11-29 13:02 (revision a22b592221c1d34f743118a95182ad313cfc3000)

Une version (102) est en parallèle avec la nouvelle version (109). A quoi est du ceci? Y-a-t-il un moyen de l’arrêter?

En effet, j’essaie de lancer un adapter (sur l’environnement de la prod), et dès le lancement, je vois un nombre infini de message d’erreur NullPointerException:

2019-12-19 14:17:05,182 ERROR [com.simplicite.util.IntegrationDirect] SIMPLICITE|http://678190866b13:8080||ECORED0001|system|com.simplicite.util.IntegrationDirect|importADP||Error Problem in XML import thru adapter SitesRaftAD
    java.lang.NullPointerException
     at com.simplicite.util.GrantCore.hasResponsibility(GrantCore.java:1058)
     at com.simplicite.util.Grant.getAdmin(Grant.java:393)
     at com.simplicite.util.Grant.getAdmin(Grant.java:370)
     at com.simplicite.util.engine.Interface.importData(Interface.java:421)
     at com.simplicite.util.engine.Interface.importData(Interface.java:465)
     at com.simplicite.util.engine.Interface.importADP(Interface.java:390)
     at com.simplicite.util.IntegrationDirect.importADP(IntegrationDirect.java:190)
     at com.simplicite.util.Integration.importADP(Integration.java:354)
     at com.simplicite.webapp.servlets.AbstractIOServlet.doPost(AbstractIOServlet.java:331)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
     at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:187)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.base/java.lang.Thread.run(Thread.java:830)
2019-12-19 14:17:05,181 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://678190866b13:8080||ECORED0001|system|com.simplicite.util.ObjectDirect|select||Error XMLSupervisor
    java.lang.NullPointerException
2019-12-19 14:17:05,180 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://678190866b13:8080||ECORED0001|system|com.simplicite.util.ObjectDirect|save||Error SitesRealEstateAssetIdentifierValue
    java.lang.NullPointerException
2019-12-19 14:17:05,180 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://678190866b13:8080||ECORED0001|system|com.simplicite.util.ObjectDirect|validate||Error SitesRealEstateAssetIdentifierValue
    java.lang.NullPointerException
....

Pour info, ce même adapter avec exactement le même code s’exécutait il y a deux jours sans aucun message d’erreur. Et pour être sur que le problème ne vient pas du code, je l’ai exécuté sur un autre environnement (la recette) et il s’est terminé sans aucune erreur.
Ce problème est-il lié à cette version qui ne s’arrête jamais?
Si non, comment peut on expliquer ces messages d’erreur?

En vous remerciant d’avance

Je ne comprend pas du tout de quoi vous parlez ici, quelle est la signification du terme “version” ici ?

une version: après un redéploiement, une version se crée avec un numéro incrémenté. Donc, une version = un redéploiement.

Je viens de limiter le nombre de ligne du fichier que l’adapter traite, et je vois ces erreurs apparaitre :

2019-12-19 16:22:59,895 ERROR [com.simplicite.util.engine.ObjectManager] SIMPLICITE|http://187607fdec5e:8080||ECOREDB001|system|com.simplicite.util.engine.ObjectManager|query||Error SQL query: jdbc/simplicite: select null, null, t.usr_login, null, t.usr_last_name, t.usr_email, t.usr_image_id, null, null, null, null, null, t.pst_object, null, null, null, null from social_post t where (t.pst_object ilike ?) and ((t.pst_user_id = 2 or t.pst_followersonly = '0' or exists(select 1 from social_follow x where x.flw_follower_id = 2 and x.flw_followed_id = t.pst_user_id and x.flw_status = 'A'))) order by t.usr_login asc
    org.postgresql.util.PSQLException: ERROR: column t.usr_login does not exist
     Position: 20
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2505)
     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2241)
     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:310)
     at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:447)
     at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:368)
     at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:158)
     at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:108)
     at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:122)
     at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:122)
     at com.simplicite.util.engine.DBAccess.query(DBAccess.java:695)
     at com.simplicite.util.engine.ObjectManager.search(ObjectManager.java:406)
     at com.simplicite.util.engine.ObjectManager.search(ObjectManager.java:339)
     at com.simplicite.util.ObjectDirect.search(ObjectDirect.java:282)
     at com.simplicite.util.ObjectDB.search(ObjectDB.java:689)
     at com.simplicite.util.ObjectDB.search(ObjectDB.java:666)
     at com.simplicite.util.Grant.updateMetaObjects(Grant.java:2382)
     at com.simplicite.util.engine.ObjectManager.update(ObjectManager.java:2381)
     at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2727)
     at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:442)
     at com.simplicite.util.ObjectDB.save(ObjectDB.java:948)
     at com.simplicite.util.ObjectDB.save(ObjectDB.java:935)
     at com.simplicite.util.tools.IndexSQLTool.indexFields(IndexSQLTool.java:206)
     at com.simplicite.util.tools.IndexSQLTool.indexation(IndexSQLTool.java:255)
     at com.simplicite.util.engine.ObjectManager.indexObjectSync(ObjectManager.java:4087)
     at com.simplicite.util.engine.ObjectManager$1.run(ObjectManager.java:4117)
     at java.base/java.lang.Thread.run(Thread.java:830)


     2019-12-19 16:22:59,307 ERROR [com.simplicite.util.IntegrationDirect] SIMPLICITE|http://187607fdec5e:8080||ECORED0001|system|com.simplicite.util.IntegrationDirect|importADP||Error Problem in XML import thru adapter SitesRaftAD
    java.lang.NullPointerException
     at com.simplicite.util.GrantCore.hasResponsibility(GrantCore.java:1058)
     at com.simplicite.util.Grant.getAdmin(Grant.java:393)
     at com.simplicite.util.Grant.getAdmin(Grant.java:370)
     at com.simplicite.util.engine.Interface.importData(Interface.java:421)
     at com.simplicite.util.engine.Interface.importData(Interface.java:465)
     at com.simplicite.util.engine.Interface.importADP(Interface.java:390)
     at com.simplicite.util.IntegrationDirect.importADP(IntegrationDirect.java:190)
     at com.simplicite.util.Integration.importADP(Integration.java:354)
     at com.simplicite.webapp.servlets.AbstractIOServlet.doPost(AbstractIOServlet.java:331)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
     at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:187)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.base/java.lang.Thread.run(Thread.java:830)
2019-12-19 16:22:59,306 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://187607fdec5e:8080||ECORED0001|system|com.simplicite.util.ObjectDirect|select||Error XMLSupervisor
    java.lang.NullPointerException
     at com.simplicite.util.GrantCore.accessObject(GrantCore.java:1478)
     at com.simplicite.util.engine.ObjectManager.select(ObjectManager.java:1102)
     at com.simplicite.util.ObjectDirect.select(ObjectDirect.java:342)
     at com.simplicite.util.ObjectDB.select(ObjectDB.java:748)
     at com.simplicite.util.ObjectDB.select(ObjectDB.java:785)
     at com.simplicite.objects.System.XMLSupervisor.storeAdapterResult(XMLSupervisor.java:94)
     at com.simplicite.util.engine.Interface.importData(Interface.java:455)
     at com.simplicite.util.engine.Interface.importADP(Interface.java:390)
     at com.simplicite.util.IntegrationDirect.importADP(IntegrationDirect.java:190)
     at com.simplicite.util.Integration.importADP(Integration.java:354)
     at com.simplicite.webapp.servlets.AbstractIOServlet.doPost(AbstractIOServlet.java:331)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
     at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:187)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.base/java.lang.Thread.run(Thread.java:830)

Bonjour David,
le post initial n’est en effet pas clair. Je vais essayer de reformuler.

  1. Un instance Simplicité s’exécute à l’instant ‘t’ dans un conteneur en déroulant un chargement de données (adapter).
  2. L’infrastructure hébergeant ce conteneur a planté (problème de FS full, pour la petite histoire) et a provoqué le redéploiement (ou le déplacement plutôt) de cette instance dans un nouvel environnement d’exécution.
  3. Cette instance “déplacée” semble continuer à exécuter le code de l’adapter alors que suite au déplacement, l’instance en question ne semble plus avoir les ressources nécessaires à son bon fonctionnement (cache?, connexion à la BD?, etc.) et produit les logs remontées par Marwa.

Nous ne savons rien des mécanismes sous-jacents du “déplacement” de l’instance -> je soupçonne qu’il s’agit d’une sorte de suspend/resume qui ne gèrerait pas bien la connectivité à la BD.

Néanmoins, quelles seraient (a) les marges de manœuvre internes au runtime de détecter que les conditions nécessaire à sa bonne exécution ne sont plus réunies (connectivité avec la BD par exemple) pour ne pas rester sur une boucle d’erreur apparemment sans fin ou (b) les bonnes pratiques à éventuellement appliquer dans nos adapters pour détecter cette situation et mettre fin au code? (a et b peuvent être complémentaires).

J’imagine que pour (a), le runtime gère déjà le reset du cache et de la connexion à la BD mais semble ne pas interrompre un code d’adapter qui génère des erreurs de sélection en base sans que nous puissions en voir la fin (ECORED0001|system|com.simplicite.util.ObjectDirect|select||Error XMLSupervisor java.lang.NullPointerException)

ps: l’erreur portant sur le social_post est je pense liée à autre chose (probablement un bug de la P23 corrigé depuis notre dernier build)…

Merci encore pour ton expertise et ton support.
Bruno

Pour ce qui est des pbs de déploiements sur vos environnements ne peux pas vous aider.

Si la connexion à la base de données est KO au démarrage de la webapp, le déploiement de celle-ci échoue.

Si la connexion tombe ou est erratique à un moment en cours d’exécution, ça aboutira dans des résultats forcément imprévisibles. Je ne vois pas trop ce qu’on peut faire pour être sûr de retrouver un état de fonctionnement nominal à part un arrêt/relance ou à minima un clear cache complet.

Pour ce qui est de votre adapter vous pouvez toujours commencer par faire un test de connectivité (ex: avec un simple checkTable, cf. https://docs.simplicite.io/4.0/javadoc/com/simplicite/util/Grant.html#checkTable(java.lang.String)) pour ne pas démarrer si la connexion est HS mais ça ne résoudra pas le pb si la connexion tombe en cours d’exécution. Peut être pouvez vous faire le checkTable à chaque itération et arrêter le traitement en cas d’erreur etc. Mais bon toute les contre-mesures applicatives pour essayer de gérer des déconnexions aléatoires à la base de données seront forcément d’une efficacité toute relative…

S’agissant des erreurs du type:

On en constate pendant le processus de démarrage dans certain cas d’autoupgrades. Normalement le clearcache final de l’autoupgrade règle le pb. Ce genre de traces apparaissent donc uniquement pendant le cycle de démarrage (elles sont “aléatoires” et portent en général soit sur User, soit sur les post sociaux, soit sur les indexes), nous sommes en train de regarder ce pb de plus près mais il n’a pas d’impact au delà du cycle de démarrage.

Bonjour David,
Nous avons procédé à de nouveaux tests de chargement hier soir avec Marwa et je pense que les erreurs validate/save seraient plutôt liées aux contraintes d’intégrité forcées au niveau de postgresql (dont la pertinence a déjà été débattue). En effet, lorsque le chargement plante, nous suivons une procédure de reset des données chargées pour nous assurer de relancer le traitement sur une base la plus saine possible. Hors, l’instance qui a été déplacée a repris un chargement (resume?) après que nous ayons vide les tables, alors elle peut produire des instructions d’insert comportant des clés techniques mises en cache violant les contraintes d’intégrité car la base a été nettoyée par ailleurs. Les erreurs générées auraient donc révélé deux problèmes : (1) une instance hors de contrôle et (2) le ménage incomplet dans les contraintes positionnées sur le modèle physique… l’instance hors de contrôle a été tuée. Nous allons vérifier du côté des contraintes.
Bruno

OK

Pour information nous avons résolu (et backporté en P24) certains pbs d’asynchronisme lors de l’autoupgrade qui était la cause de messages étranges et “aléatoires” liés à l’indexation et/ou aux post sociaux.

C’était le dernier sujet bloquant pour le passage en release de la P24. Elle va donc passer de “beta” (P24b) à “release candidate” (P24c) pour release officielle début Janvier.