Skip to content

Commit 63057a7

Browse files
authored
[DPE-5325] Only write app data if leader (#676)
* Only write app data if leader * Unit test * Cover changes
1 parent fde548d commit 63057a7

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/backups.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,8 +495,9 @@ def check_stanza(self) -> None:
495495
except RetryError as e:
496496
# If the check command doesn't succeed, remove the stanza name
497497
# and rollback the configuration.
498-
self.charm.app_peer_data.update({"stanza": ""})
499-
self.charm.app_peer_data.pop("init-pgbackrest", None)
498+
if self.charm.unit.is_leader():
499+
self.charm.app_peer_data.update({"stanza": ""})
500+
self.charm.app_peer_data.pop("init-pgbackrest", None)
500501
self.charm.unit_peer_data.update({"stanza": "", "init-pgbackrest": ""})
501502
self.charm.update_config()
502503

tests/unit/test_backups.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -799,6 +799,33 @@ def test_check_stanza(harness):
799799
assert _update_config.call_count == 2
800800
assert _member_started.call_count == 5
801801
assert _reload_patroni_configuration.call_count == 5
802+
assert harness.get_relation_data(peer_rel_id, harness.charm.app) == {
803+
"stanza": "test-stanza",
804+
"init-pgbackrest": "True",
805+
}
806+
assert harness.get_relation_data(peer_rel_id, harness.charm.unit) == {}
807+
assert isinstance(harness.charm.unit.status, BlockedStatus)
808+
assert harness.charm.unit.status.message == FAILED_TO_INITIALIZE_STANZA_ERROR_MESSAGE
809+
810+
# Test when the archiving is not working correctly (pgBackRest check command fails) on leader.
811+
with harness.hooks_disabled():
812+
harness.set_leader(True)
813+
harness.update_relation_data(
814+
peer_rel_id,
815+
harness.charm.app.name,
816+
{"stanza": "test-stanza", "init-pgbackrest": "True"},
817+
)
818+
harness.update_relation_data(
819+
peer_rel_id,
820+
harness.charm.unit.name,
821+
{"stanza": "test-stanza", "init-pgbackrest": "True"},
822+
)
823+
_execute_command.side_effect = ExecError(
824+
command=stanza_check_command, exit_code=1, stdout="", stderr="fake error"
825+
)
826+
_member_started.return_value = True
827+
harness.charm.backup.check_stanza()
828+
assert _update_config.call_count == 4
802829
assert harness.get_relation_data(peer_rel_id, harness.charm.app) == {}
803830
assert harness.get_relation_data(peer_rel_id, harness.charm.unit) == {}
804831
assert isinstance(harness.charm.unit.status, BlockedStatus)
@@ -807,6 +834,7 @@ def test_check_stanza(harness):
807834
# Test when the archiving is working correctly (pgBackRest check command succeeds)
808835
# and the unit is not the leader.
809836
with harness.hooks_disabled():
837+
harness.set_leader(False)
810838
harness.update_relation_data(
811839
peer_rel_id,
812840
harness.charm.app.name,

0 commit comments

Comments
 (0)