68
68
If a setting is not extant in the leader-get but is on the relation-get
69
69
peer rel, it is migrated and marked as such so that it is not re-migrated.
71
settings = _leader_get(attribute=attribute)
71
migration_key = '__leader_get_migrated_settings__'
72
72
if not is_leader():
73
return _leader_get(attribute=attribute)
75
75
settings_migrated = False
76
migration_key = '__leader_get_migrated_settings__'
78
migrated = _leader_get(attribute=migration_key)
80
migrated = set(json.loads(migrated))
83
elif migration_key in settings:
84
migrated = set(json.loads(settings[migration_key]))
85
# Remove from returned settings
86
del settings[migration_key]
76
leader_settings = _leader_get(attribute=attribute)
77
previously_migrated = _leader_get(attribute=migration_key)
79
if previously_migrated:
80
migrated = set(json.loads(previously_migrated))
85
if migration_key in leader_settings:
86
del leader_settings[migration_key]
91
91
if attribute in migrated:
96
settings = relation_get(attribute=attribute, unit=local_unit())
98
leader_set(settings={attribute: settings})
92
return leader_settings
94
# If attribute not present in leader db, check if this unit has set
95
# the attribute in the peer relation
96
if not leader_settings:
97
peer_setting = relation_get(attribute=attribute, unit=local_unit())
99
leader_set(settings={attribute: peer_setting})
100
leader_settings = peer_setting
101
103
settings_migrated = True
102
104
migrated.add(attribute)
106
108
for key in set(r_settings.keys()).difference(migrated):
107
109
# Leader setting wins
108
if not settings.get(key):
109
settings[key] = r_settings[key]
110
if not leader_settings.get(key):
111
leader_settings[key] = r_settings[key]
111
113
settings_migrated = True
112
114
migrated.add(key)
114
116
if settings_migrated:
115
leader_set(**settings)
117
leader_set(**leader_settings)
117
119
if migrated and settings_migrated:
118
120
migrated = json.dumps(list(migrated))
119
121
leader_set(settings={migration_key: migrated})
123
return leader_settings
124
126
def relation_set(relation_id=None, relation_settings=None, **kwargs):