Use total entries from pyrax to get shard capacity

Change-Id: I5bb4ac0989ba9341b292c5d3a1bb059ca6c548d7
This commit is contained in:
Isaac Mungai 2016-09-22 12:13:02 -04:00
parent 0458de585d
commit f25180bcc3
3 changed files with 16 additions and 26 deletions

View File

@ -801,23 +801,16 @@ class ServicesController(base.ServicesBase):
target_url=new_cert, shared_ssl_flag=False)
def is_shard_full(self, shard_name):
count = 0
try:
shard_domain = self.client.find(name=shard_name)
except exc.NotFound:
LOG.error("Shards not configured properly, could not find {0}.")
return True
records = shard_domain.list_records(limit=100)
count += len(records)
# populates dns client with metadata
shard_domain.list_records()
# Loop until all records are printed
while True:
try:
records = self.client.list_records_next_page()
count += len(records)
except exc.NoMoreResults:
break
count = int(self.client._manager._paging['record']['total_entries'])
LOG.info(
"There were a total of {0} record(s) for {1}.".format(

View File

@ -697,7 +697,9 @@ class DefaultServicesController(base.ServicesController):
except StopIteration:
delattr(self, store)
raise errors.SharedShardsExhausted(
'Domain {0} has already been taken'.format(domain_name))
'Domain {0} has already been taken or '
'all shards are at maximum capacity when '
'trying to provision.'.format(domain_name))
def _pick_shared_ssl_domain(self, domain, service_id, store):
shared_ssl_domain = self._generate_shared_ssl_domain(

View File

@ -1060,7 +1060,11 @@ class TestServicesUpdate(base.TestCase):
find_mock.list_records.return_value = range(100)
self.client.find.return_value = find_mock
self.client.list_records_next_page.side_effect = exc.NoMoreResults
self.client._manager._paging = {
'record': {
'total_entries': 100
}
}
self.assertFalse(self.controller.is_shard_full('shard_name'))
@ -1068,19 +1072,10 @@ class TestServicesUpdate(base.TestCase):
find_mock = mock.Mock()
find_mock.list_records.return_value = range(600)
self.client.find.return_value = find_mock
self.client.list_records_next_page.side_effect = exc.NoMoreResults
self.assertTrue(self.controller.is_shard_full('shard_name'))
def test_is_shard_full_paginate_true(self):
find_mock = mock.Mock()
find_mock.list_records.return_value = range(300)
self.client.find.return_value = find_mock
self.client.list_records_next_page.side_effect = [
range(300),
exc.NoMoreResults,
]
self.client._manager._paging = {
'record': {
'total_entries': 600
}
}
self.assertTrue(self.controller.is_shard_full('shard_name'))