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:
tengqm 2016-03-16 02:01:01 -04:00
parent 7aead49826
commit 613a4ec24a
2 changed files with 14 additions and 7 deletions

View File

@ -380,6 +380,12 @@ class LoadBalancingPolicy(base.Policy):
if count > len(nodes):
count = len(nodes)
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
@ -424,12 +430,6 @@ class LoadBalancingPolicy(base.Policy):
'node(s) from lb pool.')
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
def post_op(self, cluster_id, action):

View File

@ -296,6 +296,8 @@ class TestLoadBalancingPolicy(base.SenlinTestCase):
m_nodes_random.assert_called_once_with(['node1', 'node2', 'node3'], 1)
self.assertEqual(['node2'], res)
self.assertEqual({'deletion': {'count': 1, 'candidates': ['node2']}},
action.data)
def test_get_delete_candidates_deletion_count_is_zero(self):
action = mock.Mock()
@ -570,7 +572,12 @@ class TestLoadBalancingPolicyOperations(base.SenlinTestCase):
node2.data = {'lb_member': 'MEMBER2_ID'}
action = mock.Mock()
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.action = consts.CLUSTER_DEL_NODES
cp = mock.Mock()