Optimize action data update in lb policy
When doing pre_op, we are currently unconditionally updating the action's data field with the nodes to be deleted. This is unnecessary. This patch revises the logic to be invoked only when candidate list is regenerated. Change-Id: I100714a164d795c798924f61157a5c0fff2502de
This commit is contained in:
parent
7aead49826
commit
613a4ec24a
@ -380,6 +380,12 @@ class LoadBalancingPolicy(base.Policy):
|
|||||||
if count > len(nodes):
|
if count > len(nodes):
|
||||||
count = len(nodes)
|
count = len(nodes)
|
||||||
candidates = scaleutils.nodes_by_random(nodes, count)
|
candidates = scaleutils.nodes_by_random(nodes, count)
|
||||||
|
deletion_data = action.data.get('deletion', {})
|
||||||
|
deletion_data.update({
|
||||||
|
'count': len(candidates),
|
||||||
|
'candidates': candidates
|
||||||
|
})
|
||||||
|
action.data.update({'deletion': deletion_data})
|
||||||
|
|
||||||
return candidates
|
return candidates
|
||||||
|
|
||||||
@ -424,12 +430,6 @@ class LoadBalancingPolicy(base.Policy):
|
|||||||
'node(s) from lb pool.')
|
'node(s) from lb pool.')
|
||||||
return
|
return
|
||||||
|
|
||||||
# TODO(anyone): move this logic to get_delete_candidates. This doesn't
|
|
||||||
# have to be done every time.
|
|
||||||
deletion = action.data.get('deletion', {})
|
|
||||||
deletion.update({'count': len(candidates), 'candidates': candidates})
|
|
||||||
action.data.update({'deletion': deletion})
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def post_op(self, cluster_id, action):
|
def post_op(self, cluster_id, action):
|
||||||
|
@ -296,6 +296,8 @@ class TestLoadBalancingPolicy(base.SenlinTestCase):
|
|||||||
m_nodes_random.assert_called_once_with(['node1', 'node2', 'node3'], 1)
|
m_nodes_random.assert_called_once_with(['node1', 'node2', 'node3'], 1)
|
||||||
|
|
||||||
self.assertEqual(['node2'], res)
|
self.assertEqual(['node2'], res)
|
||||||
|
self.assertEqual({'deletion': {'count': 1, 'candidates': ['node2']}},
|
||||||
|
action.data)
|
||||||
|
|
||||||
def test_get_delete_candidates_deletion_count_is_zero(self):
|
def test_get_delete_candidates_deletion_count_is_zero(self):
|
||||||
action = mock.Mock()
|
action = mock.Mock()
|
||||||
@ -570,7 +572,12 @@ class TestLoadBalancingPolicyOperations(base.SenlinTestCase):
|
|||||||
node2.data = {'lb_member': 'MEMBER2_ID'}
|
node2.data = {'lb_member': 'MEMBER2_ID'}
|
||||||
action = mock.Mock()
|
action = mock.Mock()
|
||||||
action.data = {}
|
action.data = {}
|
||||||
action.data = {'deletion': {'candidates': ['NODE1_ID', 'NODE2_ID']}}
|
action.data = {
|
||||||
|
'deletion': {
|
||||||
|
'count': 2,
|
||||||
|
'candidates': ['NODE1_ID', 'NODE2_ID']
|
||||||
|
}
|
||||||
|
}
|
||||||
action.context = 'action_context'
|
action.context = 'action_context'
|
||||||
action.action = consts.CLUSTER_DEL_NODES
|
action.action = consts.CLUSTER_DEL_NODES
|
||||||
cp = mock.Mock()
|
cp = mock.Mock()
|
||||||
|
Loading…
Reference in New Issue
Block a user