Merge "Fix bug when rolling back prov and op status for some API calls" into stable/victoria

This commit is contained in:
Zuul 2022-12-07 13:58:33 +00:00 committed by Gerrit Code Review
commit 1f617ff40a
5 changed files with 44 additions and 2 deletions

View File

@ -157,7 +157,7 @@ class L7RuleController(base.BaseController):
l7rule_dict = db_prepare.create_l7rule(
l7rule.to_dict(render_unsets=True), self.l7policy_id)
self._test_lb_listener_policy_statuses(context.session)
self._test_lb_listener_policy_statuses(lock_session)
db_l7rule = self._validate_create_l7rule(lock_session, l7rule_dict)

View File

@ -451,7 +451,7 @@ class PoolsController(base.BaseController):
with db_api.get_lock_session() as lock_session:
self._test_lb_and_listener_statuses(
context.session, lb_id=db_pool.load_balancer_id,
lock_session, lb_id=db_pool.load_balancer_id,
listener_ids=self._get_affected_listener_ids(db_pool))
# Prepare the data for the driver data model

View File

@ -1304,3 +1304,19 @@ class TestL7Rule(base.BaseAPITest):
self.set_lb_status(self.lb_id, status=constants.DELETED)
self.delete(self.l7rule_path.format(l7rule_id=l7rule.get('id')),
status=404)
@mock.patch("octavia.api.drivers.noop_driver.driver.NoopManager."
"l7rule_create")
def test_create_with_exception_in_provider_driver(self,
l7rule_create_mock):
l7rule_create_mock.side_effect = Exception("Provider error")
self.create_l7rule(
self.l7policy_id, constants.L7RULE_TYPE_PATH,
constants.L7RULE_COMPARE_TYPE_STARTS_WITH,
'/api', status=500)
lb = self.get(self.LB_PATH.format(lb_id=self.lb_id)).json.get(
"loadbalancer")
self.assertEqual(lb[constants.PROVISIONING_STATUS],
constants.ACTIVE)

View File

@ -2623,3 +2623,24 @@ class TestPool(base.BaseAPITest):
self.assertEqual(expect_error_msg,
res.json['faultstring'])
self.assert_correct_status(lb_id=self.lb_id)
@mock.patch("octavia.api.drivers.noop_driver.driver.NoopManager."
"pool_update")
def test_update_with_exception_in_provider_driver(self, pool_update_mock):
pool_update_mock.side_effect = Exception("Provider error")
api_pool = self.create_pool(
self.lb_id,
constants.PROTOCOL_HTTP,
constants.LB_ALGORITHM_ROUND_ROBIN,
listener_id=self.listener_id).get(self.root_tag)
self.set_lb_status(lb_id=self.lb_id)
new_pool = {'name': 'foo'}
self.put(self.POOL_PATH.format(pool_id=api_pool.get('id')),
self._build_body(new_pool), status=500)
lb = self.get(self.LB_PATH.format(lb_id=self.lb_id)).json.get(
"loadbalancer")
self.assertEqual(lb[constants.PROVISIONING_STATUS],
constants.ACTIVE)

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Fix load balancers stuck in PENDING_UPDATE issues for some API calls (POST
/l7rule, PUT /pool) when a provider denied the call.