# HG changeset patch # User Sascha L. Teichmann # Date 1562256308 -7200 # Node ID d68c6be758b6039d5f778a2e5f4882f70891a978 # Parent 70a881045efdb6da1e1226e11033812650341518 Only trigger the reconfiguation functions if the values have changed. diff -r 70a881045efd -r d68c6be758b6 pkg/controllers/system.go --- a/pkg/controllers/system.go Thu Jul 04 17:44:39 2019 +0200 +++ b/pkg/controllers/system.go Thu Jul 04 18:05:08 2019 +0200 @@ -41,6 +41,11 @@ SELECT config_key, config_val FROM sys_admin.system_config` + getConfigSQL = ` +SELECT config_val +FROM sys_admin.system_config +WHERE config_key = $1` + updateSettingSQL = ` INSERT INTO sys_admin.system_config (config_key, config_val) VALUES ($1, $2) @@ -187,14 +192,28 @@ return } defer setStmt.Close() + var getStmt *sql.Stmt + if getStmt, err = tx.PrepareContext(ctx, getConfigSQL); err != nil { + return + } + defer getStmt.Close() reconfigure := map[string]func(){} for key, value := range *settings { + var old sql.NullString + err = getStmt.QueryRowContext(ctx, key).Scan(&old) + switch { + case err == sql.ErrNoRows: + old.Valid, err = false, nil + case err != nil: + return + } - // XXX: Only trigger this if the value really has changed. - if fn := reconfigureFunc(key); fn != nil { - reconfigure[key] = fn + if !old.Valid || old.String != value { + if fn := reconfigureFunc(key); fn != nil { + reconfigure[key] = fn + } } if _, err = setStmt.ExecContext(ctx, key, value); err != nil {