ResolveEffective layers CLI inputs on top of env vars on top of YAML on top of built-in defaults to produce the runtime config every duckgres binary boots from. getenv and warn are pluggable so unit tests can run without touching os.Getenv or stderr; nil maps to no-op equivalents.
(fileCfg *configloader.FileConfig, cli CLIInputs, getenv func(string) string, warn func(string))
| 175 | // top of built-in defaults to produce the runtime config every duckgres |
| 176 | // binary boots from. getenv and warn are pluggable so unit tests can run |
| 177 | // without touching os.Getenv or stderr; nil maps to no-op equivalents. |
| 178 | func ResolveEffective(fileCfg *configloader.FileConfig, cli CLIInputs, getenv func(string) string, warn func(string)) Resolved { |
| 179 | if getenv == nil { |
| 180 | getenv = func(string) string { return "" } |
| 181 | } |
| 182 | if warn == nil { |
| 183 | warn = func(string) {} |
| 184 | } |
| 185 | if cli.Set == nil { |
| 186 | cli.Set = map[string]bool{} |
| 187 | } |
| 188 | |
| 189 | cfg := DefaultServerConfig() |
| 190 | defaultQueryLog := cfg.QueryLog |
| 191 | workerQueueTimeout := 60 * time.Second |
| 192 | admissionReclaimerMaxReservations := controlplane.DefaultAdmissionReclaimerMaxReservations |
| 193 | var workerIdleTimeout time.Duration |
| 194 | var handoverDrainTimeout time.Duration |
| 195 | var processMinWorkers, processMaxWorkers int |
| 196 | var processRetireOnSessionEnd bool |
| 197 | var workerBackend string |
| 198 | // Connection-string worker-sizing config (all default to off/empty). |
| 199 | var k8sAllowClientWorkerProfile bool |
| 200 | var k8sWorkerProfileMinCPU, k8sWorkerProfileMaxCPU, k8sWorkerProfileMinMemory, k8sWorkerProfileMaxMemory string |
| 201 | var k8sWorkerMaxTTL, k8sWorkerDefaultTTL time.Duration |
| 202 | var k8sWorkerPriorityClassName string |
| 203 | var k8sPlaceholderImage, k8sPlaceholderPriorityClassName string |
| 204 | var k8sWorkerImage, k8sWorkerNamespace, k8sControlPlaneID string |
| 205 | var k8sWorkerPort int |
| 206 | var k8sWorkerSecret, k8sWorkerConfigMap, k8sWorkerImagePullPolicy string |
| 207 | k8sWorkerServiceAccount := controlplane.DefaultK8sWorkerServiceAccount |
| 208 | var k8sWorkerCPURequest, k8sWorkerMemoryRequest string |
| 209 | var k8sWorkerNodeSelector, k8sWorkerTolerationKey, k8sWorkerTolerationValue string |
| 210 | var k8sReshardPodCPU, k8sReshardPodMemory string |
| 211 | var k8sExploratoryTierEnabled bool |
| 212 | var k8sExploratoryWorkerCPU, k8sExploratoryWorkerMemory string |
| 213 | var k8sExploratoryWorkerTTL time.Duration |
| 214 | var awsRegion string |
| 215 | var configStoreConn string |
| 216 | var configPollInterval time.Duration |
| 217 | var internalSecret string |
| 218 | var internalSecretFallbacks []string |
| 219 | var readOnlySecret string |
| 220 | var readOnlySecretFallbacks []string |
| 221 | var userSecretKey string |
| 222 | var sniRoutingMode string |
| 223 | var managedHostnameSuffixes []string |
| 224 | var metadataHostnameSuffixes []string |
| 225 | metadataProxyMaxConnections := 20 |
| 226 | var ducklingBucketSuffix string |
| 227 | |
| 228 | if fileCfg != nil { |
| 229 | if fileCfg.Host != "" { |
| 230 | cfg.Host = fileCfg.Host |
| 231 | } |
| 232 | if fileCfg.Port != 0 { |
| 233 | cfg.Port = fileCfg.Port |
| 234 | } |