open-nomad/scheduler
Mahmood Ali 1de395b42c
Fix preemption panic (#11346)
Fix a bug where the scheduler may panic when preemption is enabled. The conditions are a bit complicated:
A job with higher priority that schedule multiple allocations that preempt other multiple allocations on the same node, due to port/network/device assignments.

The cause of the bug is incidental mutation of internal cached data. `RankedNode` computes and cache proposed allocations  in https://github.com/hashicorp/nomad/blob/v1.1.6/scheduler/rank.go#L42-L53 . But scheduler then mutates the list to remove pre-emptable allocs in https://github.com/hashicorp/nomad/blob/v1.1.6/scheduler/rank.go#L293-L294, and  `RemoveAllocs` mutates and sets the tail of cached slice with `nil`s triggering a nil-pointer derefencing case.

I fixed the issue by avoiding the mutation in `RemoveAllocs` - the micro-optimization there doesn't seem necessary.

Fixes https://github.com/hashicorp/nomad/issues/11342
2021-10-19 20:22:03 -04:00
..
annotate.go scheduler: label loops with nested switch statements for effective break (#8528) 2020-07-24 08:50:41 -04:00
annotate_test.go Deprecate IOPS 2018-12-06 15:09:26 -08:00
context.go scheduler: fix panic when preempting and evicting 2019-12-02 20:22:22 -08:00
context_test.go Events/msgtype cleanup (#9117) 2020-10-19 09:30:15 -04:00
device.go Change types of weights on spread/affinity 2019-01-30 12:20:38 -08:00
device_test.go Change types of weights on spread/affinity 2019-01-30 12:20:38 -08:00
feasible.go add support for host network interpolation 2021-04-13 09:53:05 -04:00
feasible_test.go add support for host network interpolation 2021-04-13 09:53:05 -04:00
generic_sched.go core: implement system batch scheduler 2021-08-03 10:30:47 -04:00
generic_sched_test.go gofmt all the files 2021-10-01 10:14:28 -04:00
preemption.go Only preempt for network when there is a network 2019-06-07 18:55:55 -04:00
preemption_test.go Fix preemption panic (#11346) 2021-10-19 20:22:03 -04:00
propertyset.go server 2018-09-15 16:23:13 -07:00
rank.go chore: fix incorrect docstring formatting. 2021-08-30 11:08:12 +02:00
rank_test.go Allow configuring memory oversubscription (#10466) 2021-04-29 22:09:56 -04:00
reconcile.go core: propagate remote task handles 2021-04-27 15:07:03 -07:00
reconcile_test.go gofmt all the files 2021-10-01 10:14:28 -04:00
reconcile_util.go core: propagate remote task handles 2021-04-27 15:07:03 -07:00
reconcile_util_test.go removed deprecated fields from Drain structs and API 2021-03-21 15:30:11 +00:00
scheduler.go core: implement system batch scheduler 2021-08-03 10:30:47 -04:00
scheduler_oss.go gofmt all the files 2021-10-01 10:14:28 -04:00
scheduler_sysbatch_test.go test: use Len instead of Equal on system and sysbatch node constraint tests 2021-09-02 11:36:02 -04:00
scheduler_system.go scheduler: deep copy AllocMetric 2021-09-10 16:41:31 -07:00
scheduler_system_test.go test: use Len instead of Equal on system and sysbatch node constraint tests 2021-09-02 11:36:02 -04:00
select.go chore: fix incorrect docstring formatting. 2021-08-30 11:08:12 +02:00
select_test.go Implement affinity support in generic scheduler 2018-09-04 16:10:11 -05:00
spread.go More error->debug for logging in the bin packing iterator 2019-12-12 15:50:16 -06:00
spread_test.go Events/msgtype cleanup (#9117) 2020-10-19 09:30:15 -04:00
stack.go core: implement system batch scheduler 2021-08-03 10:30:47 -04:00
stack_not_ent.go gofmt all the files 2021-10-01 10:14:28 -04:00
stack_test.go core: implement system batch scheduler 2021-08-03 10:30:47 -04:00
testing.go tests: use standard library testing.TB 2021-06-09 16:18:45 -07:00
util.go allow configuration of Docker hostnames in bridge mode (#11173) 2021-09-16 08:13:09 +02:00
util_test.go gofmt all the files 2021-10-01 10:14:28 -04:00