Clarification: Originally, when we tried SELECT FOR UPDATE and isolation_level SERIALIZABLE unsuccessfully, we were using pyramid_tm 0.7. As soon as we upgraded to 0.8, it all started working correctly.
On Monday, December 8, 2014 6:15:26 PM UTC-6, HP3 wrote: > > Thank you all, > > It turned out that combining SELECT FOR UPDATE and isolation_level > SERIALIZABLE and pyramid_tm 0.8 produced the expected result. IOW: > everything is now working correctly: > > The only change to history_meta.py we ended up doing was the following: > > ``` > > #attr['version'] = obj.version > > session.query(obj.__class__).with_for_update().filter(obj.__class__.id > == obj.id).one() #S1 > > version_number = > session.query(obj.__class__.version).with_for_update().filter(obj.__class__.id > > == obj.id).one() #2 > > attr['version'] = version_number > > ``` > > Though we haven't tested extensively, we suspect that between 'SELECT FOR > UPDATE' S1 and S2, only S1 is needed. > > Thanks again. > > On Thursday, December 4, 2014 8:55:59 PM UTC-6, kirk holland wrote: >> >> Hi, >> >> We were having a similar problem with history_meta, so we created >> history_meta_date (.py file attached). In our version, we use timestamps >> rather than sequence numbers to track history versions and don't need to >> worry about duplicate key problems. The "version_date" timestamps still >> provide sortability on version, but are infinitely less likely to have the >> same value issued to separate processes. >> >> Disclaimer: The attached file was developed in a hurry to solve an urgent >> problem, it has performed well for us, but probably hasn't gone through the >> testing rigours that this group might expect. Feel free to use/adapt it as >> necessary and if you have the time/inclination, post a more rigorous >> version for consideration as a formal recipe. >> >> Cheers >> >> ---------- Forwarded message ---------- >> From: HP3 <henddher...@gmail.com> >> Date: 5 December 2014 at 10:36 >> Subject: [sqlalchemy] history_meta.py IntegrityError: (IntegrityError) >> duplicate key value violates unique constraint "p2docs_history_pkey" >> To: sqlal...@googlegroups.com >> >> >> Hello all, >> >> We are facing a problem when using history_meta.py recipe. >> >> It seems like two concurrent transactions read the same (id,version) >> tuple at "#1" and then each one tries to insert a new row into the >> pbases_history table with the same pk (id, version) combination (see #2) >> By removing #2, the issue goes away but of course, there is no history >> kept anywhere. >> >> >> -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.