]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commit
Avoid race condition at snapshot deletion stage
authorAndrey Pavlov <andrey-mp@yandex.ru>
Fri, 19 Jun 2015 15:03:19 +0000 (18:03 +0300)
committerAndrey Pavlov <andrey-mp@yandex.ru>
Thu, 2 Jul 2015 12:50:01 +0000 (15:50 +0300)
commitc933c08c89c0006a17cb84ef844c3d0251317c11
tree8ee74e28df4982fce90a61fdc8585d905f620f6d
parentbff548c6902742d3fc7c43996816fffe76b408ca
Avoid race condition at snapshot deletion stage

Snapshot`s list method can raise SnapshotNotFound exception.
It happens because of race condition:
1. List method gets all snapshots from DB.
2. At the same time one of the snapshots is being deleted from DB.
3. List method gets snapshot metadata from DB and checks
   that snapshot exists in DB and raises the exception.

This patchset changes behaviour of getting snapshot metadata from DB.
Code now gets metadata from db_snapshot object that was queried
by joined query from DB instead of second query for each snapshot
for metadata.

And I removed checking of snapshot existence for getting
metadata for private method because all public methods already have
such decorator. Using second decorator will slow public method.

Change-Id: I7f743638d9be4c01e18315a3459aecd2b3e9fd87
Closes-Bug: #1462453
cinder/db/sqlalchemy/api.py
cinder/exception.py
cinder/objects/snapshot.py
cinder/tests/unit/api/v1/stubs.py
cinder/tests/unit/api/v1/test_snapshot_metadata.py
cinder/tests/unit/api/v2/stubs.py
cinder/tests/unit/api/v2/test_snapshot_metadata.py
cinder/tests/unit/fake_snapshot.py
cinder/tests/unit/objects/test_snapshot.py