[Zope-DB] Problems with transaction management and many database
adapters
Marco Bizzarri
m.bizzarri at icube.it
Tue Feb 3 10:29:44 EST 2004
M.-A. Lemburg wrote:
> Marco Bizzarri wrote:
>
>> Hi all.
>>
>> I think we have found some problem in the management of the
>> transactions with databases. The problem show both with zpsycopg
>> (1.1.10), zpopy (2.0.8) and zmysqlda (2.0.8)
>>
>> You can test the problem importing the attached zexp. It has a
>> psycopg connection to a db (named PAFlow), and a SQL Method which
>> queries a table called entita. The problem is not in the nature of
>> the sql, but how the sql method is called:
>>
>> we have a page template (index_html) which calls a dtml
>> (standard_html_header) which calls a page template (menu_html) which
>> calls the SQL method.
>>
>> Look at the log of your postgres/mysql db: there are two
>> transactions: the first one correctly finishes, the second one
>> remains open and idle. If you visit again the page, there is an abort
>> in your log, a new transaction which closes correctly, and another
>> transaction which remains open.
>>
>> Any suggestion about this problem?
>
>
> If "abort" means that the transaction in the database is rolled back,
> then I don't see any problem: transactions are usually created
> implicitly, ie. if you commit or rollback a transaction, the database
> automatically starts a new one which, of course, remains open until
> the next request comes in.
>
> Now, some DAs may continue using the already opened transactions
> or start a new one by forcing a rollback or a reconnect. Others,
> like the mxODBC Zope DA, may not because, it's really unnecessary.
>
First of all, thanks for your reply. After a few research, we discover
the problem caused by our example. As you may remember, there was a page
template, using a dtml (standard_html_header), calling a PT
(menu_headers), calling a SQLMethod.
As you can see running the example and getting a look at the logs,
viewing the PT index_html causes two transactions to be opened: the
first one ends with a commit, the second one remains open (no commit or
rollback), which is strange since every zope transaction
(request/respose) should be the boundary also of a database transaction
(either begin/commit or begin/rollback).
The problem is in the paflow.js javascript file, which is in the
standard_html_header. The browser, behind the scene, after getting the
index_html, tries to get the paflow.js. However, since this is not
present, it raises a resource not found error, and sends back to the
browser an error page (which is not shown to the user, since this error
is silently captured by the browser). The error produces a
standard_error_message page, which, by default, includes the
standard_html_header, which calls the menu_html which calls the SQL
Method (oh gawd!). Here is either the feature or the strange behaviour:
this is the second transaction which is not closed (no commit/rollback
at the end). Is this a known behaviour? Or is there something we are
missing?
Regards
Marco
More information about the Zope-DB
mailing list