Impossible de se connecter aux instances PostgreSql

Impossible de se connecter aux instances PostgreSql
0
Tags: #<Tag:0x00007fed403f7458>

Bonjour,
Il nous est impossible de se connecter à nos 4 instances PostgreSql :

https://conjonctiondev.e3m.simplicite.io/ui/
https://conjonctiondevabed.e3m.simplicite.io/ui/
https://conjonctiondevpaul.e3m.simplicite.io/ui/
https://conjonctiondevnat.e3m.simplicite.io/ui/

On obtient l’erreur suivante :

2020-01-29 09_34_27-Erreur

Dans simplicite.log :

2020-01-29 09:26:11,728 INFO  [com.simplicite.util.Grant] SIMPLICITE|http://e3m.simplicite.io:10118||ICORED0001|public|com.simplicite.util.Grant|init||Info : public connected, session ID: FF54430AF96D3ECF324DECF7BC64AB7D, timeout: 5 min , user agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
2020-01-29 09:26:13,848 INFO  [com.simplicite.util.tools.SQLTool] SIMPLICITE|http://e3m.simplicite.io:10118||INFO|system|com.simplicite.util.tools.SQLTool|rebuildSequence||Evénement: Rebuild PostgreSQL sequence: table m_session
2020-01-29 09:26:13,854 INFO  [com.simplicite.util.tools.SQLTool] SIMPLICITE|http://e3m.simplicite.io:10118||INFO|system|com.simplicite.util.tools.SQLTool|rebuildSequence||Evénement: m_session_row_id_seq has been created.
2020-01-29 09:26:13,857 INFO  [com.simplicite.util.tools.SQLTool] SIMPLICITE|http://e3m.simplicite.io:10118||INFO|system|com.simplicite.util.tools.SQLTool|rebuildSequence||Evénement: Rebuild PostgreSQL sequence: table m_session
2020-01-29 09:26:13,860 INFO  [com.simplicite.util.tools.SQLTool] SIMPLICITE|http://e3m.simplicite.io:10118||INFO|system|com.simplicite.util.tools.SQLTool|rebuildSequence||Evénement: m_session_row_id_seq has been created.
... (indifiniment)

Il y a aussi cette erreur dans la log :

2020-01-29 09:15:00,005 ERROR [com.simplicite.util.engine.GrantManager] SIMPLICITE|http://e3m.simplicite.io:10118||ECOREDB001|system|com.simplicite.util.engine.GrantManager|query||Erreur SQL requête: select sys_value from m_system where sys_code='CRON_LOCK'
org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
	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:843)
	at com.simplicite.util.engine.DBAccess.query(DBAccess.java:680)
	at com.simplicite.util.engine.DBAccess.simpleQuery(DBAccess.java:1026)
	at com.simplicite.util.engine.DBAccess.simpleQuery(DBAccess.java:1012)
	at com.simplicite.util.engine.DBAccess.getSystemParam(DBAccess.java:404)
	at com.simplicite.util.GrantDirect.getSystemParam(GrantDirect.java:324)
	at com.simplicite.util.Grant.getSystemParam(Grant.java:1121)
	at com.simplicite.util.engine.CronManager.lock(CronManager.java:349)
	at com.simplicite.util.engine.CronManager.processTriggers(CronManager.java:241)
	at com.simplicite.util.engine.CronManager$CronDaemon.run(CronManager.java:76)

La seule instance qui marche est celle qui est en hsqldb.

Merci d’avance pour votre aide.
Abed.

J’ai fait un restart du service PostgreSQL suivit d’un stop+start des instances en question.
Dites moi si ça resoud le pb…

Il y a un verrou dans votre base qui fait que rien ne peut commiter ou être lu (commited read).

Sur la boucle sur m_session :
à la création d’une session, il essaye de créer une ligne dans m_session, en cas d’erreur de création Simplicité recrée la séquence (auto-fix si la séquence est en décalage avec la table, ça permet de la recaler avec le max+1).

J’arrive maintenant à me connecter à l’instance :
https://conjonctiondev.e3m.simplicite.io/ui

Mais pas aux 3 autres (même erreur).

Elles sont en cours d’upgrade. Un fix d’hier à causé ce pb sur PostgreSQL…

@francois visiblement le pb est lié à l’usage de Grant.getNextIdForColumn() dans UserSession.

Il y avait en effet un bug dans Grant, car la méthode Grant.getNextIdForColumn n’appelait pas le getNextIdForColumn du GrantManager mais le getNextValueForColumnWhere (qui, lui, n’utilise pas les séquences).

