Skip to content

feat(config): port PostgreSQL parameter building + resource introspection (2/6)#182

Draft
marceloneppel wants to merge 1 commit into
skl-01-update-config-1-peer-accessorsfrom
skl-01-update-config-2-params
Draft

feat(config): port PostgreSQL parameter building + resource introspection (2/6)#182
marceloneppel wants to merge 1 commit into
skl-01-update-config-1-peer-accessorsfrom
skl-01-update-config-2-params

Conversation

@marceloneppel

@marceloneppel marceloneppel commented Jul 11, 2026

Copy link
Copy Markdown
Member

Issue

update_config builds PostgreSQL's bootstrap.dcs.postgresql.parameters from the unit's CPU and memory, which both charms compute per substrate. This step ports the parameter builder and the substrate resource introspection it depends on.

Solution

  • managers/config.py: _build_postgresql_parameters with the _calculate_max_* helpers and _calculate_worker_process_config(cpu_cores).
  • Workload get_available_resources() -> tuple[int, int] — VM reads os.cpu_count() and available memory; K8s reads the node/pod via lightkube and raises DeployedWithoutTrustError on a 403 ApiError.
  • New k8s optional extra (lightkube, lightkube-models) mirroring the existing vm extra, plus a regenerated uv.lock.

DeployedWithoutTrustError is raised here and caught at the charm/event layer in the charm-adoption PR (managers-raise convention). Second (code-only) PR in the update_config stack; the K8sWorkload signature gains unit_name/namespace, so the one-line fixture update needed to keep the suite green rides with the code, and the new unit tests land in the stack's test PR (#188).

Checklist

  • I have added or updated any relevant documentation.
  • I have cleaned any remaining cloud resources from my accounts.

@marceloneppel
marceloneppel force-pushed the skl-01-update-config-1-peer-accessors branch from 22d4f17 to 10eea18 Compare July 20, 2026 13:22
@marceloneppel
marceloneppel force-pushed the skl-01-update-config-2-params branch from a7ee622 to 786d9bd Compare July 20, 2026 13:22
@marceloneppel marceloneppel changed the title feat(config): port PostgreSQL parameter building + resource introspection feat(config): port PostgreSQL parameter building + resource introspection (2/5) Jul 20, 2026
@marceloneppel marceloneppel changed the title feat(config): port PostgreSQL parameter building + resource introspection (2/5) feat(config): port PostgreSQL parameter building + resource introspection (2/6) Jul 20, 2026
…tion

Internalizes PostgreSQL parameter calculation (worker-process auto/cap
rules, wal_compression, memory-limit conversion) into the library so
ConfigManager owns the full config-build flow instead of stopping at a
TODO. Resource discovery (cpu_cores, memory_bytes) moves onto the
workload rather than a substrate-specific manager: get_available_memory
already lives there, ConfigManager already holds self.workload, and
K8sManager doesn't exist yet when ConfigManager is constructed in
abstract_charm - so the workload is the only place both substrates can
share a single no-branch call site.

K8sWorkload gains required unit_name/namespace constructor args so its
lightkube Pod/Node lookups can resolve "my own pod" without depending on
a charm object reference, mirroring what the K8s charm does today via
self.unit.name/self.model.name. lightkube becomes a real (not merely
transitive) dependency via a new k8s pyproject extra, matching the
version pins the K8s test charm already uses.

Signed-off-by: Marcelo Henrique Neppel <marcelo.neppel@canonical.com>
@marceloneppel
marceloneppel force-pushed the skl-01-update-config-1-peer-accessors branch from 10eea18 to ee47a46 Compare July 20, 2026 19:04
@marceloneppel
marceloneppel force-pushed the skl-01-update-config-2-params branch from 786d9bd to ddf2305 Compare July 20, 2026 19:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant