Fix duplicate object error messages
Fixed an issue where creation of duplicate listeners or members may have not returned the correct error message to users. The API would traceback with AttributeError: 'NoneType' object has no attribute 'to_dict' Conflicts: octavia/api/v2/controllers/member.py octavia/api/v2/controllers/listener.py Story: 2009128 Task: 43045 Change-Id: Ibbccda5859c8c6129d43e0742b28b319b49ddd1f (cherry picked from commitf166bb1481
) (cherry picked from commite69899824c
) (cherry picked from commit5647db94c9
) (cherry picked from commitca66aac375
) (cherry picked from commita1e22d89a4
)
This commit is contained in:
parent
efeb4da03e
commit
04647d4502
|
@ -297,16 +297,10 @@ class ListenersController(base.BaseController):
|
|||
lock_session, id=db_listener.id)
|
||||
|
||||
return db_listener
|
||||
except odb_exceptions.DBDuplicateEntry as de:
|
||||
column_list = ['load_balancer_id', 'protocol', 'protocol_port']
|
||||
constraint_list = ['uq_listener_load_balancer_id_protocol_port']
|
||||
if ['id'] == de.columns:
|
||||
raise exceptions.IDAlreadyExists()
|
||||
if (set(column_list) == set(de.columns) or
|
||||
set(constraint_list) == set(de.columns)):
|
||||
raise exceptions.DuplicateListenerEntry(
|
||||
protocol=listener_dict.get('protocol'),
|
||||
port=listener_dict.get('protocol_port'))
|
||||
except odb_exceptions.DBDuplicateEntry as e:
|
||||
raise exceptions.DuplicateListenerEntry(
|
||||
protocol=listener_dict.get('protocol'),
|
||||
port=listener_dict.get('protocol_port')) from e
|
||||
except odb_exceptions.DBError:
|
||||
raise exceptions.InvalidOption(value=listener_dict.get('protocol'),
|
||||
option='protocol')
|
||||
|
|
|
@ -119,16 +119,10 @@ class MemberController(base.BaseController):
|
|||
"""Validate creating member on pool."""
|
||||
try:
|
||||
return self.repositories.member.create(lock_session, **member_dict)
|
||||
except odb_exceptions.DBDuplicateEntry as de:
|
||||
column_list = ['pool_id', 'ip_address', 'protocol_port']
|
||||
constraint_list = ['uq_member_pool_id_address_protocol_port']
|
||||
if ['id'] == de.columns:
|
||||
raise exceptions.IDAlreadyExists()
|
||||
if (set(column_list) == set(de.columns) or
|
||||
set(constraint_list) == set(de.columns)):
|
||||
raise exceptions.DuplicateMemberEntry(
|
||||
ip_address=member_dict.get('ip_address'),
|
||||
port=member_dict.get('protocol_port'))
|
||||
except odb_exceptions.DBDuplicateEntry as e:
|
||||
raise exceptions.DuplicateMemberEntry(
|
||||
ip_address=member_dict.get('ip_address'),
|
||||
port=member_dict.get('protocol_port')) from e
|
||||
except odb_exceptions.DBError:
|
||||
# TODO(blogan): will have to do separate validation protocol
|
||||
# before creation or update since the exception messages
|
||||
|
|
Loading…
Reference in New Issue