Remove premature vnf delete from db

Hold the vnf in "PENDING_DELETE" state until underlying heat-stack
deletion is complete.
Closes-bug: #1554663

Change-Id: I5c52a9fc55950355f9122cc907f41cb8b9217a5c
This commit is contained in:
dharmendra 2016-03-30 10:02:08 +05:30
parent 3d40c322b5
commit dbbf891fd2
9 changed files with 36 additions and 23 deletions

View File

@ -1,4 +1,5 @@
VNF_CIRROS_CREATE_TIMEOUT = 300
VNF_CIRROS_DELETE_TIMEOUT = 300
VNF_CIRROS_DEAD_TIMEOUT = 250
ACTIVE_SLEEP_TIME = 3
DEAD_SLEEP_TIME = 1

View File

@ -17,6 +17,7 @@ import time
from oslo_config import cfg
from tempest_lib.tests import base
from tacker.common.exceptions import TackerException
from tacker.tests import constants
from tacker import version
@ -85,6 +86,20 @@ class BaseTackerTest(base.TestCase):
return cls.wait_until_vnf_status(vnf_id, 'ACTIVE', timeout,
sleep_interval)
@classmethod
def wait_until_vnf_delete(cls, vnf_id, timeout):
start_time = int(time.time())
while True:
try:
vnf_result = cls.client.show_vnf(vnf_id)
time.sleep(1)
except Exception:
return
status = vnf_result['vnf']['status']
if (status != 'PENDING_DELETE') or ((
int(time.time()) - start_time) > timeout):
raise TackerException(_("Failed with status: %s"), status)
@classmethod
def wait_until_vnf_dead(cls, vnf_id, timeout, sleep_interval):
return cls.wait_until_vnf_status(vnf_id, 'DEAD', timeout,

View File

@ -57,7 +57,6 @@ class VnfTestToscaCreate(base.BaseTackerTest):
assert False, "vnf Delete failed"
# Delete vnfd_instance
try:
self.client.delete_vnfd(vnfd_id)
except Exception:
assert False, "vnfd Delete failed"
self.addCleanup(self.client.delete_vnfd, vnfd_id)
self.addCleanup(self.wait_until_vnf_delete, vnf_id,
constants.VNF_CIRROS_DELETE_TIMEOUT)

View File

@ -76,7 +76,6 @@ class VnfTestToscaMultipleVDU(base.BaseTackerTest):
assert False, "vnf Delete of test_vnf_with_multiple_vdus failed"
# Delete vnfd_instance
try:
self.client.delete_vnfd(vnfd_id)
except Exception:
assert False, "vnfd Delete of sample-vnfd-multiple-vdus failed"
self.addCleanup(self.client.delete_vnfd, vnfd_id)
self.addCleanup(self.wait_until_vnf_delete, vnf_id,
constants.VNF_CIRROS_DELETE_TIMEOUT)

View File

@ -58,10 +58,9 @@ class VnfTestCreate(base.BaseTackerTest):
assert False, "vnf Delete failed"
# Delete vnfd_instance
try:
self.client.delete_vnfd(vnfd_id)
except Exception:
assert False, "vnfd Delete failed"
self.addCleanup(self.client.delete_vnfd, vnfd_id)
self.addCleanup(self.wait_until_vnf_delete, vnf_id,
constants.VNF_CIRROS_DELETE_TIMEOUT)
def test_create_delete_vnf_with_default_vim(self):
self._test_create_delete_vnf(

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from tacker.tests import constants
from tacker.tests.functional import base
from tacker.tests.utils import read_file
@ -45,11 +46,9 @@ class VnfTestPingMonitor(base.BaseTackerTest):
vnf_id)
# Delete vnfd_instance
try:
self.client.delete_vnfd(vnfd_id)
except Exception:
assert False, ("Failed to delete vnfd %s after the monitor test" %
vnfd_id)
self.addCleanup(self.client.delete_vnfd, vnfd_id)
self.addCleanup(self.wait_until_vnf_delete, vnf_id,
constants.VNF_CIRROS_DELETE_TIMEOUT)
def test_create_delete_vnf_monitoring(self):
self._test_vnf_with_monitoring(

View File

@ -67,7 +67,6 @@ class VnfTestMultipleVDU(base.BaseTackerTest):
assert False, "vnf Delete of test_vnf_with_multiple_vdus failed"
# Delete vnfd_instance
try:
self.client.delete_vnfd(vnfd_id)
except Exception:
assert False, "vnfd Delete of sample-vnfd-multiple-vdus failed"
self.addCleanup(self.client.delete_vnfd, vnfd_id)
self.addCleanup(self.wait_until_vnf_delete, vnf_id,
constants.VNF_CIRROS_DELETE_TIMEOUT)

View File

@ -97,4 +97,7 @@ class VnfmTestParam(base.BaseTackerTest):
'test_vnf_with_parameters',
'sample_cirros_vnf_values.yaml')
self._test_vnf_delete(vnf_instance)
self._test_vnfd_delete(vnfd_instance)
vnf_id = vnf_instance['vnf']['id']
self.addCleanup(self.client.delete_vnfd, vnfd_instance['vnfd']['id'])
self.addCleanup(self.wait_until_vnf_delete, vnf_id,
constants.VNF_CIRROS_DELETE_TIMEOUT)

View File

@ -380,7 +380,6 @@ class VNFMPlugin(vm_db.VNFMPluginDb, VNFMMgmtMixin):
self.mgmt_delete_post(context, device_dict)
self._delete_device_post(context, device_id, e)
self._delete_device_post(context, device_id, None)
self.spawn_n(self._delete_device_wait, context, device_dict, vim_auth)
def create_vnf(self, context, vnf):