Skip to content

Commit 444f3d5

Browse files
chore: bump dp_libs ver (#147)
1 parent 106f9c2 commit 444f3d5

1 file changed

Lines changed: 51 additions & 21 deletions

File tree

lib/charms/data_platform_libs/v0/data_interfaces.py

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ def _on_topic_requested(self, event: TopicRequestedEvent):
331331

332332
# Increment this PATCH version before using `charmcraft publish-lib` or reset
333333
# to 0 if you are raising the major API version
334-
LIBPATCH = 34
334+
LIBPATCH = 38
335335

336336
PYDEPS = ["ops>=2.0.0"]
337337

@@ -642,22 +642,26 @@ def _move_to_new_label_if_needed(self):
642642
return
643643

644644
# Create a new secret with the new label
645-
old_meta = self._secret_meta
646645
content = self._secret_meta.get_content()
646+
self._secret_uri = None
647647

648648
# I wish we could just check if we are the owners of the secret...
649649
try:
650650
self._secret_meta = self.add_secret(content, label=self.label)
651651
except ModelError as err:
652652
if "this unit is not the leader" not in str(err):
653653
raise
654-
old_meta.remove_all_revisions()
654+
self.current_label = None
655655

656656
def set_content(self, content: Dict[str, str]) -> None:
657657
"""Setting cached secret content."""
658658
if not self.meta:
659659
return
660660

661+
# DPE-4182: do not create new revision if the content stay the same
662+
if content == self.get_content():
663+
return
664+
661665
if content:
662666
self._move_to_new_label_if_needed()
663667
self.meta.set_content(content)
@@ -1586,7 +1590,7 @@ def _register_secret_to_relation(
15861590
"""
15871591
label = self._generate_secret_label(relation_name, relation_id, group)
15881592

1589-
# Fetchin the Secret's meta information ensuring that it's locally getting registered with
1593+
# Fetching the Secret's meta information ensuring that it's locally getting registered with
15901594
CachedSecret(self._model, self.component, label, secret_id).meta
15911595

15921596
def _register_secrets_to_relation(self, relation: Relation, params_name_list: List[str]):
@@ -2309,7 +2313,7 @@ def _secrets(self) -> dict:
23092313
return self._cached_secrets
23102314

23112315
def _get_secret(self, group) -> Optional[Dict[str, str]]:
2312-
"""Retrieveing secrets."""
2316+
"""Retrieving secrets."""
23132317
if not self.app:
23142318
return
23152319
if not self._secrets.get(group):
@@ -2602,6 +2606,14 @@ def set_version(self, relation_id: int, version: str) -> None:
26022606
"""
26032607
self.update_relation_data(relation_id, {"version": version})
26042608

2609+
def set_subordinated(self, relation_id: int) -> None:
2610+
"""Raises the subordinated flag in the application relation databag.
2611+
2612+
Args:
2613+
relation_id: the identifier for a particular relation.
2614+
"""
2615+
self.update_relation_data(relation_id, {"subordinated": "true"})
2616+
26052617

26062618
class DatabaseProviderEventHandlers(EventHandlers):
26072619
"""Provider-side of the database relation handlers."""
@@ -2838,6 +2850,21 @@ def _on_relation_created_event(self, event: RelationCreatedEvent) -> None:
28382850

28392851
def _on_relation_changed_event(self, event: RelationChangedEvent) -> None:
28402852
"""Event emitted when the database relation has changed."""
2853+
is_subordinate = False
2854+
remote_unit_data = None
2855+
for key in event.relation.data.keys():
2856+
if isinstance(key, Unit) and not key.name.startswith(self.charm.app.name):
2857+
remote_unit_data = event.relation.data[key]
2858+
elif isinstance(key, Application) and key.name != self.charm.app.name:
2859+
is_subordinate = event.relation.data[key].get("subordinated") == "true"
2860+
2861+
if is_subordinate:
2862+
if not remote_unit_data:
2863+
return
2864+
2865+
if remote_unit_data.get("state") != "ready":
2866+
return
2867+
28412868
# Check which data has changed to emit customs events.
28422869
diff = self._diff(event)
28432870

@@ -3016,7 +3043,7 @@ class KafkaRequiresEvents(CharmEvents):
30163043
# Kafka Provides and Requires
30173044

30183045

3019-
class KafkaProvidesData(ProviderData):
3046+
class KafkaProviderData(ProviderData):
30203047
"""Provider-side of the Kafka relation."""
30213048

30223049
def __init__(self, model: Model, relation_name: str) -> None:
@@ -3059,12 +3086,12 @@ def set_zookeeper_uris(self, relation_id: int, zookeeper_uris: str) -> None:
30593086
self.update_relation_data(relation_id, {"zookeeper-uris": zookeeper_uris})
30603087

30613088

3062-
class KafkaProvidesEventHandlers(EventHandlers):
3089+
class KafkaProviderEventHandlers(EventHandlers):
30633090
"""Provider-side of the Kafka relation."""
30643091

30653092
on = KafkaProvidesEvents() # pyright: ignore [reportAssignmentType]
30663093

3067-
def __init__(self, charm: CharmBase, relation_data: KafkaProvidesData) -> None:
3094+
def __init__(self, charm: CharmBase, relation_data: KafkaProviderData) -> None:
30683095
super().__init__(charm, relation_data)
30693096
# Just to keep lint quiet, can't resolve inheritance. The same happened in super().__init__() above
30703097
self.relation_data = relation_data
@@ -3086,15 +3113,15 @@ def _on_relation_changed_event(self, event: RelationChangedEvent) -> None:
30863113
)
30873114

30883115

3089-
class KafkaProvides(KafkaProvidesData, KafkaProvidesEventHandlers):
3116+
class KafkaProvides(KafkaProviderData, KafkaProviderEventHandlers):
30903117
"""Provider-side of the Kafka relation."""
30913118

30923119
def __init__(self, charm: CharmBase, relation_name: str) -> None:
3093-
KafkaProvidesData.__init__(self, charm.model, relation_name)
3094-
KafkaProvidesEventHandlers.__init__(self, charm, self)
3120+
KafkaProviderData.__init__(self, charm.model, relation_name)
3121+
KafkaProviderEventHandlers.__init__(self, charm, self)
30953122

30963123

3097-
class KafkaRequiresData(RequirerData):
3124+
class KafkaRequirerData(RequirerData):
30983125
"""Requirer-side of the Kafka relation."""
30993126

31003127
def __init__(
@@ -3124,12 +3151,12 @@ def topic(self, value):
31243151
self._topic = value
31253152

31263153

3127-
class KafkaRequiresEventHandlers(RequirerEventHandlers):
3154+
class KafkaRequirerEventHandlers(RequirerEventHandlers):
31283155
"""Requires-side of the Kafka relation."""
31293156

31303157
on = KafkaRequiresEvents() # pyright: ignore [reportAssignmentType]
31313158

3132-
def __init__(self, charm: CharmBase, relation_data: KafkaRequiresData) -> None:
3159+
def __init__(self, charm: CharmBase, relation_data: KafkaRequirerData) -> None:
31333160
super().__init__(charm, relation_data)
31343161
# Just to keep lint quiet, can't resolve inheritance. The same happened in super().__init__() above
31353162
self.relation_data = relation_data
@@ -3142,10 +3169,13 @@ def _on_relation_created_event(self, event: RelationCreatedEvent) -> None:
31423169
return
31433170

31443171
# Sets topic, extra user roles, and "consumer-group-prefix" in the relation
3145-
relation_data = {
3146-
f: getattr(self, f.replace("-", "_"), "")
3147-
for f in ["consumer-group-prefix", "extra-user-roles", "topic"]
3148-
}
3172+
relation_data = {"topic": self.relation_data.topic}
3173+
3174+
if self.relation_data.extra_user_roles:
3175+
relation_data["extra-user-roles"] = self.relation_data.extra_user_roles
3176+
3177+
if self.relation_data.consumer_group_prefix:
3178+
relation_data["consumer-group-prefix"] = self.relation_data.consumer_group_prefix
31493179

31503180
self.relation_data.update_relation_data(event.relation.id, relation_data)
31513181

@@ -3188,7 +3218,7 @@ def _on_relation_changed_event(self, event: RelationChangedEvent) -> None:
31883218
return
31893219

31903220

3191-
class KafkaRequires(KafkaRequiresData, KafkaRequiresEventHandlers):
3221+
class KafkaRequires(KafkaRequirerData, KafkaRequirerEventHandlers):
31923222
"""Provider-side of the Kafka relation."""
31933223

31943224
def __init__(
@@ -3200,7 +3230,7 @@ def __init__(
32003230
consumer_group_prefix: Optional[str] = None,
32013231
additional_secret_fields: Optional[List[str]] = [],
32023232
) -> None:
3203-
KafkaRequiresData.__init__(
3233+
KafkaRequirerData.__init__(
32043234
self,
32053235
charm.model,
32063236
relation_name,
@@ -3209,7 +3239,7 @@ def __init__(
32093239
consumer_group_prefix,
32103240
additional_secret_fields,
32113241
)
3212-
KafkaRequiresEventHandlers.__init__(self, charm, self)
3242+
KafkaRequirerEventHandlers.__init__(self, charm, self)
32133243

32143244

32153245
# Opensearch related events

0 commit comments

Comments
 (0)