From 94fb25467a28bd0b22a3a9c8f369e0c7e64278c8 Mon Sep 17 00:00:00 2001 From: Roman Vanicek Date: Sat, 6 Apr 2024 03:30:20 +0200 Subject: [PATCH] Dynamic primary --- main.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 5458b66..5497e14 100644 --- a/main.go +++ b/main.go @@ -414,11 +414,36 @@ func configure(state *global, messageSnapshot []pgpoolConfigMessage) { // Streaming Replication Check settings // https://www.pgpool.net/docs/latest/en/html/runtime-streaming-replication-check.html - conf["sr_check_user"] = getEnvOrDefault("PGPOOL_SR_CHECK_USER", "") - conf["sr_check_password"] = getEnvOrDefault("PGPOOL_SR_CHECK_PASSWORD", "") + srCheckUser := getEnvOrDefault("PGPOOL_SR_CHECK_USER", "") + srCheckPassword := getEnvOrDefault("PGPOOL_SR_CHECK_PASSWORD", "") + srCheckPasswordPath := os.Getenv("PGPOOL_SR_CHECK_PASSWORD_FILE") + if srCheckPasswordFile, err := os.Stat(srCheckPasswordPath); err == nil && !srCheckPasswordFile.IsDir() { + if v, err := os.ReadFile(srCheckPasswordPath); err == nil { + srCheckPassword = string(v) + } + } + conf["sr_check_user"] = srCheckUser + conf["sr_check_password"] = srCheckPassword conf["sr_check_period"] = getEnvOrDefaultInt("PGPOOL_SR_CHECK_PERIOD", 30) conf["sr_check_database"] = getEnvOrDefault("PGPOOL_SR_CHECK_DATABASE", "postgres") + // Healthcheck per node settings + // https://www.pgpool.net/docs/latest/en/html/runtime-config-health-check.html + conf["health_check_period"] = getEnvOrDefaultInt("PGPOOL_HEALTH_CHECK_PERIOD", 30) + conf["health_check_timeout"] = getEnvOrDefaultInt("PGPOOL_HEALTH_CHECK_TIMEOUT", 10) + conf["health_check_user"] = getEnvOrDefault("PGPOOL_HEALTH_CHECK_USER", srCheckUser) + hCheckPassword := getEnvOrDefault("PGPOOL_HEALTH_CHECK_PASSWORD", srCheckPassword) + hCheckPasswordPath := os.Getenv("PGPOOL_HEALTH_CHECK_PASSWORD_FILE") + if hCheckPasswordFile, err := os.Stat(hCheckPasswordPath); err == nil && !hCheckPasswordFile.IsDir() { + if v, err := os.ReadFile(hCheckPasswordPath); err == nil { + hCheckPassword = string(v) + } + } + conf["health_check_password"] = hCheckPassword + conf["health_check_max_retries"] = getEnvOrDefaultInt("PGPOOL_HEALTH_CHECK_MAX_RETRIES", 5) + conf["health_check_retry_delay"] = getEnvOrDefaultInt("PGPOOL_HEALTH_CHECK_RETRY_DELAY", 5) + conf["connect_timeout"] = getEnvOrDefaultInt("PGPOOL_CONNECT_TIMEOUT", 10000) + // Failover settings conf["failover_command"] = "echo \">>> Failover - that will initialize new primary node search!\"" conf["failover_on_backend_error"] = "off" @@ -527,7 +552,7 @@ func configure(state *global, messageSnapshot []pgpoolConfigMessage) { var flag string if isPrimary { - flag = "ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER" + flag = "DISALLOW_TO_FAILOVER" //"ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER" } else { flag = "DISALLOW_TO_FAILOVER" }