Re: Rollback on close [Was: Fwd: [DB-SIG] conn.close() idempotence]

Поиск
Список
Период
Сортировка
От Daniele Varrazzo
Тема Re: Rollback on close [Was: Fwd: [DB-SIG] conn.close() idempotence]
Дата
Msg-id CA+mi_8Za4f0S3HpKDfATkeRVmXSaGdEf9LaWjRAqDsSqkKL7hg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Rollback on close [Was: Fwd: [DB-SIG] conn.close() idempotence]  (Marko Kreen <markokr@gmail.com>)
Ответы Re: Rollback on close [Was: Fwd: [DB-SIG] conn.close() idempotence]  (Marko Kreen <markokr@gmail.com>)
Список psycopg
On Wed, Oct 19, 2011 at 1:12 PM, Marko Kreen <markokr@gmail.com> wrote:

> First, "in transaction" is not enough, it must check if connections
> is "idle in transaction" and no query has been sent.

Question: is for the middleware different if a connection is idle in
transaction with or without a query has been sent to the database?
However it's easy to check the "idle in transaction" state in the
connection; and actually, because it's us who send the commands, we
could also detect about any sent query.

Your question also makes me think about what should happen if a
close() is issued in a separate thread while a query is running... but
this should be just handled by the serialization code in the
transaction, i.e. the close should wait until the query has finished.

> Secondly, I think there are two types of code to consider:
>
> - Sloppy code - eg read-only web page that does
>
>  db = connect()
>  curs.execute('select ...')
>  curs.execute('select ...')
>  db.close()
>
> - Robust code, where in-transaction-close means
>  problem, and it wants to get rid of connection
>  without touching network.
>
> Although I understand the urge to optimize for first case,
> you take away the possibility of robust code to behave well.

What is an example of situation where a close in transaction without
rollback is a better option than rolling back too?

> So if you really want to restore the rollback-on-close
> behaviour, at least make it configurable.

I'm more for making a decision instead of leaving too many things to
be configured, so if we deem that closing without explicit rollback is
still a better solution I'm fine with leaving it this way and suggest
users to write less sloppy code. I.E. I would *not* like to add an
option such as conn.close(rollback=False).

> OTOH, as the lightweight .close() is only problematic
> with middleware, it seems to hint that this idle-in-tx
> check should be moved into middleware, and psycopg
> should not need to worry about it..

Well, you know the middleware much better than me: I was assuming that
if pgpool discards connection returned idle in transaction to the pool
you have very strong reasons :) I just want to optimize the
communication between the driver and the middleware: what do you think
the "protocol" between psycopg and pgpool should be?

-- Daniele

В списке psycopg по дате отправления:

Предыдущее
От: Marko Kreen
Дата:
Сообщение: Re: Rollback on close [Was: Fwd: [DB-SIG] conn.close() idempotence]
Следующее
От: Marko Kreen
Дата:
Сообщение: Re: Rollback on close [Was: Fwd: [DB-SIG] conn.close() idempotence]