canonical / pgbouncer-k8s-operator

A charmed operator for running PGbouncer on Kubernetes.
https://charmhub.io/pgbouncer-k8s
Apache License 2.0
7 stars 4 forks source link

Database relation breaks when pgbouncer-k8s rescales (external node connectivity) #288

Closed Zvirovyi closed 2 months ago

Zvirovyi commented 2 months ago

Steps to reproduce

  1. Deploy model:
    juju deploy postgresql-k8s --channel edge --config profile=testing -n3
    juju deploy pgbouncer-k8s --channel 1/edge
    juju deploy data-integrator --channel edge
    juju config data-integrator database-name=asd
    juju integrate data-integrator:postgresql pgbouncer-k8s:database
    juju integrate pgbouncer-k8s:backend-database postgresql-k8s:database
  2. See data-integrator / pgbouncer connection details (juju run data-integrator/leader get-credentials, jhack shows the same):
    ok: "True"
    postgresql:
      data: '{"database": "asd", "external-node-connectivity": "true", "requested-secrets":
        "[\"username\", \"password\", \"tls\", \"tls-ca\", \"uris\"]"}'
      database: asd
      endpoints: 192.168.2.102:31052
      password: CkXyspRPNIUGQzSZ01J41afQ
      read-only-endpoints: 192.168.2.102:31052
      username: relation_id_6
      version: "14.11"
  3. juju scale-application pgbouncer-k8s 2
  4. See data-integrator / pgbouncer bad connection details (i mean 192.168.2.102:-1):
    ok: "True"
    postgresql:
      data: '{"database": "asd", "external-node-connectivity": "true", "requested-secrets":
        "[\"username\", \"password\", \"tls\", \"tls-ca\", \"uris\"]"}'
      database: asd
      endpoints: 192.168.2.102:-1
      password: CkXyspRPNIUGQzSZ01J41afQ
      read-only-endpoints: 192.168.2.102:-1
      username: relation_id_6
      version: "14.11"

Expected behavior

Data-integrator must receive working DB connection details after pgbouncer rescale.

Actual behavior

When pgbouncer is scaled, data-integrator receives bad DB connection details. Also, i don't know if pgbouncer must assign real machine ip for data-integrator connection details. For postgresql-test-application (without external node connectivity), it works just fine assigning pgbouncer replicas in read-only-endpoints (although there is already issue about read-only-endpoints logic: https://github.com/canonical/pgbouncer-operator/issues/214).

Versions

Operating system: Ubuntu 24.04 LTS

Juju CLI: 3.5.0-genericlinux-amd64

Juju agent: 3.4.2

postgresql-k8s charm revision: 250 pgbouncer-k8s charm revision: 146

microk8s: MicroK8s v1.29.2 revision 6529

Log output

Juju debug log: log2.txt

github-actions[bot] commented 2 months ago

https://warthogs.atlassian.net/browse/DPE-4321

taurus-forever commented 2 months ago

Hi @Zvirovyi , thank you for the bugreport! It is a duplicate of https://warthogs.atlassian.net/browse/DPE-4236 .