Skip to content

Commit 6b81db4

Browse files
authored
Make Patroni TTL, LoopWait and RetryTimeout configurable (#385)
* Make Patroni TTL, LoopWait and RetryTimeout configurable, modify default values * Update tests * hardcode patroni loopwait, calculate patroni ttl
1 parent 5fe249b commit 6b81db4

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

api/v1/postgres_types.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ const (
6363

6464
teamIDPrefix = "pg"
6565

66+
DefaultPatroniParamValueLoopWait uint32 = 10
67+
DefaultPatroniParamValueRetryTimeout uint32 = 60
68+
6669
defaultPostgresParamValueTCPKeepAlivesIdle = "200"
6770
defaultPostgresParamValueTCPKeepAlivesInterval = "30"
6871
defaultPostgresParamValueLogFileMode = "0600"
@@ -482,7 +485,7 @@ func (p *Postgres) ToPeripheralResourceLookupKey() types.NamespacedName {
482485
}
483486
}
484487

485-
func (p *Postgres) ToUnstructuredZalandoPostgresql(z *zalando.Postgresql, c *corev1.ConfigMap, sc string, pgParamBlockList map[string]bool, rbs *BackupConfig, srcDB *Postgres) (*unstructured.Unstructured, error) {
488+
func (p *Postgres) ToUnstructuredZalandoPostgresql(z *zalando.Postgresql, c *corev1.ConfigMap, sc string, pgParamBlockList map[string]bool, rbs *BackupConfig, srcDB *Postgres, patroniTTL, patroniLoopWait, patroniRetryTimeout uint32) (*unstructured.Unstructured, error) {
486489
if z == nil {
487490
z = &zalando.Postgresql{}
488491
}
@@ -515,8 +518,9 @@ func (p *Postgres) ToUnstructuredZalandoPostgresql(z *zalando.Postgresql, c *cor
515518
z.Spec.Volume.Size = p.Spec.Size.StorageSize
516519
z.Spec.Volume.StorageClass = sc
517520

518-
// TODO make configurable?
519-
z.Spec.Patroni.TTL = 130
521+
z.Spec.Patroni.TTL = patroniTTL
522+
z.Spec.Patroni.LoopWait = patroniLoopWait
523+
z.Spec.Patroni.RetryTimeout = patroniRetryTimeout
520524
z.Spec.Patroni.SynchronousMode = true
521525
z.Spec.Patroni.SynchronousModeStrict = false
522526

api/v1/postgres_types_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ func TestPostgresRestoreTimestamp_ToUnstructuredZalandoPostgresql(t *testing.T)
349349
p := &Postgres{
350350
Spec: tt.spec,
351351
}
352-
got, _ := p.ToUnstructuredZalandoPostgresql(nil, tt.c, tt.sc, tt.pgParamBlockList, tt.rbs, tt.srcDB)
352+
got, _ := p.ToUnstructuredZalandoPostgresql(nil, tt.c, tt.sc, tt.pgParamBlockList, tt.rbs, tt.srcDB, 130, 10, 60)
353353

354354
jsonZ, err := runtime.DefaultUnstructuredConverter.ToUnstructured(got)
355355
if err != nil {

controllers/postgres_controller.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ type PostgresReconciler struct {
7171
SidecarsConfigMapName string
7272
EnableNetPol bool
7373
EtcdHost string
74+
PatroniTTL uint32
75+
PatroniLoopWait uint32
76+
PatroniRetryTimeout uint32
7477
}
7578

7679
// Reconcile is the entry point for postgres reconciliation.
@@ -247,7 +250,7 @@ func (r *PostgresReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
247250
return ctrl.Result{}, fmt.Errorf("error while creating sidecars servicemonitor %v: %w", namespace, err)
248251
}
249252

250-
if err := r.createOrUpdateZalandoPostgresql(ctx, instance, log, globalSidecarsCM); err != nil {
253+
if err := r.createOrUpdateZalandoPostgresql(ctx, instance, log, globalSidecarsCM, r.PatroniTTL, r.PatroniLoopWait, r.PatroniRetryTimeout); err != nil {
251254
r.recorder.Eventf(instance, "Warning", "Error", "failed to create Zalando resource: %v", err)
252255
return ctrl.Result{}, fmt.Errorf("failed to create or update zalando postgresql: %w", err)
253256
}
@@ -288,7 +291,7 @@ func (r *PostgresReconciler) SetupWithManager(mgr ctrl.Manager) error {
288291
Complete(r)
289292
}
290293

291-
func (r *PostgresReconciler) createOrUpdateZalandoPostgresql(ctx context.Context, instance *pg.Postgres, log logr.Logger, sidecarsCM *corev1.ConfigMap) error {
294+
func (r *PostgresReconciler) createOrUpdateZalandoPostgresql(ctx context.Context, instance *pg.Postgres, log logr.Logger, sidecarsCM *corev1.ConfigMap, patroniTTL, patroniLoopWait, patroniRetryTimout uint32) error {
292295
var restoreBackupConfig *pg.BackupConfig
293296
var restoreSouceInstance *pg.Postgres
294297
if instance.Spec.PostgresRestore != nil {
@@ -323,7 +326,7 @@ func (r *PostgresReconciler) createOrUpdateZalandoPostgresql(ctx context.Context
323326
return fmt.Errorf("failed to fetch zalando postgresql: %w", err)
324327
}
325328

326-
u, err := instance.ToUnstructuredZalandoPostgresql(nil, sidecarsCM, r.StorageClass, r.PgParamBlockList, restoreBackupConfig, restoreSouceInstance)
329+
u, err := instance.ToUnstructuredZalandoPostgresql(nil, sidecarsCM, r.StorageClass, r.PgParamBlockList, restoreBackupConfig, restoreSouceInstance, patroniTTL, patroniLoopWait, patroniRetryTimout)
327330
if err != nil {
328331
return fmt.Errorf("failed to convert to unstructured zalando postgresql: %w", err)
329332
}
@@ -339,7 +342,7 @@ func (r *PostgresReconciler) createOrUpdateZalandoPostgresql(ctx context.Context
339342
// Update zalando postgresql
340343
mergeFrom := client.MergeFrom(rawZ.DeepCopy())
341344

342-
u, err := instance.ToUnstructuredZalandoPostgresql(rawZ, sidecarsCM, r.StorageClass, r.PgParamBlockList, restoreBackupConfig, restoreSouceInstance)
345+
u, err := instance.ToUnstructuredZalandoPostgresql(rawZ, sidecarsCM, r.StorageClass, r.PgParamBlockList, restoreBackupConfig, restoreSouceInstance, patroniTTL, patroniLoopWait, patroniRetryTimout)
343346
if err != nil {
344347
return fmt.Errorf("failed to convert to unstructured zalando postgresql: %w", err)
345348
}

main.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const (
5757
sidecarsCMNameFlg = "sidecars-configmap-name"
5858
enableNetPolFlg = "enable-netpol"
5959
enablePodAntiaffinityFlg = "enable-pod-antiaffinity"
60+
patroniRetryTimeoutFlg = "patroni-retry-timeout"
6061
)
6162

6263
var (
@@ -78,6 +79,7 @@ func main() {
7879
var metricsAddrCtrlMgr, metricsAddrSvcMgr, partitionID, tenant, ctrlClusterKubeconfig, pspName, lbIP, storageClass, postgresImage, etcdHost, operatorImage, majorVersionUpgradeMode, postgresletNamespace, sidecarsCMName string
7980
var enableLeaderElection, enableCRDValidation, enableNetPol, enablePodAntiaffinity bool
8081
var portRangeStart, portRangeSize int
82+
var patroniTTL, patroniLoopWait, patroniRetryTimeout uint32
8183
var pgParamBlockList map[string]bool
8284
var standbyClusterSourceRanges []string
8385

@@ -159,6 +161,16 @@ func main() {
159161
viper.SetDefault(enablePodAntiaffinityFlg, false)
160162
enablePodAntiaffinity = viper.GetBool(enablePodAntiaffinityFlg)
161163

164+
// hard coded value
165+
patroniLoopWait = databasev1.DefaultPatroniParamValueLoopWait
166+
167+
// user defined value
168+
viper.SetDefault(patroniRetryTimeoutFlg, databasev1.DefaultPatroniParamValueRetryTimeout)
169+
patroniRetryTimeout = viper.GetUint32(patroniRetryTimeoutFlg)
170+
171+
// derived value
172+
patroniTTL = (2 * patroniRetryTimeout) + patroniLoopWait
173+
162174
ctrl.SetLogger(zap.New(zap.UseDevMode(true)))
163175

164176
ctrl.Log.Info("flag",
@@ -184,6 +196,7 @@ func main() {
184196
sidecarsCMNameFlg, sidecarsCMName,
185197
enableNetPolFlg, enableNetPol,
186198
enablePodAntiaffinityFlg, enablePodAntiaffinity,
199+
patroniRetryTimeoutFlg, patroniRetryTimeout,
187200
)
188201

189202
svcClusterConf := ctrl.GetConfigOrDie()
@@ -254,6 +267,9 @@ func main() {
254267
SidecarsConfigMapName: sidecarsCMName,
255268
EnableNetPol: enableNetPol,
256269
EtcdHost: etcdHost,
270+
PatroniTTL: patroniTTL,
271+
PatroniLoopWait: patroniLoopWait,
272+
PatroniRetryTimeout: patroniRetryTimeout,
257273
}).SetupWithManager(ctrlPlaneClusterMgr); err != nil {
258274
setupLog.Error(err, "unable to create controller", "controller", "Postgres")
259275
os.Exit(1)

0 commit comments

Comments
 (0)