Skip to content

Commit 4d58525

Browse files
authored
Add Patroni failsafe_mode parameter (#2076)
This commit adds support of a not-yet-released Patroni feature that allows postgres to run as primary in case of a failed leader lock update. * Add Patroni 'failsafe_mode' local parameter (enable for a single PG cluster) * Allow configuring Patroni 'failsafe_mode' parameter globally
1 parent 1d44dd4 commit 4d58525

File tree

22 files changed

+297
-50
lines changed

22 files changed

+297
-50
lines changed

charts/postgres-operator/crds/operatorconfigurations.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,12 @@ spec:
633633
type: string
634634
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
635635
default: "100Mi"
636+
patroni:
637+
type: object
638+
properties:
639+
failsafe_mode:
640+
type: boolean
641+
default: false
636642
status:
637643
type: object
638644
additionalProperties:

charts/postgres-operator/crds/postgresqls.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ spec:
320320
patroni:
321321
type: object
322322
properties:
323+
failsafe_mode:
324+
type: boolean
323325
initdb:
324326
type: object
325327
additionalProperties:

charts/postgres-operator/values.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,10 @@ configConnectionPooler:
409409
connection_pooler_default_cpu_limit: "1"
410410
connection_pooler_default_memory_limit: 100Mi
411411

412+
configPatroni:
413+
# enable Patroni DCS failsafe_mode feature
414+
failsafe_mode: false
415+
412416
# Zalando's internal CDC stream feature
413417
enableStreams: false
414418

docs/reference/cluster_manifest.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,9 @@ explanation of `ttl` and `loop_wait` parameters.
316316

317317
* **synchronous_node_count**
318318
Patroni `synchronous_node_count` parameter value. Note, this option is only available for Spilo images with Patroni 2.0+. The default is set to `1`. Optional.
319+
320+
* **failsafe_mode**
321+
Patroni `failsafe_mode` parameter value. If enabled, allows Patroni to cope with DCS outages and avoid leader demotion. Note, this option is currently not included in any Patroni release. The default is set to `false`. Optional.
319322

320323
## Postgres container resources
321324

e2e/tests/test_e2e.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,8 @@ def test_config_update(self):
407407
"ttl": 29,
408408
"loop_wait": 9,
409409
"retry_timeout": 9,
410-
"synchronous_mode": True
410+
"synchronous_mode": True,
411+
"failsafe_mode": True,
411412
}
412413
}
413414
}
@@ -434,6 +435,8 @@ def compare_config():
434435
"retry_timeout not updated")
435436
self.assertEqual(desired_config["synchronous_mode"], effective_config["synchronous_mode"],
436437
"synchronous_mode not updated")
438+
self.assertEqual(desired_config["failsafe_mode"], effective_config["failsafe_mode"],
439+
"failsafe_mode not updated")
437440
return True
438441

439442
# check if Patroni config has been updated

manifests/complete-postgres-manifest.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ spec:
109109
cpu: 500m
110110
memory: 500Mi
111111
patroni:
112+
failsafe_mode: false
112113
initdb:
113114
encoding: "UTF8"
114115
locale: "en_US.UTF-8"

manifests/configmap.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ data:
4747
enable_master_load_balancer: "false"
4848
enable_master_pooler_load_balancer: "false"
4949
enable_password_rotation: "false"
50+
# enable_patroni_failsafe_mode: "false"
5051
enable_pgversion_env_var: "true"
5152
# enable_pod_antiaffinity: "false"
5253
# enable_pod_disruption_budget: "true"

manifests/operatorconfiguration.crd.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,12 @@ spec:
631631
type: string
632632
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
633633
default: "100Mi"
634+
patroni:
635+
type: object
636+
properties:
637+
failsafe_mode:
638+
type: boolean
639+
default: false
634640
status:
635641
type: object
636642
additionalProperties:

manifests/postgresql-operator-default-configuration.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,5 @@ configuration:
198198
connection_pooler_number_of_instances: 2
199199
# connection_pooler_schema: "pooler"
200200
# connection_pooler_user: "pooler"
201+
patroni:
202+
# failsafe_mode: "false"

manifests/postgresql.crd.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ spec:
318318
patroni:
319319
type: object
320320
properties:
321+
failsafe_mode:
322+
type: boolean
321323
initdb:
322324
type: object
323325
additionalProperties:

0 commit comments

Comments
 (0)