Подготовленные транзакции с Postgres 8.4.3 на CentOS - PullRequest
7 голосов
/ 06 апреля 2010

Я установил для max_prepared_transactions значение 20 в локальном файле postgres.config, и все же транзакция завершается неудачно со следующей ошибкой (но только в Linux). Так как в Windows тот же код работает без проблем, я брожу, если это не проблема разрешения. Каково было бы решение? Спасибо Питер

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)

1 Ответ

6 голосов
/ 07 апреля 2010

Отредактировано, чтобы помочь другим, кто ищет понимание тех же симптомов

Ошибка указывает, что вы все еще превышаете свой предел max_prepared_transactions.

Убедитесь, что файл конфигурации, который вы редактировали, является тем, который используется, и что вы попросили postgresql перезагрузить его конфигурацию, чтобы забрать ваш отредактированный файл max_prepared_transactions.

Вы можете запросить базу данных, чтобы выяснить, что она использует для этого параметра с SQL:

SHOW max_prepared_transactions;

Исходный ответ следует (исходя из предположения, что max_prepared_transactions был установлен правильно):


Вы вообще используете setAutoCommit ()? Возможно, вы столкнулись с этой недавно найденной ошибкой:

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

В этом другом посте показаны некоторые небольшие повторяющиеся тесты подготовки соединений XA, на которые вы могли бы взглянуть, чтобы увидеть, делаете ли вы что-то подобное:

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

...