2010-04-06 23 views
7

Ustawiłem "max_prepared_transactions" na 20 w lokalnym pliku postgres.config, a jednak transakcja kończy się niepowodzeniem z następującym śladem błędu (ale tylko w systemie Linux). Ponieważ w Windows ten sam kod działa bezproblemowo, wędruję, jeśli to nie jest kwestia pozwolenia. Jakie byłoby rozwiązanie? Dzięki PeterPrzygotowane transakcje z Postgresem 8.4.3 na CentOS

 
372300 [Atomikos:7] WARN atomikos - XA resource 'XADBMS': rollback for XID '3137332E3230332E3132362E3139302E746D30303030313030303037:3137332E3230332E3132362E3139302E746D31' raised -3: the XA resource detected an internal error 
org.postgresql.xa.PGXAException: Error rolling back prepared transaction 
     at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:357) 
     at com.atomikos.datasource.xa.XAResourceTransaction.rollback(XAResourceTransaction.java:873) 
     at com.atomikos.icatch.imp.RollbackMessage.send(RollbackMessage.java:90) 
     at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:86) 
     at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:62) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676) 
     at java.lang.Thread.run(Thread.java:595) 
Caused by: org.postgresql.util.PSQLException: ERROR: prepared transaction with identifier "1096044365_MTczLjIwMy4xMjYuMTkwLnRtMDAwMDEwMDAwNw==_MTczLjIwMy4xMjYuMTkwLnRtMQ==" does not exist 
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) 
     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) 
     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299) 
     at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:347) 
+0

Sprawdziłem również ustawienia w/proc/sys/kernel. Wszystkie przekraczają limity opisane w podręczniku PostgreSQL "Zużycie zasobów". –

+0

Czy możesz uruchomić polecenie powodujące problem z konsoli psql w oknie Linuxa, aby usunąć warstwę Javy z ekranu, aby sprawdzić, czy działa? – Kuberchaun

Odpowiedz

6

Edited by pomóc innym, którzy szukają wglądu na tych samych objawów

Błąd wskazuje, że nadal jesteś przekroczenie limitu max_prepared_transactions.

Upewnij się, że plik konfiguracyjny, który edytowałeś, jest tym, który jest używany, i że powiedziałeś postgresql, aby ponownie załadował swoją konfigurację, aby odebrać edytowane max_prepared_transactions.

Można zapytanie do bazy danych, aby dowiedzieć się, co to jest użycie do tego ustawienia z SQL:

SHOW max_prepared_transactions; 

Original Odpowiedź Follows (w oparciu o założenie, że max_prepared_transactions został prawidłowo ustawiony):


Czy w ogóle używasz metody setAutoCommit()? Być może wystąpił ten niedawno znaleziony błąd:

http://archives.postgresql.org/pgsql-jdbc/2010-03/msg00013.php

Ten drugi post pokazuje kilka małych powtarzalne testy przygotowania połączenia XA, które można przyjrzeć, aby zobaczyć czy robisz coś podobnego:

http://archives.postgresql.org/pgsql-jdbc/2009-01/msg00025.php

+2

Dzięki za powtórkę. Naprawiłem problem. Chodzi o to, że niedawno dokonałem aktualizacji z PostgreSQL 8.1 do 8.4.3, aby obsługiwać transakcje rozproszone. Podczas tego procesu pozostawiłem "błąd" w /etc/init.d/postgresql, ponieważ aplikacja wciąż używała konfiguracji ze starej wersji na starcie. W starej konfiguracji 'max_prepared_transactions = 0' oznacza brak xtransakcji z postgresql –