Merge lp:~therve/landscape-client/persist-set-intervals into lp:~landscape/landscape-client/trunk

Proposed by Thomas Herve
Status: Merged
Approved by: Frank Wierzbicki
Approved revision: 321
Merged at revision: 321
Proposed branch: lp:~therve/landscape-client/persist-set-intervals
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 192 lines (+37/-18)
4 files modified
landscape/broker/exchange.py (+9/-5)
landscape/broker/service.py (+1/-2)
landscape/broker/tests/helpers.py (+1/-3)
landscape/broker/tests/test_exchange.py (+26/-8)
To merge this branch: bzr merge lp:~therve/landscape-client/persist-set-intervals
Reviewer Review Type Date Requested Status
Frank Wierzbicki (community) Approve
Kevin McDermott (community) Approve
Review via email: mp+54819@code.launchpad.net

Description of the change

It's a fairly simple change, passing the config object, and writing it when the message is received.

To post a comment you must log in.
Revision history for this message
Kevin McDermott (bigkevmcd) wrote :

Looks good to me, +1

Revision history for this message
Kevin McDermott (bigkevmcd) :
review: Approve
Revision history for this message
Frank Wierzbicki (fwierzbicki) wrote :

Looks good to me, +1!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'landscape/broker/exchange.py'
2--- landscape/broker/exchange.py 2010-10-25 15:50:29 +0000
3+++ landscape/broker/exchange.py 2011-03-25 08:46:40 +0000
4@@ -23,8 +23,7 @@
5
6 def __init__(self, reactor, store, transport, registration_info,
7 exchange_store,
8- exchange_interval=60*60,
9- urgent_exchange_interval=10,
10+ config,
11 monitor_interval=None,
12 max_messages=100,
13 create_time=time.time):
14@@ -35,7 +34,7 @@
15 @param transport: A L{HTTPTransport} used to deliver messages.
16 @param exchange_interval: time interval between subsequent
17 exchanges of non-urgent messages.
18- @param urgent_exachange_interval: time interval between subsequent
19+ @param urgent_exchange_interval: time interval between subsequent
20 exchanges of urgent messages.
21 """
22 self._reactor = reactor
23@@ -43,8 +42,9 @@
24 self._create_time = create_time
25 self._transport = transport
26 self._registration_info = registration_info
27- self._exchange_interval = exchange_interval
28- self._urgent_exchange_interval = urgent_exchange_interval
29+ self._config = config
30+ self._exchange_interval = config.exchange_interval
31+ self._urgent_exchange_interval = config.urgent_exchange_interval
32 self._max_messages = max_messages
33 self._notification_id = None
34 self._exchange_id = None
35@@ -159,12 +159,16 @@
36 def _handle_set_intervals(self, message):
37 if "exchange" in message:
38 self._exchange_interval = message["exchange"]
39+ self._config.exchange_interval = self._exchange_interval
40 logging.info("Exchange interval set to %d seconds." %
41 self._exchange_interval)
42 if "urgent-exchange" in message:
43 self._urgent_exchange_interval = message["urgent-exchange"]
44+ self._config.urgent_exchange_interval = \
45+ self._urgent_exchange_interval
46 logging.info("Urgent exchange interval set to %d seconds." %
47 self._urgent_exchange_interval)
48+ self._config.write()
49
50 def exchange(self):
51 """Send pending messages to the server and process responses.
52
53=== modified file 'landscape/broker/service.py'
54--- landscape/broker/service.py 2010-04-30 10:40:11 +0000
55+++ landscape/broker/service.py 2011-03-25 08:46:40 +0000
56@@ -56,8 +56,7 @@
57 exchange_store = ExchangeStore(self.config.exchange_store_path)
58 self.exchanger = MessageExchange(
59 self.reactor, self.message_store, self.transport, self.identity,
60- exchange_store, config.exchange_interval,
61- config.urgent_exchange_interval)
62+ exchange_store, config)
63 self.pinger = self.pinger_factory(self.reactor, config.ping_url,
64 self.identity, self.exchanger)
65 self.registration = RegistrationHandler(
66
67=== modified file 'landscape/broker/tests/helpers.py'
68--- landscape/broker/tests/helpers.py 2010-07-19 09:54:58 +0000
69+++ landscape/broker/tests/helpers.py 2011-03-25 08:46:40 +0000
70@@ -81,9 +81,7 @@
71 test_case.config.exchange_store_path)
72 test_case.exchanger = MessageExchange(
73 test_case.reactor, test_case.mstore, test_case.transport,
74- test_case.identity, test_case.exchange_store,
75- test_case.config.exchange_interval,
76- test_case.config.urgent_exchange_interval)
77+ test_case.identity, test_case.exchange_store, test_case.config)
78
79
80 class RegistrationHelper(ExchangeHelper):
81
82=== modified file 'landscape/broker/tests/test_exchange.py'
83--- landscape/broker/tests/test_exchange.py 2010-10-25 15:50:29 +0000
84+++ landscape/broker/tests/test_exchange.py 2011-03-25 08:46:40 +0000
85@@ -3,6 +3,7 @@
86 from landscape.lib.hashlib import md5
87 from landscape.lib.fetch import fetch_async
88 from landscape.schema import Message, Int
89+from landscape.broker.config import BrokerConfiguration
90 from landscape.broker.exchange import get_accepted_types_diff, MessageExchange
91 from landscape.broker.transport import FakeTransport
92 from landscape.broker.store import MessageStore
93@@ -239,6 +240,7 @@
94
95 self.mstore.add({"type": "data", "data": 2})
96 self.mstore.add({"type": "data", "data": 3})
97+
98 # next one, server will respond with 1!
99 def desynched_send_data(payload, computer_id=None, message_api=None):
100 self.transport.next_expected_sequence = 1
101@@ -272,7 +274,8 @@
102 """
103 transport = FakeTransport()
104 exchanger = MessageExchange(self.reactor, self.mstore, transport,
105- self.identity, self.exchange_store)
106+ self.identity, self.exchange_store,
107+ self.config)
108 exchanger.start()
109 self.wait_for_exchange(urgent=True)
110 self.assertEquals(len(transport.payloads), 1)
111@@ -303,7 +306,7 @@
112 self.wait_for_exchange(urgent=True)
113 self.assertEquals(len(self.transport.payloads), 1)
114 self.wait_for_exchange(urgent=True)
115- self.assertEquals(len(self.transport.payloads), 1) # no change
116+ self.assertEquals(len(self.transport.payloads), 1) # no change
117
118 def test_ancient_causes_resynchronize(self):
119 """
120@@ -500,7 +503,7 @@
121 """
122 exchanger = MessageExchange(self.reactor, self.mstore, self.transport,
123 self.identity, self.exchange_store,
124- max_messages=1)
125+ self.config, max_messages=1)
126 self.mstore.set_accepted_types(["empty"])
127 self.mstore.add({"type": "empty"})
128 self.mstore.add({"type": "empty"})
129@@ -528,9 +531,10 @@
130 # We create our own MessageExchange because the one set up by the text
131 # fixture has an urgent exchange interval of 10 seconds, which makes
132 # testing this awkward.
133+ self.config.urgent_exchange_interval = 20
134 exchanger = MessageExchange(self.reactor, self.mstore, self.transport,
135 self.identity, self.exchange_store,
136- urgent_exchange_interval=20)
137+ self.config)
138 exchanger.schedule_exchange(urgent=True)
139 events = []
140 self.reactor.call_on("impending-exchange", lambda: events.append(True))
141@@ -546,9 +550,11 @@
142 should be cancelled and a new one should be scheduled for 10 seconds
143 before the new urgent exchange.
144 """
145+ self.config.exchange_interval = 60 * 60
146+ self.config.urgent_exchange_interval = 20
147 exchanger = MessageExchange(self.reactor, self.mstore, self.transport,
148 self.identity, self.exchange_store,
149- urgent_exchange_interval=20)
150+ self.config)
151 events = []
152 self.reactor.call_on("impending-exchange", lambda: events.append(True))
153 # This call will:
154@@ -569,9 +575,9 @@
155 # schedule a regular exchange.
156 # Let's make sure that that *original* impending-exchange event has
157 # been cancelled:
158- self.reactor.advance(60 * 60 # time till exchange
159- - 10 # time till notification
160- - 20) # time that we've already advanced
161+ self.reactor.advance(60 * 60 # time till exchange
162+ - 10 # time till notification
163+ - 20) # time that we've already advanced
164 self.assertEquals(events, [True])
165 # Ok, so no new events means that the original call was
166 # cancelled. great.
167@@ -642,6 +648,11 @@
168 self.assertEquals(self.exchanger.get_exchange_intervals(), (60, 900))
169
170 def test_set_intervals(self):
171+ """
172+ When a C{set-intervals} message is received, the runtime attributes of
173+ the L{MessageExchange} are changed, the configuration values as well,
174+ and the configuration is written to disk to be persisted.
175+ """
176 server_message = [{"type": "set-intervals",
177 "urgent-exchange": 1234, "exchange": 5678}]
178 self.transport.responses.append(server_message)
179@@ -650,6 +661,13 @@
180
181 self.assertEquals(self.exchanger.get_exchange_intervals(),
182 (1234, 5678))
183+ self.assertEquals(self.config.exchange_interval, 5678)
184+ self.assertEquals(self.config.urgent_exchange_interval, 1234)
185+
186+ new_config = BrokerConfiguration()
187+ new_config.load_configuration_file(self.config_filename)
188+ self.assertEquals(new_config.exchange_interval, 5678)
189+ self.assertEquals(new_config.urgent_exchange_interval, 1234)
190
191 def test_set_intervals_with_urgent_exchange_only(self):
192 server_message = [{"type": "set-intervals", "urgent-exchange": 1234}]

Subscribers

People subscribed via source and target branches

to all changes: