diff --git a/cmd/osbuild-composer/composer.go b/cmd/osbuild-composer/composer.go index 90fea6109..49b0cf710 100644 --- a/cmd/osbuild-composer/composer.go +++ b/cmd/osbuild-composer/composer.go @@ -15,6 +15,8 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" + logrus "github.com/sirupsen/logrus" + "github.com/osbuild/osbuild-composer/internal/auth" "github.com/osbuild/osbuild-composer/internal/cloudapi" "github.com/osbuild/osbuild-composer/internal/distroregistry" @@ -25,7 +27,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/weldr" "github.com/osbuild/osbuild-composer/internal/worker" - logrus "github.com/sirupsen/logrus" ) type Composer struct { @@ -77,6 +78,11 @@ func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string) (*Compos config.Worker.PGDatabase, config.Worker.PGSSLMode, ) + + if config.Worker.PGMaxConns > 0 { + dbURL += fmt.Sprintf("&pool_max_conns=%d", config.Worker.PGMaxConns) + } + jobs, err = dbjobqueue.New(dbURL) if err != nil { return nil, fmt.Errorf("cannot create jobqueue: %v", err) diff --git a/cmd/osbuild-composer/config.go b/cmd/osbuild-composer/config.go index d162cb9e3..e37a6de07 100644 --- a/cmd/osbuild-composer/config.go +++ b/cmd/osbuild-composer/config.go @@ -5,6 +5,7 @@ import ( "io" "os" "reflect" + "strconv" "github.com/BurntSushi/toml" ) @@ -44,6 +45,7 @@ type WorkerAPIConfig struct { PGUser string `toml:"pg_user" env:"PGUSER"` PGPassword string `toml:"pg_password" env:"PGPASSWORD"` PGSSLMode string `toml:"pg_ssl_mode" env:"PGSSLMODE"` + PGMaxConns int `toml:"pg_max_conns" env:"PGMAXCONNS"` EnableTLS bool `toml:"enable_tls"` EnableMTLS bool `toml:"enable_mtls"` EnableJWT bool `toml:"enable_jwt"` @@ -143,6 +145,20 @@ func loadConfigFromEnv(intf interface{}) error { continue } fieldV.SetString(confV) + case reflect.Int: + key, ok := fieldT.Tag.Lookup("env") + if !ok { + continue + } + confV, ok := os.LookupEnv(key) + if !ok { + continue + } + value, err := strconv.ParseInt(confV, 10, 64) + if err != nil { + return err + } + fieldV.SetInt(value) case reflect.Bool: // no-op continue