La correction de ce bug a induit ce pb bouclage sur PostgreSQL (pas de pb sur HSQLDB ou MySQL qui n’utilisent pas de séquences).

En remplaçant cet appel dans UserSession par un appel à Grant.getNextValueForColumnWhere (i.e. en revenant à ce que ça faisait - à tort - avant) ça résout le pb mais il faudrait comprendre pourquoi getNextIdForColumn pose pb dans ce cas précis.

J’ai maintenant accès aux 3 instances sur 4.

On dirait que la https://conjonctiondevabed.e3m.simplicite.io/ui est bloquée sur l’upgrade qui tourne depuis plus de 30 min.

Je relance l’upgrade sur “conjonctiondevabed” merci de ne pas essayer de s’y connecter avant la fin du processus d’upgrade

PostgreSQL est plein de contradiction et pose de gros problèmes en général dès qu’une transaction échoue et ne libère pas son verrou = bloque tout le monde. Les autres bases ne font pas ça.

Sur l’objet Session, il n’a rien de particulier et utilise une séquence pour numéroter les sessions dans l’ordre des créations.

Le pb remonté dans les logs c’est au moment du create et sur la séquence liée au “row_id” de la table m_session, donc strictement rien à voir avec le max+1 sur “ses_index”.

Pouvez vous retester ?

Merci @david
je confirme que tous les accès sont rétablis.

@david,

Je me permets juste de signaler que lorsque je me connecte, il y a ce message d’erreur dans la log (sans impact sur la connexion) :

2020-01-29 17:17:52,758 INFO [com.simplicite.util.UserSession] LOGON|B5F10136AC9FEEDC89E62A4D7800277E|designer|1|Home|WEB_USER,SOCIAL_ADMIN,GRANT_ADMIN,USER_ADMIN,CHAT_ADMIN,SOCIAL_USER,IMMO_ADMIN,DESIGNER,APP_ADMIN,OPERATOR,MD_ADMIN,USER_PASSWORD,ALM_TESTER,WEB_ADMIN,ADMIN,ALM_ADMIN,MODELER,CHAT_USER|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
2020-01-29 17:17:52,758 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://e3m.simplicite.io:10118||ECORED0001|system|com.simplicite.util.ObjectDirect|error||Erreur Session
    org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "m_session_pkey"
     Detail: Key (row_id)=(43) already exists.
     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.executeUpdate(PgPreparedStatement.java:124)
     at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
     at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
     at com.simplicite.util.engine.DBAccess.update(DBAccess.java:1728)
     at com.simplicite.util.engine.ObjectManager.create(ObjectManager.java:1844)
     at com.simplicite.util.ObjectDirect.create(ObjectDirect.java:364)
     at com.simplicite.util.ObjectDB.create(ObjectDB.java:1051)
     at com.simplicite.util.UserSession.logon(UserSession.java:57)
     at com.simplicite.util.Grant.startWorking(Grant.java:619)
     at com.simplicite.util.engine.GrantManager.loadGrant(GrantManager.java:863)
     at com.simplicite.util.GrantDirect.init(GrantDirect.java:36)
     at com.simplicite.util.Grant.init(Grant.java:274)
     at com.simplicite.util.Grant.init(Grant.java:303)
     at com.simplicite.util.Grant.init(Grant.java:353)
     at com.simplicite.webapp.tools.ServletTool.getGrant(ServletTool.java:1712)
     at com.simplicite.webapp.filters.AuthMethodFilter.getGrant(AuthMethodFilter.java:67)
     at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:115)
     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 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:541)
     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:1598)
     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)
2020-01-29 17:17:51,200 INFO [com.simplicite.util.Grant] SIMPLICITE|http://e3m.simplicite.io:10118||ICORED0001|public|com.simplicite.util.Grant|init||Info : public connected, session ID: B5F10136AC9FEEDC89E62A4D7800277E, timeout: 5 min , user agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
2020-01-29 17:17:51,141 INFO [com.simplicite.util.UserSession] LOGOUT|AFDA836A2075BF872B6A2725C5CED0FC|designer|44|0:00:44

L’instance est :
https://conjonctiondev.e3m.simplicite.io/ui

C’est sans doute un effet indirect du pb de ce matin (pb de séquence sur cet objet de suivi des séquences). Il faudrait aller dans Operation > Session history et supprimer les records existants

Merci. Il n’y a plus de message d’erreur.

Après avoir fait le ménage dans les historiques de session ? ou sans le faire ?

Après avoir purgé tous les historiques

OK merci
Je passerai l’info en interne