Skip to content

Commit

Permalink
scheduler: volume updates should always be destructive (#13008) (#13009)
Browse files Browse the repository at this point in the history
  • Loading branch information
hc-github-team-nomad-core committed May 13, 2022
1 parent 8a8188d commit 691f95c
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .changelog/13008.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
volumes: Fixed a bug where additions, updates, or removals of host volumes or CSI volumes were not treated as destructive updates
```
9 changes: 9 additions & 0 deletions scheduler/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,12 @@ func tasksUpdated(jobA, jobB *structs.Job, taskGroup string) bool {
return true
}

// Check if volumes are updated (no task driver can support
// altering mounts in-place)
if !reflect.DeepEqual(a.Volumes, b.Volumes) {
return true
}

// Check each task
for _, at := range a.Tasks {
bt := b.LookupTask(at.Name)
Expand Down Expand Up @@ -412,6 +418,9 @@ func tasksUpdated(jobA, jobB *structs.Job, taskGroup string) bool {
if !reflect.DeepEqual(at.CSIPluginConfig, bt.CSIPluginConfig) {
return true
}
if !reflect.DeepEqual(at.VolumeMounts, bt.VolumeMounts) {
return true
}

// Check the metadata
if !reflect.DeepEqual(
Expand Down
25 changes: 25 additions & 0 deletions scheduler/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,31 @@ func TestTasksUpdated(t *testing.T) {
j21.TaskGroups[0].Tasks[0].Resources.Cores = 4
require.True(t, tasksUpdated(j20, j21, name))

// Add a volume
j24 := mock.Job()
j25 := j24.Copy()
j25.TaskGroups[0].Volumes = map[string]*structs.VolumeRequest{
"myvolume": {
Name: "myvolume",
Type: "csi",
Source: "test-volume[0]",
}}
require.True(t, tasksUpdated(j24, j25, name))

// Alter a volume
j26 := j25.Copy()
j26.TaskGroups[0].Volumes["myvolume"].ReadOnly = true
require.True(t, tasksUpdated(j25, j26, name))

// Alter a CSI plugin
j27 := mock.Job()
j27.TaskGroups[0].Tasks[0].CSIPluginConfig = &structs.TaskCSIPluginConfig{
ID: "myplugin",
Type: "node",
}
j28 := j27.Copy()
j28.TaskGroups[0].Tasks[0].CSIPluginConfig.Type = "monolith"
require.True(t, tasksUpdated(j27, j28, name))
}

func TestTasksUpdated_connectServiceUpdated(t *testing.T) {
Expand Down

0 comments on commit 691f95c

Please sign in to comment.