yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #68384
[Bug 1722404] [NEW] Database transactions can fail with "TypeError: Can't upgrade a READER transaction to a WRITER mid-transaction" because of scatter_gather_cells
Public bug reported:
I found this while working on a change to improve the usage of the
CellDatabases test fixture by defaulting to the 'cell0' database instead
of the 'cell1' database.
In the set_target_cell method, we synchronize access to the cached cell
database transaction context manager objects to prevent more than one
thread from using a cell's transaction context manager at the same
time.
In scatter_gather_cells, we're calling target_cell in such a way that
the lock is acquired and released BEFORE the green thread actually
accesses the database in the spawned function. So multiple threads can
access a cell's database transaction context manager and it's possible
for a database transaction to fail with the error:
TypeError: Can't upgrade a READER transaction to a WRITER
mid-transaction
because the in-scope transaction context might be in the middle of a
read when a concurrent green thread tries to do a write.
I saw this happen in the test:
nova.tests.unit.compute.test_compute.DisabledInstanceTypesTestCase.test_can_resize_to_visible_instance_type
where a parallel read of instances during a quota check accessed the
cell's database transaction context manager at the same time as an
instance.save() in the compute/api, causing the instance.save() to fail
with "TypeError: Can't upgrade a READER transaction to a WRITER mid-
transaction."
** Affects: nova
Importance: Undecided
Assignee: melanie witt (melwitt)
Status: In Progress
** Tags: cells
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1722404
Title:
Database transactions can fail with "TypeError: Can't upgrade a READER
transaction to a WRITER mid-transaction" because of
scatter_gather_cells
Status in OpenStack Compute (nova):
In Progress
Bug description:
I found this while working on a change to improve the usage of the
CellDatabases test fixture by defaulting to the 'cell0' database
instead of the 'cell1' database.
In the set_target_cell method, we synchronize access to the cached cell
database transaction context manager objects to prevent more than one
thread from using a cell's transaction context manager at the same
time.
In scatter_gather_cells, we're calling target_cell in such a way that
the lock is acquired and released BEFORE the green thread actually
accesses the database in the spawned function. So multiple threads can
access a cell's database transaction context manager and it's possible
for a database transaction to fail with the error:
TypeError: Can't upgrade a READER transaction to a WRITER
mid-transaction
because the in-scope transaction context might be in the middle of a
read when a concurrent green thread tries to do a write.
I saw this happen in the test:
nova.tests.unit.compute.test_compute.DisabledInstanceTypesTestCase.test_can_resize_to_visible_instance_type
where a parallel read of instances during a quota check accessed the
cell's database transaction context manager at the same time as an
instance.save() in the compute/api, causing the instance.save() to
fail with "TypeError: Can't upgrade a READER transaction to a WRITER
mid-transaction."
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1722404/+subscriptions
Follow ups