Merge lp:~dpb/juju-deployer/lxc-placement-fix into lp:juju-deployer

Proposed by David Britton
Status: Merged
Merged at revision: 120
Proposed branch: lp:~dpb/juju-deployer/lxc-placement-fix
Merge into: lp:juju-deployer
Prerequisite: lp:~dpb/juju-deployer/api-endpoints
Diff against target: 55 lines (+16/-4)
3 files modified
deployer/service.py (+4/-3)
deployer/tests/test_data/stack-placement.yaml (+4/-0)
deployer/tests/test_deployment.py (+8/-1)
To merge this branch: bzr merge lp:~dpb/juju-deployer/lxc-placement-fix
Reviewer Review Type Date Requested Status
Kapil Thangavelu Approve
Review via email: mp+230924@code.launchpad.net

Description of the change

I'm pretty sure a simple variable error/typo caused this bug. The fall-through behavior of the routine was correct, but an early exit was checking the wrong variable making the default placement algorithm take over too soon.

I changed the variable being tested and cleaned up the warning message a bit. I also added a unit test for this case (which runs and fails on the old code)

To post a comment you must log in.
125. By David Britton

typo in log print

Revision history for this message
Kapil Thangavelu (hazmat) wrote :

Thanks, merged

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'deployer/service.py'
--- deployer/service.py 2014-06-19 12:30:44 +0000
+++ deployer/service.py 2014-08-15 21:05:19 +0000
@@ -139,10 +139,11 @@
139 return None139 return None
140140
141 svc_units = with_service['units']141 svc_units = with_service['units']
142 if len(svc_units) <= unit_number:142 if int(u_idx) >= len(svc_units):
143 self.deployment.log.warning(143 self.deployment.log.warning(
144 "Service:%s deploy-with Service:%s, but no with unit found",144 "Service:%s, Deploy-with-service:%s, Requested-unit-index=%s, "
145 svc.name, placement)145 "Cannot solve, falling back to default placement",
146 svc.name, placement, u_idx)
146 return None147 return None
147 unit_names = svc_units.keys()148 unit_names = svc_units.keys()
148 unit_names.sort()149 unit_names.sort()
149150
=== modified file 'deployer/tests/test_data/stack-placement.yaml'
--- deployer/tests/test_data/stack-placement.yaml 2013-10-31 19:19:36 +0000
+++ deployer/tests/test_data/stack-placement.yaml 2014-08-15 21:05:19 +0000
@@ -16,3 +16,7 @@
16 to: lxc:nova-compute=216 to: lxc:nova-compute=2
17 semper:17 semper:
18 to: nova-compute=218 to: nova-compute=2
19 lxc-service:
20 # Ensure more than nova-compute, catches lp:1357196
21 num_units: 5
22 to: [ "lxc:nova-compute=1", "lxc:nova-compute=2", "lxc:nova-compute=0", "lxc:nova-compute=0", "lxc:nova-compute=2" ]
1923
=== modified file 'deployer/tests/test_deployment.py'
--- deployer/tests/test_deployment.py 2014-02-18 14:33:13 +0000
+++ deployer/tests/test_deployment.py 2014-08-15 21:05:19 +0000
@@ -119,6 +119,13 @@
119 placement = d.get_unit_placement('semper', status)119 placement = d.get_unit_placement('semper', status)
120 self.assertEqual(placement.get(0), '3')120 self.assertEqual(placement.get(0), '3')
121121
122 placement = d.get_unit_placement('lxc-service', status)
123 self.assertEqual(placement.get(0), 'lxc:2')
124 self.assertEqual(placement.get(1), 'lxc:3')
125 self.assertEqual(placement.get(2), 'lxc:1')
126 self.assertEqual(placement.get(3), 'lxc:1')
127 self.assertEqual(placement.get(4), 'lxc:3')
128
122 def test_multiple_relations_no_weight(self):129 def test_multiple_relations_no_weight(self):
123 data = {"relations": {"wordpress": {"consumes": ["mysql"]},130 data = {"relations": {"wordpress": {"consumes": ["mysql"]},
124 "nginx": {"consumes": ["wordpress"]}}}131 "nginx": {"consumes": ["wordpress"]}}}
@@ -154,5 +161,5 @@
154 deployment = self.get_named_deployment("stack-placement.yaml", "stack")161 deployment = self.get_named_deployment("stack-placement.yaml", "stack")
155 service_names = deployment.get_service_names()162 service_names = deployment.get_service_names()
156 expected_service_names = [163 expected_service_names = [
157 'ceph', 'mysql', 'nova-compute', 'quantum', 'semper', 'verity']164 'ceph', 'mysql', 'nova-compute', 'quantum', 'semper', 'verity', 'lxc-service']
158 self.assertEqual(set(expected_service_names), set(service_names))165 self.assertEqual(set(expected_service_names), set(service_names))

Subscribers

People subscribed via source and target branches