nova/nova/tests/functional/regressions
Matt Riedemann 8f1773a7af Do not persist RequestSpec.ignore_hosts
Change Ic3968721d257a167f3f946e5387cd227a7eeec6c in Newton
started setting the RequestSpec.ignore_hosts field to the
source instance.host during resize/cold migrate if
allow_resize_to_same_host=False in config, which it is by
default.

Change I8abdf58a6537dd5e15a012ea37a7b48abd726579 also in
Newton persists changes to the RequestSpec in conductor
in order to save the RequestSpec.flavor for the new flavor.
This inadvertently persists the ignore_hosts field as well.

Later if you try to evacuate or unshelve the server it will ignore
the original source host because of the persisted ignore_hosts
value. This is obviously a problem in a small deployment with only
a few compute nodes (like an edge deployment). As a result, an
evacuation can fail if the only available host is the one being
ignored.

This change does two things:

1. In order to deal with existing corrupted RequestSpecs in the DB,
   this change simply makes conductor overwrite RequestSpec.ignore_hosts
   rather than append during evacuate before calling the scheduler so
   the current instance host (which is down) is filtered out.

   This evacuate code dealing with ignore_hosts goes back to Mitaka:

     I7fe694175bb47f53d281bd62ac200f1c8416682b

   The test_rebuild_instance_with_request_spec unit test is updated
   and renamed to actually be doing an evacuate which is what it was
   intended for, i.e. the host would not change during rebuild.

2. This change makes the RequestSpec no longer persist the ignore_hosts
   field like several other per-operation fields in the RequestSpec.
   The only operations that use ignore_hosts are resize (if
   allow_resize_to_same_host=False), evacuate and live migration, and
   the field gets reset in each case to ignore the source instance.host.

The related functional recreate test is also updated to show the
bug is fixed. Note that as part of that, the confirm_migration method
in the fake virt driver needed to be implemented otherwise trying to
evacuate back to the source host fails with an InstanceExists error since
the confirmResize operation did not remove the guest from the source host.

Conflicts:
      nova/objects/request_spec.py
      nova/tests/unit/conductor/test_conductor.py
      nova/tests/unit/objects/test_request_spec.py

NOTE(mriedem): The (test_)request_spec.py conflicts are due to not
having change I2131558f0edfe603ee1e8d8bae66a3caf5182a58 in Queens.
test_save_does_not_persist_requested_fields from that change is
ported and modified here to just deal with the ignore_hosts field.
The test_conductor.py conflict is due to not having change
I640562b8dd049ff5b6fea9286dc3082b9d837ed3 in Queens.

Change-Id: I3f488be6f3c399f23ccf2b9ee0d76cd000da0e3e
Closes-Bug: #1669054
(cherry picked from commit e4c998e573)
(cherry picked from commit 76dfb9d0b6)
(cherry picked from commit 31c08d0c7d)
2019-04-02 11:07:52 -04:00
..
__init__.py add a place for functional test to block specific regressions 2016-02-24 18:14:27 +00:00
README.rst 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 15:51:59 -04: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 conf: Remove deprecated 'null_kernel' opt 2017-10-21 00:23:51 +00:00
test_bug_1568208.py Fix generation of Guru Meditation Report 2016-04-13 17:00:32 +03:00
test_bug_1595962.py Remove unnecessary self.flags and ConfPatcher 2017-11-27 15:49:10 +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_1627838.py Stop overwriting thread local context in ClientRouter 2016-09-26 20:49:22 +00:00
test_bug_1669054.py Do not persist RequestSpec.ignore_hosts 2019-04-02 11:07:52 -04:00
test_bug_1670627.py Clean up ports and volumes when deleting ERROR instance 2018-02-20 14:10:26 -05:00
test_bug_1671648.py Make conductor pass and use host_lists 2017-12-21 17:02:35 -05:00
test_bug_1675570.py fixtures: Track volume attachments within CinderFixtureNewAttachFlow 2018-10-22 15:51:59 -04:00
test_bug_1678326.py Commit usage decrement after destroying instance 2017-04-05 15:19:15 -04:00
test_bug_1679750.py Delete allocations from API if nova-compute is down 2018-04-20 14:57:34 -04:00
test_bug_1682693.py replace chance with filter scheduler in func tests 2017-08-16 14:42:51 +00:00
test_bug_1689692.py Clean up ports and volumes when deleting ERROR instance 2018-02-20 14:10:26 -05:00
test_bug_1702454.py Functional regression test for evacuate with a target 2017-10-29 13:49:06 -04:00
test_bug_1713783.py Set server status to ERROR if rebuild failed 2018-01-23 11:39:45 -05:00
test_bug_1718455.py Ensure instance can migrate when launched concurrently 2017-09-28 11:40:54 -04:00
test_bug_1718512.py Don't persist RequestSpec.retry 2018-04-12 11:27:49 -04:00
test_bug_1719730.py Set group_members when converting to legacy request spec 2017-09-27 20:52:19 +00:00
test_bug_1732947.py Implement new attach Cinder flow 2017-12-07 10:29:15 -05:00
test_bug_1735407.py Add late server group policy check to rebuild 2018-02-06 13:54:12 +01:00
test_bug_1741125.py Fix TypeError in prep_resize allocation cleanup 2018-07-11 08:59:20 -04:00
test_bug_1741307.py Handle no allocations during migrate 2018-01-04 14:18:50 -05:00
test_bug_1746483.py Handle volume-backed instances in IsolatedHostsFilter 2018-02-12 14:45:39 -05:00
test_bug_1746509.py Move _make_instance_list call outside of DB transaction context 2018-03-23 20:01:15 +00:00
test_bug_1764883.py compute: Ensure pre-migrating instances are destroyed during init_host 2018-11-30 16:07:22 +00:00
test_bug_1780373.py Fix server_group_members quota check 2018-07-11 15:04:34 -04:00
test_bug_1784353.py conductor: Recreate volume attachments during a reschedule 2018-10-22 16:08:10 -04:00
test_bug_1794996.py Fix InstanceNotFound during _destroy_evacuated_instances 2018-12-06 18:58:24 -05:00
test_bug_1797580.py Don't persist RequestSpec.requested_destination 2018-12-14 02:57:04 +00:00
test_bug_1806064.py Create BDMs/tags in cell with instance when over-quota 2018-12-11 14:20:35 +00:00
test_bug_1806515.py Handle tags in _bury_in_cell0 2018-12-12 17:20:44 -05:00

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.