Phil Christensen wrote:
On Aug 24, 2009, at 9:14 PM, Garret Heaton wrote:
On Mon, Aug 24, 2009 at 3:53 PM, Phil Christensen <phil@bubblehouse.org
wrote: I feel like I can think of any number of ways running the same series of queries twice would be a bad thing. I have some very important queries that are run inside a interaction because they do a series of operations in sequence. I can't use transactions because my tables are MyISAM.
Perhaps I'm jumping at shadows, but automatic re-querying just seems dangerous to me. Only the particular application knows when it's safe. This is very true, and I should have mentioned it in my reply. Re- running queries is only possible when you know your application can do it safely.
How would you solve the issue of a lost connection in your case?
Honestly, I have never actually solved it. I pretty much only write webapps these days, so when a ConnectionLost happens, it just propagates up the stack and displays an error to the user. Not ideal, by any means.
It's hard to apply in the general case, but I like the way Zope handles this using the per-request transaction machinery. Basically, if any processing generates a "retry"able exception, all transactions attached to the request are rolled back and the entire request re-submitted. This works really, really well for HTML<->SQL CRUD apps. I can't see how Twisted could support that currently, given the deferToThread == 1 transaction nature of adbapi.