6007c41aa8
I0bfb11296430dfffe9b091ae7c3a793617bd9d0d introduced support for live migration with cinderv3 volume attachments during Queens. This initial support handled failures in pre_live_migration directly by removing any attachments created on the destination and reverting to the original attachment ids before re-raising the caught exception to the source compute. It also added rollback code within the main _rollback_live_migration method but missed that this would also be called during a pre_live_migration rollback. As a result after a failure in pre_live_migration _rollback_live_migration will attempt to delete the source host volume attachments referenced by the bdm before updating the bdms with the now non-existent attachment ids, leaving the volumes in an `available` state in Cinder as they have no attachment records associated with them anymore. This change aims to resolve this within _rollback_volume_bdms by ensuring that the current and original attachment_ids are not equal before requesting that the current attachment referenced by the bdm is deleted. When called after a failure in pre_live_migration this should result in no attempt being made to remove the original source host attachments from Cinder. Note that the following changes muddy the waters slightly here but introduced no actual changes to the logic within _rollback_live_migration: * I0f3ab6604d8b79bdb75cf67571e359cfecc039d8 reworked some of the error handling in Rocky but isn't the source of the issue here. * Ibe9215c07a1ee00e0e121c69bcf7ee1b1b80fae0 reworked _rollback_live_migration to use the provided source_bdms. * I6bc73e8c8f98d9955f33f309beb8a7c56981b553 then refactored _rollback_live_migration, moving the logic into a self contained _rollback_volume_bdms method. Closes-Bug: #1889108 Change-Id: I9edb36c4df1cc0d8b529e669f06540de71766085 (cherry picked from commit |
||
---|---|---|
.. | ||
README.rst | ||
__init__.py | ||
test_bug_1404867.py | ||
test_bug_1522536.py | ||
test_bug_1541691.py | ||
test_bug_1548980.py | ||
test_bug_1552888.py | ||
test_bug_1554631.py | ||
test_bug_1558866.py | ||
test_bug_1568208.py | ||
test_bug_1595962.py | ||
test_bug_1620248.py | ||
test_bug_1669054.py | ||
test_bug_1670627.py | ||
test_bug_1671648.py | ||
test_bug_1675570.py | ||
test_bug_1678326.py | ||
test_bug_1679750.py | ||
test_bug_1682693.py | ||
test_bug_1689692.py | ||
test_bug_1702454.py | ||
test_bug_1713783.py | ||
test_bug_1718455.py | ||
test_bug_1718512.py | ||
test_bug_1719730.py | ||
test_bug_1732947.py | ||
test_bug_1735407.py | ||
test_bug_1741125.py | ||
test_bug_1741307.py | ||
test_bug_1746483.py | ||
test_bug_1746509.py | ||
test_bug_1764556.py | ||
test_bug_1764883.py | ||
test_bug_1778305.py | ||
test_bug_1780373.py | ||
test_bug_1781710.py | ||
test_bug_1784353.py | ||
test_bug_1790204.py | ||
test_bug_1794996.py | ||
test_bug_1797580.py | ||
test_bug_1806064.py | ||
test_bug_1806515.py | ||
test_bug_1815153.py | ||
test_bug_1825020.py | ||
test_bug_1825034.py | ||
test_bug_1825537.py | ||
test_bug_1830747.py | ||
test_bug_1831771.py | ||
test_bug_1837955.py | ||
test_bug_1839560.py | ||
test_bug_1843090.py | ||
test_bug_1843708.py | ||
test_bug_1849409.py | ||
test_bug_1852458.py | ||
test_bug_1862633.py | ||
test_bug_1889108.py |
README.rst
Tests for Specific Regressions
When we have a bug reported by end users that we can write a full stack reproduce on, we should. And we should keep a regression test for that bug in our tree. It can be deleted at some future date if needed, but largely should not be changed.
Writing Regression Tests
- These should be full stack tests which inherit from nova.test.TestCase directly. (This is to prevent coupling with other tests).
- They should setup a full stack cloud in their setUp via fixtures
- They should each live in a file which is named test_bug######.py
Writing Tests Before the Bug is Fixed
TODO describe writing and landing tests before the bug is fixed as a reproduce.