[Bug 1238559] Re: Exception causes next transaction to abort

Kasper Dupont 1238559 at bugs.launchpad.net
Wed Oct 30 18:08:02 UTC 2013


It turns out this bug can also cause data corruption.

If the exception causing the first transaction to abort is not database
related, then the failing transaction is committed. Committing a half
completed transaction on an exception is a sure way to violate data
integrity.

It appears the problem in both cases is that transactions are marked
dirty too late. It is possible to get an exception between the point
where the transaction really becomes dirty and the point where the db
layer actually marks the transaction dirty. In that case upon exiting
@commit_on_success, the transaction is neither committed nor rolled
back. Instead it is reused for the next @commit_on_success, and if that
commits successfully, the partial transaction is committed.

One way the data corruption can be triggered is through a combination of
bug 1238559 and bug 1100758.

I'm starting to wonder if this bug might actually be in the django db
layer rather than in psycopg2.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to psycopg2 in Ubuntu.
https://bugs.launchpad.net/bugs/1238559

Title:
  Exception causes next transaction to abort

Status in “psycopg2” package in Ubuntu:
  New

Bug description:
  I have a program, which roughly goes like this:

  try: do_something()
  except: record_error()

  Each of do_something and record_error use @commit_on_success to
  perform a database transaction. If the very first operation performed
  by do_something raises an IntegrityError, then the transaction in
  record_error is immediately aborted.

  The exception raised by do_something looked like this:
  IntegrityError: null value in column "name_of_recently_added_field" violates not-null constraint
  That was due to a misconfiguration, and was expected to happpen:

  The exception raised by record_error looked like this:
  django.db.utils.DatabaseError: current transaction is aborted, commands ignored until end of transaction block
  That is not supposed to happen, since the failed transaction was supposed to have been aborted, and a new should have been started.

  Both do_something and record_error experience the exception upon
  calling Model.objects.create(...) on two different models.

  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: python-psycopg2 2.4.5-1
  ProcVersionSignature: Ubuntu 3.2.0-54.82-generic 3.2.50
  Uname: Linux 3.2.0-54-generic i686
  NonfreeKernelModules: nvidia
  ApportVersion: 2.0.1-0ubuntu17.5
  Architecture: i386
  Date: Fri Oct 11 11:11:20 2013
  EcryptfsInUse: Yes
  InstallationMedia: Ubuntu 11.04 "Natty Narwhal" - Release i386 (20110427.1)
  MarkForUpload: True
  SourcePackage: psycopg2
  UpgradeStatus: Upgraded to precise on 2012-05-08 (520 days ago)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/psycopg2/+bug/1238559/+subscriptions



More information about the foundations-bugs mailing list