26e32ce858
Usually, when instance.host = None, it means the instance was never
scheduled. However, the exception handling routine in compute manager
[1] will set instance.host = None and set instance.vm_state = ERROR
if the instance fails to build on the compute host. If that happens, we
end up with an instance with host = None and vm_state = ERROR which may
have ports and volumes still allocated.
This adds some logic around deleting the instance when it may have
ports or volumes allocated.
1. If the instance is not in ERROR or SHELVED_OFFLOADED state, we
expect instance.host to be set to a compute host. So, if we find
instance.host = None in states other than ERROR or
SHELVED_OFFLOADED, we consider the instance to have failed
scheduling and not require ports or volumes to be freed, and we
simply destroy the instance database record and return. This is
the "delete while booting" scenario.
2. If the instance is in ERROR because of a failed build or is
SHELVED_OFFLOADED, we expect instance.host to be None even though
there could be ports or volumes allocated. In this case, run the
_local_delete routine to clean up ports and volumes and delete the
instance database record.
Co-Authored-By: Ankit Agrawal <ankit11.agrawal@nttdata.com>
Co-Authored-By: Samuel Matzek <smatzek@us.ibm.com>
Co-Authored-By: melanie witt <melwittt@gmail.com>
Closes-Bug: 1404867
Closes-Bug: 1408527
Conflicts:
nova/tests/unit/compute/test_compute_api.py
[1] https://github.com/openstack/nova/blob/55ea961/nova/compute/manager.py#L1927-L1929
Change-Id: I4dc6c8bd3bb6c135f8a698af41f5d0e026c39117
(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_1627838.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_1719730.py | ||
test_bug_1732947.py | ||
test_bug_1735407.py | ||
test_bug_1741125.py | ||
test_bug_1741307.py | ||
test_bug_1746483.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.