Skip to content

Commit

Permalink
relation departed events will occur when units are removed, instead l…
Browse files Browse the repository at this point in the history
…isten to broken
  • Loading branch information
MiaAltieri committed Oct 5, 2023
1 parent f05d515 commit 8f9176c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
17 changes: 9 additions & 8 deletions lib/charms/mongodb/v0/shards_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
ShardNotPlannedForRemovalError,
)
from charms.mongodb.v0.users import MongoDBUser, OperatorUser
from ops.charm import CharmBase, EventBase, RelationDepartedEvent
from ops.charm import CharmBase, EventBase, RelationBrokenEvent
from ops.framework import Object
from ops.model import ActiveStatus, BlockedStatus, MaintenanceStatus, WaitingStatus
from tenacity import RetryError, Retrying, stop_after_delay, wait_fixed
Expand Down Expand Up @@ -74,10 +74,11 @@ def __init__(
charm.on[self.relation_name].relation_changed, self._on_relation_event
)
self.framework.observe(
charm.on[self.relation_name].relation_departed, self._on_relation_event
charm.on[self.relation_name].relation_broken, self._on_relation_event
)

# TODO Follow up PR, handle rotating passwords
# TODO Future PR: handle self healing when all IP addresses of a shard changes and we have
# to manually update mongos

def _on_relation_joined(self, event):
"""Handles providing shards with secrets and adding shards to the config server."""
Expand Down Expand Up @@ -134,7 +135,7 @@ def _on_relation_event(self, event):
return

departed_relation_id = None
if type(event) is RelationDepartedEvent:
if type(event) is RelationBrokenEvent:
departed_relation_id = event.relation.id

try:
Expand Down Expand Up @@ -286,7 +287,7 @@ def __init__(
charm.on[self.relation_name].relation_changed, self._on_relation_changed
)
self.framework.observe(
charm.on[self.relation_name].relation_departed, self._on_relation_departed
charm.on[self.relation_name].relation_broken, self._on_relation_broken
)

def _on_relation_changed(self, event):
Expand Down Expand Up @@ -336,7 +337,7 @@ def _on_relation_changed(self, event):

# TODO future PR, leader unit verifies shard was added to cluster (update-status hook)

def _on_relation_departed(self, event) -> None:
def _on_relation_broken(self, event) -> None:
"""Waits for the shard to be fully drained from the cluster."""
if self.charm.is_role(Config.Role.REPLICATION):
self.unit.status = BlockedStatus("role replication does not support sharding")
Expand All @@ -345,7 +346,7 @@ def _on_relation_departed(self, event) -> None:

if not self.charm.is_role(Config.Role.SHARD):
logger.info(
"skipping relation departed event ShardingProvider is only be executed by shards"
"skipping relation broken event ShardingProvider is only be executed by shards"
)
return

Expand All @@ -355,7 +356,7 @@ def _on_relation_departed(self, event) -> None:

self.charm.unit.status = MaintenanceStatus("Draining shard from cluster")
# mongos hosts must be retrieved via relation data, as relation.units are not available in
# departed
# broken
mongos_hosts = json.loads(event.relation.data[event.relation.app].get(HOSTS_KEY))
drained = False
while not drained:
Expand Down
6 changes: 1 addition & 5 deletions src/charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,7 @@ def drained(self) -> bool:
logger.info("Component %s is not a shard, cannot check draining status.", self.role)
return False

if "draining" not in self.app_peer_data:
logger.info("Draining status has not been set. It is set on relation_departed")
return False

return self.app_peer_data.get("drain")
return self.app_peer_data.get("drained", False)

@property
def _unit_ips(self) -> List[str]:
Expand Down

0 comments on commit 8f9176c

Please sign in to comment.