Merge lp:~james-page/charm-helpers/lp-1480893 into lp:charm-helpers

Proposed by James Page on 2015-08-03
Status: Merged
Merged at revision: 419
Proposed branch: lp:~james-page/charm-helpers/lp-1480893
Merge into: lp:charm-helpers
Diff against target: 98 lines (+12/-11)
2 files modified
charmhelpers/contrib/peerstorage/__init__.py (+5/-4)
tests/contrib/peerstorage/test_peerstorage.py (+7/-7)
To merge this branch: bzr merge lp:~james-page/charm-helpers/lp-1480893
Reviewer Review Type Date Requested Status
Edward Hope-Morley Needs Fixing on 2015-08-03
Liam Young 2015-08-03 Approve on 2015-08-03
Review via email: mp+266712@code.launchpad.net

Description of the Change

Fixup problem with out-of-context migration of peer data to leader settings.

To post a comment you must log in.
Liam Young (gnuoy) wrote :

LGTM

review: Approve
Edward Hope-Morley (hopem) :
review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'charmhelpers/contrib/peerstorage/__init__.py'
2--- charmhelpers/contrib/peerstorage/__init__.py 2015-06-03 13:09:25 +0000
3+++ charmhelpers/contrib/peerstorage/__init__.py 2015-08-03 13:24:44 +0000
4@@ -59,7 +59,7 @@
5 """
6
7
8-def leader_get(attribute=None):
9+def leader_get(attribute=None, rid=None):
10 """Wrapper to ensure that settings are migrated from the peer relation.
11
12 This is to support upgrading an environment that does not support
13@@ -94,7 +94,8 @@
14 # If attribute not present in leader db, check if this unit has set
15 # the attribute in the peer relation
16 if not leader_settings:
17- peer_setting = relation_get(attribute=attribute, unit=local_unit())
18+ peer_setting = _relation_get(attribute=attribute, unit=local_unit(),
19+ rid=rid)
20 if peer_setting:
21 leader_set(settings={attribute: peer_setting})
22 leader_settings = peer_setting
23@@ -103,7 +104,7 @@
24 settings_migrated = True
25 migrated.add(attribute)
26 else:
27- r_settings = relation_get(unit=local_unit())
28+ r_settings = _relation_get(unit=local_unit(), rid=rid)
29 if r_settings:
30 for key in set(r_settings.keys()).difference(migrated):
31 # Leader setting wins
32@@ -151,7 +152,7 @@
33 """
34 try:
35 if rid in relation_ids('cluster'):
36- return leader_get(attribute)
37+ return leader_get(attribute, rid)
38 else:
39 raise NotImplementedError
40 except NotImplementedError:
41
42=== modified file 'tests/contrib/peerstorage/test_peerstorage.py'
43--- tests/contrib/peerstorage/test_peerstorage.py 2015-06-03 14:46:50 +0000
44+++ tests/contrib/peerstorage/test_peerstorage.py 2015-08-03 13:24:44 +0000
45@@ -202,7 +202,7 @@
46 l_settings = {'s3': 3}
47 r_settings = {'s1': 1, 's2': 2}
48
49- def mock_relation_get(attribute=None, unit=None):
50+ def mock_relation_get(attribute=None, unit=None, rid=None):
51 if attribute:
52 if attribute in r_settings:
53 return r_settings.get(attribute)
54@@ -237,11 +237,11 @@
55 self.assertEqual(_dicta, _dictb)
56
57 migration_key = '__leader_get_migrated_settings__'
58- self.relation_get.side_effect = mock_relation_get
59+ self._relation_get.side_effect = mock_relation_get
60 self._leader_get.side_effect = mock_leader_get
61 self.leader_set.side_effect = mock_leader_set
62
63- self.assertEqual({'s1': 1, 's2': 2}, peerstorage.relation_get())
64+ self.assertEqual({'s1': 1, 's2': 2}, peerstorage._relation_get())
65 self.assertEqual({'s3': 3}, peerstorage._leader_get())
66 self.assertEqual({'s1': 1, 's2': 2, 's3': 3}, peerstorage.leader_get())
67 check_leader_db({'s1': 1, 's2': 2, 's3': 3,
68@@ -274,7 +274,7 @@
69
70 peerstorage.leader_set.reset_mock()
71 self.assertEqual({'s1': 1, 's2': 2, 's3': 2, 's4': 3},
72- peerstorage.relation_get())
73+ peerstorage._relation_get())
74 check_leader_db({'s1': 1, 's3': 3, 's4': 4,
75 migration_key: '["s1", "s4"]'},
76 peerstorage._leader_get())
77@@ -290,7 +290,7 @@
78 l_settings = {'s3': 3}
79 r_settings = {'s1': 1, 's2': 2}
80
81- def mock_relation_get(attribute=None, unit=None):
82+ def mock_relation_get(attribute=None, unit=None, rid=None):
83 if attribute:
84 if attribute in r_settings:
85 return r_settings.get(attribute)
86@@ -314,10 +314,10 @@
87
88 l_settings.update(kwargs)
89
90- self.relation_get.side_effect = mock_relation_get
91+ self._relation_get.side_effect = mock_relation_get
92 self._leader_get.side_effect = mock_leader_get
93 self.leader_set.side_effect = mock_leader_set
94- self.assertEqual({'s1': 1, 's2': 2}, peerstorage.relation_get())
95+ self.assertEqual({'s1': 1, 's2': 2}, peerstorage._relation_get())
96 self.assertEqual({'s3': 3}, peerstorage._leader_get())
97 self.assertEqual({'s3': 3}, peerstorage.leader_get())
98 self.assertEqual({'s3': 3}, l_settings)

Subscribers

People subscribed via source and target branches