Merge lp:~fwereade/pyjuju/find-all-zookeepers into lp:pyjuju

Proposed by William Reade
Status: Merged
Approved by: Gustavo Niemeyer
Approved revision: 313
Merged at revision: 313
Proposed branch: lp:~fwereade/pyjuju/find-all-zookeepers
Merge into: lp:pyjuju
Diff against target: 145 lines (+37/-22)
4 files modified
ensemble/providers/common/findzookeepers.py (+4/-3)
ensemble/providers/common/tests/test_findzookeepers.py (+8/-5)
ensemble/providers/ec2/tests/test_findzookeeper.py (+7/-5)
ensemble/providers/orchestra/tests/test_findzookeepers.py (+18/-9)
To merge this branch: bzr merge lp:~fwereade/pyjuju/find-all-zookeepers
Reviewer Review Type Date Requested Status
Gustavo Niemeyer Approve
Review via email: mp+71668@code.launchpad.net

Description of the change

Fix lp:823511 (we only find one zookeeper, even if several exist).

Did this because forthcoming common zookeeper-connect code is quite neat if it works with multiple machines, and I got tired of seeing the TODO.

To post a comment you must log in.
Revision history for this message
Gustavo Niemeyer (niemeyer) wrote :

William confirmed on IRC that the call sites won't break with more than one machine.

It's not clear what's the goal here, but that's ok.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ensemble/providers/common/findzookeepers.py'
2--- ensemble/providers/common/findzookeepers.py 2011-08-09 20:10:05 +0000
3+++ ensemble/providers/common/findzookeepers.py 2011-08-16 11:22:25 +0000
4@@ -17,19 +17,20 @@
5 instance_ids = state.get("zookeeper-instances")
6 _require(instance_ids)
7
8- # TODO we should collect all valid machines, instead of just returning a
9- # list of the first valid one we find. Filed bug #823511.
10 pending = False
11+ machines = []
12 missing_instance_ids = []
13 for instance_id in instance_ids:
14 try:
15 machine = yield get_machine(provider, instance_id)
16- returnValue([machine])
17+ machines.append(machine)
18 except MachineNotFound as e:
19 missing_instance_ids.append(e.instance_id)
20 except MachineNotReady:
21 pending = True
22
23+ if machines:
24+ returnValue(machines)
25 if pending:
26 raise EnvironmentPending("Started machine is not yet initialized.")
27 raise EnvironmentNotFound("None of the candidate machines (%s) are either "
28
29=== modified file 'ensemble/providers/common/tests/test_findzookeepers.py'
30--- ensemble/providers/common/tests/test_findzookeepers.py 2011-08-03 13:22:35 +0000
31+++ ensemble/providers/common/tests/test_findzookeepers.py 2011-08-16 11:22:25 +0000
32@@ -93,22 +93,25 @@
33 d.addCallback(verify_machine)
34 return d
35
36- def test_first_good_always_wins(self):
37+ def test_gets_all_good_machines(self):
38 provider = DummyProvider(
39 {"zookeeper-instances": ["porter", "carter", "miller", "baker"]})
40 get_machine = self.mocker.mock()
41 get_machine(provider, "porter")
42 self.mocker.result(fail(MachineNotFound("porter")))
43 get_machine(provider, "carter")
44- self.mocker.result(fail(MachineNotReady("carter")))
45+ carter = object()
46+ self.mocker.result(succeed(carter))
47 get_machine(provider, "miller")
48- machine = object()
49- self.mocker.result(succeed(machine))
50+ self.mocker.result(fail(MachineNotReady("miller")))
51+ get_machine(provider, "baker")
52+ baker = object()
53+ self.mocker.result(succeed(baker))
54 self.mocker.replay()
55
56 d = find_zookeepers(provider, get_machine)
57
58 def verify_machine(result):
59- self.assertEquals(result, [machine])
60+ self.assertEquals(result, [carter, baker])
61 d.addCallback(verify_machine)
62 return d
63
64=== modified file 'ensemble/providers/ec2/tests/test_findzookeeper.py'
65--- ensemble/providers/ec2/tests/test_findzookeeper.py 2011-08-05 12:43:39 +0000
66+++ ensemble/providers/ec2/tests/test_findzookeeper.py 2011-08-16 11:22:25 +0000
67@@ -154,12 +154,12 @@
68 # Zk instances are checked individually to handle invalid ids correctly
69 self.ec2.describe_instances("i-invalid")
70 self.mocker.result(fail(_invalid_id_error()))
71-
72 self.ec2.describe_instances(server1.instance_id)
73 self.mocker.result(succeed([server1]))
74-
75 self.ec2.describe_instances(server2.instance_id)
76 self.mocker.result(succeed([server2]))
77+ self.ec2.describe_instances(server3.instance_id)
78+ self.mocker.result(succeed([server3]))
79
80 self.mocker.replay()
81
82@@ -167,8 +167,10 @@
83 d = provider.get_zookeeper_machines()
84
85 def verify_machines(machines):
86- (machine,) = machines
87- self.assertEquals(machine.instance_id, "i-foobaz")
88- self.assertTrue(isinstance(machine, EC2ProviderMachine))
89+ (foobaz, foobop) = machines
90+ self.assertEquals(foobaz.instance_id, "i-foobaz")
91+ self.assertTrue(isinstance(foobaz, EC2ProviderMachine))
92+ self.assertEquals(foobop.instance_id, "i-foobop")
93+ self.assertTrue(isinstance(foobop, EC2ProviderMachine))
94 d.addCallback(verify_machines)
95 return d
96
97=== modified file 'ensemble/providers/orchestra/tests/test_findzookeepers.py'
98--- ensemble/providers/orchestra/tests/test_findzookeepers.py 2011-07-31 00:54:45 +0000
99+++ ensemble/providers/orchestra/tests/test_findzookeepers.py 2011-08-16 11:22:25 +0000
100@@ -60,8 +60,8 @@
101 return self.assert_no_environment()
102
103 def test_eventual_success(self):
104- self.mock_load_state(succeed(dump({"zookeeper-instances": ["bad",
105- "foo"]})))
106+ self.mock_load_state(succeed(dump({
107+ "zookeeper-instances": ["bad", "foo", "wrong", "bar"]})))
108 proxy_m = self.mocker.mock(Proxy)
109 Proxy_m = self.mocker.replace(Proxy, spec=None)
110 Proxy_m("http://somewhe.re/cobbler_api")
111@@ -69,18 +69,27 @@
112 proxy_m.callRemote("find_system", {"uid": "bad"})
113 self.mocker.result(succeed([]))
114 proxy_m.callRemote("find_system", {"uid": "foo"})
115- self.mocker.result(succeed(["bar"]))
116- proxy_m.callRemote("get_system", "bar")
117- self.mocker.result(succeed({"name": "bar", "uid": "foo"}))
118+ self.mocker.result(succeed(["fooname"]))
119+ proxy_m.callRemote("get_system", "fooname")
120+ self.mocker.result(succeed({"name": "fooname", "uid": "foo"}))
121+ proxy_m.callRemote("find_system", {"uid": "wrong"})
122+ self.mocker.result(succeed([]))
123+ proxy_m.callRemote("find_system", {"uid": "bar"})
124+ self.mocker.result(succeed(["barname"]))
125+ proxy_m.callRemote("get_system", "barname")
126+ self.mocker.result(succeed({"name": "barname", "uid": "bar"}))
127 self.mocker.replay()
128
129 provider = self.get_provider()
130 d = provider.get_zookeeper_machines()
131
132 def verify_machine(machines):
133- (machine,) = machines
134- self.assertTrue(isinstance(machine, OrchestraMachine))
135- self.assertEquals(machine.instance_id, "foo")
136- self.assertEquals(machine.dns_name, "bar")
137+ (foo, bar) = machines
138+ self.assertTrue(isinstance(foo, OrchestraMachine))
139+ self.assertEquals(foo.instance_id, "foo")
140+ self.assertEquals(foo.dns_name, "fooname")
141+ self.assertTrue(isinstance(bar, OrchestraMachine))
142+ self.assertEquals(bar.instance_id, "bar")
143+ self.assertEquals(bar.dns_name, "barname")
144 d.addCallback(verify_machine)
145 return d

Subscribers

People subscribed via source and target branches

to status/vote changes: