Skip to content

Commit 4bcfdfd

Browse files
Reorder map logic (#1042)
Signed-off-by: Marcelo Henrique Neppel <[email protected]>
1 parent 7418f52 commit 4bcfdfd

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed

src/charm.py

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
PostgreSQL,
5050
PostgreSQLEnableDisableExtensionError,
5151
PostgreSQLGetCurrentTimelineError,
52+
PostgreSQLListUsersError,
5253
PostgreSQLUpdateUserPasswordError,
5354
)
5455
from charms.postgresql_k8s.v0.postgresql_tls import PostgreSQLTLS
@@ -2304,33 +2305,47 @@ def client_relations(self) -> list[Relation]:
23042305
@property
23052306
def relations_user_databases_map(self) -> dict:
23062307
"""Returns a user->databases map for all relations."""
2308+
user_database_map = {}
2309+
# Copy relations users directly instead of waiting for them to be created
2310+
for relation in self.model.relations[self.postgresql_client_relation.relation_name]:
2311+
user = f"relation_id_{relation.id}"
2312+
if database := self.postgresql_client_relation.database_provides.fetch_relation_field(
2313+
relation.id, "database"
2314+
):
2315+
user_database_map[user] = database
23072316
if (
23082317
not self.is_cluster_initialised
23092318
or not self._patroni.member_started
23102319
or self.postgresql.list_access_groups(current_host=self.is_connectivity_enabled)
23112320
!= set(ACCESS_GROUPS)
23122321
):
2313-
return {USER: "all", REPLICATION_USER: "all", REWIND_USER: "all"}
2314-
user_database_map = {}
2315-
for user in self.postgresql.list_users_from_relation(
2316-
current_host=self.is_connectivity_enabled
2317-
):
2318-
user_database_map[user] = ",".join(
2319-
self.postgresql.list_accessible_databases_for_user(
2320-
user, current_host=self.is_connectivity_enabled
2321-
)
2322-
)
2323-
2324-
# Copy relations users directly instead of waiting for them to be created
2325-
for relation in self.model.relations[self.postgresql_client_relation.relation_name]:
2326-
user = f"relation_id_{relation.id}"
2327-
if user not in user_database_map and (
2328-
database := self.postgresql_client_relation.database_provides.fetch_relation_field(
2329-
relation.id, "database"
2330-
)
2322+
user_database_map.update({
2323+
USER: "all",
2324+
REPLICATION_USER: "all",
2325+
REWIND_USER: "all",
2326+
})
2327+
return user_database_map
2328+
try:
2329+
for user in sorted(
2330+
self.postgresql.list_users_from_relation(current_host=self.is_connectivity_enabled)
23312331
):
2332-
user_database_map[user] = database
2333-
return user_database_map
2332+
user_database_map[user] = ",".join(
2333+
self.postgresql.list_accessible_databases_for_user(
2334+
user, current_host=self.is_connectivity_enabled
2335+
)
2336+
)
2337+
if self.postgresql.list_access_groups(
2338+
current_host=self.is_connectivity_enabled
2339+
) != set(ACCESS_GROUPS):
2340+
user_database_map.update({
2341+
USER: "all",
2342+
REPLICATION_USER: "all",
2343+
REWIND_USER: "all",
2344+
})
2345+
return user_database_map
2346+
except PostgreSQLListUsersError:
2347+
logger.debug("relations_user_databases_map: Unable to get users")
2348+
return {USER: "all", REPLICATION_USER: "all", REWIND_USER: "all"}
23342349

23352350
@property
23362351
def generate_user_hash(self) -> str:

0 commit comments

Comments
 (0)