Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
a59a3a9
feat(watcher): add postgresql-watcher charm for stereo mode
marceloneppel Jan 27, 2026
9d847c3
feat(postgresql-watcher): replace charmed-postgresql snap with native…
marceloneppel Jan 28, 2026
cb8276c
fix(ha): use cut_network_from_unit for faster failover detection in s…
marceloneppel Jan 28, 2026
cb9cf56
fix(raft): improve IP change handling and watcher lifecycle management
marceloneppel Jan 29, 2026
1a0de53
fix(tests): auto-build watcher charm and deploy sequentially in stere…
marceloneppel Jan 29, 2026
41bae8f
fix(tests): improve stereo mode test stability and resilience
marceloneppel Jan 30, 2026
129041c
fix(tests): add use_ip_from_inside for stale IP handling and fix veri…
marceloneppel Jan 30, 2026
5010b04
fix(watcher): implement _onTick with TTL expiry logic for failover
marceloneppel Jan 30, 2026
e8ab990
fix(watcher): use hyphenated keys in health check action results
marceloneppel Jan 30, 2026
2c2e8d3
fix(watcher): add PostgreSQL user authentication and fix lint/test is…
marceloneppel Feb 2, 2026
5207e2b
test(stereo-mode): deploy 2 PostgreSQL units from start
marceloneppel Feb 2, 2026
d0def16
Update password management docs with Juju secrets (16) (#1379)
a-velasco Jan 28, 2026
27ad3d1
Update charmcraft.yaml build tools (#1399)
renovate[bot] Jan 28, 2026
1adbcbe
Lock file maintenance Python dependencies (#1400)
renovate[bot] Jan 28, 2026
dca0729
Update documentation home page (#1402)
a-velasco Jan 29, 2026
c31c613
Add new stable releases to releases.md (16) (#1405)
a-velasco Jan 30, 2026
05998f2
feat(stereo-mode): unify watcher into PostgreSQL charm with role config
marceloneppel Mar 5, 2026
1b6bde9
fix(watcher): set tracing_endpoint=None for @trace_charm compatibility
marceloneppel Mar 5, 2026
04ed58b
[DPE-9158] Limit repo listing to find the timelines (#1403)
dragomirp Feb 3, 2026
f86f7be
[DPE-8932] Strict mode configuration (#1389)
dragomirp Feb 3, 2026
a48b62c
Update dependency pip to v26 (#1416)
renovate[bot] Feb 3, 2026
ddddb82
Update charmcraft.yaml build tools (#1415)
renovate[bot] Feb 3, 2026
b41c940
Update canonical/data-platform-workflows action to v41.1.1 (#1414)
renovate[bot] Feb 3, 2026
ee92abd
Lock file maintenance Python dependencies (#1417)
renovate[bot] Feb 3, 2026
3cf43e0
Remove arm jammy image pinning (#1391)
dragomirp Feb 3, 2026
5fdded7
Switch to ty for typechecking (#1422)
dragomirp Feb 5, 2026
07a4a8c
[MISC] Move TLS transfer to single kernel (#1410)
dragomirp Feb 5, 2026
7e3dfd4
Add information about custom usernames (#1409)
a-velasco Feb 6, 2026
1efa3b5
DPE-8980 Support Juju 4: use 'ip' instead of 'private-address' (if av…
taurus-forever Feb 6, 2026
5179d17
DPE-8900 Fix CIDR mask for self_ip (peer_ip in pg_hba) (#1424)
taurus-forever Feb 9, 2026
814042f
[DPE-9370] Handle retry error in bulk update (#1427)
dragomirp Feb 9, 2026
fe227c8
Update canonical/data-platform-workflows action to v41.1.2 (#1430)
renovate[bot] Feb 10, 2026
ecd3dc0
Lock file maintenance Python dependencies (#1432)
renovate[bot] Feb 10, 2026
5c350ab
Update charmcraft.yaml build tools (#1431)
renovate[bot] Feb 10, 2026
4246a1f
[MISC] Bump charm libs (#1434)
dragomirp Feb 11, 2026
5beda93
Add optional flags to provides endpoints for PG16 VM (#1435)
taurus-forever Feb 12, 2026
12f8039
Sync renovate config changes (#1447)
dragomirp Feb 13, 2026
783ebf0
Update canonical/data-platform-workflows action to v42 (#1456)
renovate[bot] Feb 17, 2026
f0a3000
Lock file maintenance (#1457)
renovate[bot] Feb 17, 2026
df73f1d
Update charmcraft.yaml build tools (#1454)
renovate[bot] Feb 17, 2026
8edda3b
Add CODEOWNERS (#1464)
carlcsaposs-canonical Feb 18, 2026
7cc34b6
Check if bucket key is present (#1462)
dragomirp Feb 18, 2026
7c20dc8
Update Python dependencies (16/edge) (#1455)
renovate[bot] Feb 19, 2026
0b98afd
feat: multiple Patroni primaries alert (#1460)
Deezzir Feb 23, 2026
55cc98a
Lock file maintenance (#1480)
renovate[bot] Feb 24, 2026
b590e22
Revert COS agent lib (#1472)
dragomirp Feb 24, 2026
3a4e8ff
Update Python dependencies (#1479)
renovate[bot] Feb 24, 2026
0e40e4e
Update dependency uv to v0.10.5 (#1478)
renovate[bot] Feb 24, 2026
bacf191
fix(monitoring): add _total suffix to PostgreSQL counter metrics in G…
marceloneppel Feb 26, 2026
946c56c
[DPE-9443] Switch to ops tracing (16/edge) (#1466)
dragomirp Feb 26, 2026
95de21b
Update COS agent lib (#1486)
dragomirp Feb 27, 2026
67c41f4
Remove bind mounts (#1488)
dragomirp Mar 2, 2026
ee30e2f
Update canonical/data-platform-workflows action to v42.0.1 (#1495)
renovate[bot] Mar 3, 2026
8bb657f
Update GitHub actions (#1498)
renovate[bot] Mar 3, 2026
784628f
Lock file maintenance (#1499)
renovate[bot] Mar 3, 2026
f61170f
Update Python dependencies (#1497)
renovate[bot] Mar 3, 2026
66a1366
Update dependency uv to v0.10.7 (#1496)
renovate[bot] Mar 3, 2026
56e99bd
Add v16/1.206.0 to refresh docs (#1500)
carlcsaposs-canonical Mar 3, 2026
0e47bb4
Add new 16/stable revisions to releases.md (#1503)
a-velasco Mar 4, 2026
5df6d89
[DPE-9479] Test app channel and base/series (16/edge) (#1505)
dragomirp Mar 5, 2026
258f6b9
[DPE-9455] Bump PostgreSQL to 16.13 (#1509)
taurus-forever Mar 5, 2026
9b6293e
fix(tests): add idempotency to stereo mode test relations
marceloneppel Mar 6, 2026
0a43d15
feat(watcher): add multi-cluster support with per-relation Raft insta…
marceloneppel Mar 10, 2026
dc05fb5
Merge remote-tracking branch 'origin/16/edge' into stereo-mode-unifie…
marceloneppel Mar 10, 2026
df0246d
Merge remote-tracking branch 'origin/16/edge' into stereo-mode-unifie…
marceloneppel Mar 16, 2026
68ab8ef
feat: replace custom Raft with Patroni's raft_controller
marceloneppel Mar 16, 2026
2a30d01
refactor(watcher): install snap from store instead of bundling
marceloneppel Mar 16, 2026
8118c85
test(async-replication): add stereo mode tests for async replication …
marceloneppel Mar 17, 2026
184bc68
Merge remote-tracking branch 'origin/16/edge' into stereo-mode-unifie…
marceloneppel Mar 23, 2026
fcc50af
Downgrade amd runners to jammy
dragomirp Apr 1, 2026
31cdd4d
fix(watcher): harden stereo-mode watcher implementation
marceloneppel Apr 7, 2026
e3b3d65
Merge branch '16/edge' into stereo-mode-unified-charm
marceloneppel Apr 7, 2026
cfe8613
style: format files for lint
marceloneppel Apr 7, 2026
af54ea4
fix: satisfy ty in lint job
marceloneppel Apr 7, 2026
79f4d67
fix(watcher): fall back to loopback raft status probe
marceloneppel Apr 8, 2026
2a88644
Run watcher raft controller under patroni profile
marceloneppel Apr 8, 2026
1745750
Merge remote-tracking branch 'origin/16/edge' into stereo-mode-unifie…
marceloneppel Apr 9, 2026
32333fd
feat(watcher): improve Raft quorum management, enrich cluster status …
marceloneppel Apr 14, 2026
187f342
refactor: decompose _format_cluster_status into focused helper methods
marceloneppel Apr 14, 2026
fc3b806
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 16, 2026
4dc69f5
Rendering WIP
dragomirp Apr 17, 2026
d40037e
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 17, 2026
cfbb387
Dir permissions
dragomirp Apr 18, 2026
56bc4ce
Switch to systemd charmlib
dragomirp Apr 18, 2026
79ba856
Try to fall into existing refresh logic
dragomirp Apr 20, 2026
1c2c0e6
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 20, 2026
439e345
Persist port mapping in peer data and use systemd template
dragomirp Apr 20, 2026
80d1906
Remove data dir on rel removal
dragomirp Apr 20, 2026
cfd9cd8
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 21, 2026
a68ec9b
Parse yaml
dragomirp Apr 21, 2026
366403a
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 21, 2026
7f24ec5
Cleanup sycobj imports
dragomirp Apr 21, 2026
0b3b5f4
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 21, 2026
b4f5c14
Deep import and cleanup
dragomirp Apr 21, 2026
0510e5e
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 22, 2026
b89b13e
Revert iptables ip code
dragomirp Apr 22, 2026
24051ba
Call patroni for additional details
dragomirp Apr 23, 2026
9aaafc7
Merge branch '16/edge' into dragop/stereo-mode-unified-charm
dragomirp Apr 23, 2026
e559bd9
Factor out parallel calls
dragomirp Apr 24, 2026
67d81e2
Merge RAFT controller and Health checker
dragomirp Apr 24, 2026
9454839
Merge branch 'stereo-mode-additive-code' into dragop/stereo-mode-unif…
dragomirp Apr 24, 2026
be949bf
Try to clean up role changes code
dragomirp Apr 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions actions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,20 @@ restore:
restore-to-time:
type: string
description: Point-in-time-recovery target in PSQL format.
get-cluster-status:
description: Display cluster topology, PostgreSQL units health status, and Raft cluster state.
Only available when role=watcher.
params:
cluster-name:
type: string
description: |
The name of the cluster to filter the output by.
Useful in async-replication (Disaster Recovery) setups where multiple clusters are related.
standby-clusters:
type: boolean
default: false
description: |
Show status information including linked standby clusters (async replication).
trigger-health-check:
description: Manually trigger health checks on PostgreSQL endpoints and return results.
Only available when role=watcher.
8 changes: 8 additions & 0 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
# See LICENSE file for licensing details.

options:
role:
description: |
Deployment role for this application. Set at deploy time and cannot be changed afterwards.
"postgresql" (default) runs the full PostgreSQL database server with Patroni.
"watcher" runs a lightweight Raft witness for stereo mode (2-node clusters),
providing quorum without running PostgreSQL.
type: string
default: "postgresql"
synchronous-node-count:
description: |
Sets the number of synchronous nodes to be maintained in the cluster. Should be
Expand Down
6 changes: 6 additions & 0 deletions metadata.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,14 @@ provides:
interface: cos_agent
limit: 1
optional: true
watcher-offer:
interface: postgresql_watcher
limit: 1

requires:
watcher:
interface: postgresql_watcher
optional: true
replication:
interface: postgresql_async
limit: 1
Expand Down
Loading
Loading