Fixed incorrect message when zone import failed due to quota
Closes-Bug: #1960764 Change-Id: Ib91e49081855e5f4ec9f46a060d1587dcfeaac29
This commit is contained in:
parent
eed5042c41
commit
7e543c2d22
@ -2775,6 +2775,9 @@ class Service(service.RPCService):
|
|||||||
except exceptions.InvalidTTL as e:
|
except exceptions.InvalidTTL as e:
|
||||||
zone_import.status = 'ERROR'
|
zone_import.status = 'ERROR'
|
||||||
zone_import.message = str(e)
|
zone_import.message = str(e)
|
||||||
|
except exceptions.OverQuota:
|
||||||
|
zone_import.status = 'ERROR'
|
||||||
|
zone_import.message = 'Quota exceeded during zone import.'
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(
|
LOG.exception(
|
||||||
'An undefined error occurred during zone import creation'
|
'An undefined error occurred during zone import creation'
|
||||||
|
@ -807,34 +807,36 @@ class TestCase(base.BaseTestCase):
|
|||||||
return self.storage.create_zone_export(
|
return self.storage.create_zone_export(
|
||||||
context, objects.ZoneExport.from_dict(zone_export))
|
context, objects.ZoneExport.from_dict(zone_export))
|
||||||
|
|
||||||
def wait_for_import(self, zone_import_id, errorok=False):
|
def wait_for_import(self, zone_import_id, error_is_ok=False, max_wait=10):
|
||||||
"""
|
"""
|
||||||
Zone imports spawn a thread to parse the zone file and
|
Zone imports spawn a thread to parse the zone file and
|
||||||
insert the data. This waits for this process before continuing
|
insert the data. This waits for this process before continuing
|
||||||
"""
|
"""
|
||||||
attempts = 0
|
start_time = time.time()
|
||||||
while attempts < 20:
|
while True:
|
||||||
# Give the import a half second to complete
|
|
||||||
time.sleep(.5)
|
|
||||||
|
|
||||||
# Retrieve it, and ensure it's the same
|
# Retrieve it, and ensure it's the same
|
||||||
zone_import = self.central_service.get_zone_import(
|
zone_import = self.central_service.get_zone_import(
|
||||||
self.admin_context_all_tenants, zone_import_id)
|
self.admin_context_all_tenants, zone_import_id
|
||||||
|
)
|
||||||
|
|
||||||
# If the import is done, we're done
|
# If the import is done, we're done
|
||||||
if zone_import.status == 'COMPLETE':
|
if zone_import.status == 'COMPLETE':
|
||||||
break
|
break
|
||||||
|
|
||||||
# If errors are allowed, just make sure that something completed
|
# If errors are allowed, just make sure that something completed
|
||||||
if errorok:
|
if error_is_ok and zone_import.status != 'PENDING':
|
||||||
if zone_import.status != 'PENDING':
|
|
||||||
break
|
break
|
||||||
|
|
||||||
attempts += 1
|
if (time.time() - start_time) > max_wait:
|
||||||
|
break
|
||||||
|
|
||||||
if not errorok:
|
time.sleep(0.5)
|
||||||
|
|
||||||
|
if not error_is_ok:
|
||||||
self.assertEqual('COMPLETE', zone_import.status)
|
self.assertEqual('COMPLETE', zone_import.status)
|
||||||
|
|
||||||
|
return zone_import
|
||||||
|
|
||||||
def _ensure_interface(self, interface, implementation):
|
def _ensure_interface(self, interface, implementation):
|
||||||
for name in interface.__abstractmethods__:
|
for name in interface.__abstractmethods__:
|
||||||
in_arginfo = inspect.getfullargspec(getattr(interface, name))
|
in_arginfo = inspect.getfullargspec(getattr(interface, name))
|
||||||
|
@ -53,7 +53,7 @@ class APIV2ZoneImportExportTest(ApiV2TestCase):
|
|||||||
headers={'Content-type': 'text/dns'})
|
headers={'Content-type': 'text/dns'})
|
||||||
|
|
||||||
import_id = response.json_body['id']
|
import_id = response.json_body['id']
|
||||||
self.wait_for_import(import_id, errorok=True)
|
self.wait_for_import(import_id, error_is_ok=True)
|
||||||
|
|
||||||
url = '/zones/tasks/imports/%s' % import_id
|
url = '/zones/tasks/imports/%s' % import_id
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ class APIV2ZoneImportExportTest(ApiV2TestCase):
|
|||||||
headers={'Content-type': 'text/dns'})
|
headers={'Content-type': 'text/dns'})
|
||||||
|
|
||||||
import_id = response.json_body['id']
|
import_id = response.json_body['id']
|
||||||
self.wait_for_import(import_id, errorok=True)
|
self.wait_for_import(import_id, error_is_ok=True)
|
||||||
|
|
||||||
url = '/zones/tasks/imports/%s' % import_id
|
url = '/zones/tasks/imports/%s' % import_id
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ class APIV2ZoneImportExportTest(ApiV2TestCase):
|
|||||||
headers={'Content-type': 'text/dns'})
|
headers={'Content-type': 'text/dns'})
|
||||||
|
|
||||||
import_id = response.json_body['id']
|
import_id = response.json_body['id']
|
||||||
self.wait_for_import(import_id, errorok=True)
|
self.wait_for_import(import_id, error_is_ok=True)
|
||||||
|
|
||||||
url = '/zones/tasks/imports/%s' % import_id
|
url = '/zones/tasks/imports/%s' % import_id
|
||||||
|
|
||||||
|
@ -3395,6 +3395,30 @@ class CentralServiceTest(CentralTestCase):
|
|||||||
|
|
||||||
self.wait_for_import(zone_import.id)
|
self.wait_for_import(zone_import.id)
|
||||||
|
|
||||||
|
def test_create_zone_import_overquota(self):
|
||||||
|
self.config(
|
||||||
|
quota_zone_records=5,
|
||||||
|
quota_zone_recordsets=5,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create a Zone Import
|
||||||
|
context = self.get_context(project_id=utils.generate_uuid())
|
||||||
|
request_body = self.get_zonefile_fixture()
|
||||||
|
zone_import = self.central_service.create_zone_import(context,
|
||||||
|
request_body)
|
||||||
|
|
||||||
|
# Ensure all values have been set correctly
|
||||||
|
self.assertIsNotNone(zone_import['id'])
|
||||||
|
self.assertEqual('PENDING', zone_import.status)
|
||||||
|
self.assertIsNone(zone_import.message)
|
||||||
|
self.assertIsNone(zone_import.zone_id)
|
||||||
|
|
||||||
|
zone_import = self.wait_for_import(zone_import.id, error_is_ok=True)
|
||||||
|
|
||||||
|
self.assertEqual('Quota exceeded during zone import.',
|
||||||
|
zone_import.message)
|
||||||
|
self.assertEqual('ERROR', zone_import.status)
|
||||||
|
|
||||||
def test_find_zone_imports(self):
|
def test_find_zone_imports(self):
|
||||||
context = self.get_context(project_id=utils.generate_uuid())
|
context = self.get_context(project_id=utils.generate_uuid())
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user