diff --git a/command/agent/command.go b/command/agent/command.go index 7546738e0..76663779a 100644 --- a/command/agent/command.go +++ b/command/agent/command.go @@ -285,6 +285,8 @@ func (c *Command) readConfig() *Config { config.PluginDir = filepath.Join(config.DataDir, "plugins") } + config.Server.DefaultSchedulerConfig.Canonicalize() + if !c.isValidConfig(config, cmdConfig) { return nil } diff --git a/nomad/fsm.go b/nomad/fsm.go index 39280a736..5ce00d388 100644 --- a/nomad/fsm.go +++ b/nomad/fsm.go @@ -1120,6 +1120,8 @@ func (n *nomadFSM) applySchedulerConfigUpdate(buf []byte, index uint64) interfac } defer metrics.MeasureSince([]string{"nomad", "fsm", "apply_scheduler_config"}, time.Now()) + req.Config.Canonicalize() + if req.CAS { applied, err := n.state.SchedulerCASConfig(index, req.Config.ModifyIndex, &req.Config) if err != nil { @@ -1417,6 +1419,7 @@ func (n *nomadFSM) Restore(old io.ReadCloser) error { if err := dec.Decode(schedConfig); err != nil { return err } + schedConfig.Canonicalize() if err := restore.SchedulerConfigRestore(schedConfig); err != nil { return err } diff --git a/nomad/fsm_test.go b/nomad/fsm_test.go index f8bbcd752..0682143b6 100644 --- a/nomad/fsm_test.go +++ b/nomad/fsm_test.go @@ -2823,6 +2823,7 @@ func TestFSM_SnapshotRestore_SchedulerConfiguration(t *testing.T) { fsm := testFSM(t) state := fsm.State() schedConfig := &structs.SchedulerConfiguration{ + SchedulerAlgorithm: "spread", PreemptionConfig: structs.PreemptionConfig{ SystemSchedulerEnabled: true, }, diff --git a/nomad/structs/operator.go b/nomad/structs/operator.go index 38d181176..0a250ec2c 100644 --- a/nomad/structs/operator.go +++ b/nomad/structs/operator.go @@ -162,6 +162,12 @@ func (s *SchedulerConfiguration) EffectiveSchedulerAlgorithm() SchedulerAlgorith return s.SchedulerAlgorithm } +func (s *SchedulerConfiguration) Canonicalize() { + if s != nil && s.SchedulerAlgorithm == "" { + s.SchedulerAlgorithm = SchedulerAlgorithmBinpack + } +} + func (s *SchedulerConfiguration) Validate() error { if s == nil { return nil