nova/nova/tests/functional/regressions
Lee Yarwood 6007c41aa8 compute: Don't delete the original attachment during pre LM rollback
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 2102f1834a)
(cherry picked from commit 034b2fa8fe)
(cherry picked from commit c6c3483a41)
2020-09-03 18:56:31 +01:00
..
README.rst add a place for functional test to block specific regressions 2016-02-24 18:14:27 +00:00
__init__.py add a place for functional test to block specific regressions 2016-02-24 18:14:27 +00:00
test_bug_1404867.py fixtures: Track volume attachments within CinderFixtureNewAttachFlow 2018-10-22 17:19:31 +01:00
test_bug_1522536.py replace chance with filter scheduler in func tests 2017-08-16 14:42:51 +00:00
test_bug_1541691.py Remove unused conf 2016-09-02 09:02:23 +08:00
test_bug_1548980.py replace chance with filter scheduler in func tests 2017-08-16 14:42:51 +00:00
test_bug_1552888.py Trivial-Fix: Fix typos 2016-06-13 06:41:08 +00:00
test_bug_1554631.py Catching OverQuota Exception 2017-05-03 19:00:34 +00:00
test_bug_1558866.py remove unnecessary conf imports 2018-03-09 14:30:10 -05:00
test_bug_1568208.py Fix generation of Guru Meditation Report 2016-04-13 17:00:32 +03:00
test_bug_1595962.py libvirt: Don't delete disks on shared storage during evacuate 2020-06-10 02:24:13 +00:00
test_bug_1620248.py Stop using mox stubs in cast_as_call.py 2017-07-25 00:40:41 +00:00
test_bug_1669054.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1670627.py Clean up ports and volumes when deleting ERROR instance 2018-02-20 10:32:07 -05:00
test_bug_1671648.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1675570.py Use external placement in functional tests 2018-12-12 18:46:49 +00:00
test_bug_1678326.py Commit usage decrement after destroying instance 2017-04-05 15:19:15 -04:00
test_bug_1679750.py Don't register placement opts mutiple times in a test 2019-03-20 22:33:32 +00:00
test_bug_1682693.py Use external placement in functional tests 2018-12-12 18:46:49 +00:00
test_bug_1689692.py Clean up ports and volumes when deleting ERROR instance 2018-02-20 10:32:07 -05:00
test_bug_1702454.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1713783.py Use external placement in functional tests 2018-12-12 18:46:49 +00:00
test_bug_1718455.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1718512.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1719730.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1732947.py Implement new attach Cinder flow 2017-12-07 10:29:15 -05:00
test_bug_1735407.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1741125.py Remove the CachingScheduler 2018-10-18 17:55:36 -04:00
test_bug_1741307.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1746483.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1746509.py Use nova.db.api directly 2018-07-10 14:56:27 +00:00
test_bug_1764556.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1764883.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1778305.py Don't generate service UUID for deleted services 2019-08-07 21:04:07 +00:00
test_bug_1780373.py Use external placement in functional tests 2018-12-12 18:46:49 +00:00
test_bug_1781710.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1784353.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1790204.py Add functional regression recreate test for bug 1790204 2018-12-20 18:09:02 -05:00
test_bug_1794996.py Enhance service restart in functional env 2020-01-20 16:56:13 +00:00
test_bug_1797580.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1806064.py Use external placement in functional tests 2018-12-12 18:46:49 +00:00
test_bug_1806515.py Handle tags in _bury_in_cell0 2018-12-11 12:40:22 -05:00
test_bug_1815153.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1825020.py Fix volume-backed resize with a smaller disk flavor 2019-05-01 12:13:07 -04:00
test_bug_1825034.py Exclude fake marker instance when listing servers 2019-05-06 13:59:47 -04:00
test_bug_1825537.py Drop source node allocations if finish_resize fails 2019-07-01 15:19:19 -04:00
test_bug_1830747.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1831771.py Unplug VIFs as part of cleanup of networks 2020-03-27 11:38:49 +00:00
test_bug_1837955.py Cleanup when hitting MaxRetriesExceeded from no host_available 2019-07-30 10:10:17 -04:00
test_bug_1839560.py Remove global state from the FakeDriver 2020-01-17 16:04:46 +01:00
test_bug_1843090.py Handle legacy request spec dict in ComputeTaskManager._cold_migrate 2019-09-26 11:00:11 -04:00
test_bug_1843708.py objects: Update keypairs when saving an instance 2020-07-27 16:33:40 +01:00
test_bug_1849409.py Fix listing deleted servers with a marker 2019-10-23 15:03:13 -04:00
test_bug_1852458.py Create instance action when burying in cell0 2020-06-10 16:37:33 +00:00
test_bug_1862633.py Fix intermittently failing regression case 2020-03-18 15:37:26 +00:00
test_bug_1889108.py compute: Don't delete the original attachment during pre LM rollback 2020-09-03 18:56:31 +01:00

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.