Skip to content
This repository has been archived by the owner on Sep 26, 2019. It is now read-only.

Commit

Permalink
Merge "Sync up provider url domain mapping"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Jun 22, 2016
2 parents 7d99372 + a7d1e78 commit 4c8d906
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 23 deletions.
75 changes: 57 additions & 18 deletions poppy/storage/cassandra/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -563,9 +563,11 @@ def set_service_provider_details(self, project_id, service_id, status):
for provider_name in sorted(provider_details_dict.keys()):
provider_details_dict[provider_name].status = status

self.update_provider_details(project_id=project_id,
service_id=service_id,
provider_details=provider_details_dict)
self.update_provider_details(
project_id=project_id,
service_id=service_id,
new_provider_details=provider_details_dict
)

def create_service(self, project_id, service_obj):
"""create.
Expand Down Expand Up @@ -898,41 +900,61 @@ def get_service_details_by_domain_name(self, domain_name, project_id=None):
return details

def update_provider_details(self, project_id, service_id,
provider_details):
new_provider_details):
"""update_provider_details.
:param project_id
:param service_id
:param provider_details
:param new_provider_details
"""

old_domain_names_provider_urls = []
old_provider_details = self.get_provider_details(
project_id,
service_id
)
for provider_name in sorted(old_provider_details.keys()):
the_provider_detail_dict = collections.OrderedDict()
the_provider_detail_dict["id"] = (
old_provider_details[provider_name].provider_service_id)
the_provider_detail_dict["access_urls"] = (
old_provider_details[provider_name].access_urls)
for access_url in the_provider_detail_dict["access_urls"]:
domain_name = access_url.get("domain", None)
provider_url = access_url.get("provider_url", None)
if domain_name and provider_url:
old_domain_names_provider_urls.append(
(domain_name, provider_url)
)

provider_detail_dict = {}
status = None
domain_names_provider_urls = []
for provider_name in sorted(provider_details.keys()):
new_domain_names_provider_urls = []
for provider_name in sorted(new_provider_details.keys()):
the_provider_detail_dict = collections.OrderedDict()
the_provider_detail_dict["id"] = (
provider_details[provider_name].provider_service_id)
new_provider_details[provider_name].provider_service_id)
the_provider_detail_dict["access_urls"] = (
provider_details[provider_name].access_urls)
new_provider_details[provider_name].access_urls)
for access_url in the_provider_detail_dict["access_urls"]:
domain_name = access_url.get("domain", None)
provider_url = access_url.get("provider_url", None)
if domain_name and provider_url:
domain_names_provider_urls.append((domain_name,
provider_url))
new_domain_names_provider_urls.append(
(domain_name, provider_url)
)
the_provider_detail_dict["status"] = (
provider_details[provider_name].status)
new_provider_details[provider_name].status)
status = the_provider_detail_dict["status"]
the_provider_detail_dict["name"] = (
provider_details[provider_name].name)
new_provider_details[provider_name].name)
the_provider_detail_dict["domains_certificate_status"] = (
provider_details[provider_name].domains_certificate_status.
new_provider_details[provider_name].domains_certificate_status.
to_dict())
the_provider_detail_dict["error_info"] = (
provider_details[provider_name].error_info)
new_provider_details[provider_name].error_info)
the_provider_detail_dict["error_message"] = (
provider_details[provider_name].error_message)
new_provider_details[provider_name].error_message)
provider_detail_dict[provider_name] = json.dumps(
the_provider_detail_dict)

Expand Down Expand Up @@ -962,8 +984,8 @@ def update_provider_details(self, project_id, service_id,
consistency_level=self._driver.consistency_level)
self.session.execute(stmt, service_args)

if domain_names_provider_urls:
for domain_name, provider_url in domain_names_provider_urls:
if new_domain_names_provider_urls:
for domain_name, provider_url in new_domain_names_provider_urls:
provider_url_args = {
'domain_name': domain_name,
'provider_url': provider_url
Expand All @@ -974,6 +996,23 @@ def update_provider_details(self, project_id, service_id,
consistency_level=self._driver.consistency_level)
self.session.execute(stmt, provider_url_args)

if new_domain_names_provider_urls and old_domain_names_provider_urls:
# remove mapping for domains that were deleted during the update
deleted_domains = (
set(new_domain_names_provider_urls) -
set(old_domain_names_provider_urls)
)
for domain_name, provider_url in deleted_domains:
provider_url_args = {
'domain_name': domain_name,
'provider_url': provider_url
}

stmt = query.SimpleStatement(
CQL_DELETE_PROVIDER_URL,
consistency_level=self._driver.consistency_level)
self.session.execute(stmt, provider_url_args)

@staticmethod
def format_result(result):
"""format_result.
Expand Down
2 changes: 1 addition & 1 deletion poppy/storage/mockdb/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def set_service_provider_details(self, project_id, service_id, status):
pass

def update_provider_details(self, project_id, service_name,
provider_details):
new_provider_details):
pass

def domain_exists_elsewhere(self, domain_name, service_id):
Expand Down
26 changes: 22 additions & 4 deletions tests/unit/storage/cassandra/test_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,28 @@ def assert_mock_execute_args(*args):

mock_execute.execute.side_effect = assert_mock_execute_args

self.sc.update_provider_details(
self.project_id,
self.service_id,
provider_details_dict)
with mock.patch.object(
services.ServicesController,
'get_provider_details') as mock_provider_det:

mock_provider_det.return_value = {
"MaxCDN": # "{\"id\": 11942, \"access_urls\": "
# "[{\"provider_url\": \"maxcdn.provider.com\", "
# "\"domain\": \"xk.cd\"}], "
# "\"domains_certificate_status\":"
# "{\"mypullzone.com\": "
# "\"failed\"} }",
provider_details.ProviderDetail(
provider_service_id='{}',
access_urls=[]
)
}

self.sc.update_provider_details(
self.project_id,
self.service_id,
provider_details_dict
)

@mock.patch.object(cassandra.cluster.Cluster, 'connect')
def test_session(self, mock_service_database):
Expand Down

0 comments on commit 4c8d906

Please sign in to comment.