Merge pull request #20381 from cpuguy83/20378_fix_multiple_deref
Fix issue with multiple volume refs with same name
This commit is contained in:
commit
319bbff799
|
@ -302,16 +302,14 @@ func (s *VolumeStore) Dereference(v volume.Volume, ref string) {
|
||||||
|
|
||||||
s.globalLock.Lock()
|
s.globalLock.Lock()
|
||||||
defer s.globalLock.Unlock()
|
defer s.globalLock.Unlock()
|
||||||
refs, exists := s.refs[v.Name()]
|
var refs []string
|
||||||
if !exists {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, r := range refs {
|
for _, r := range s.refs[v.Name()] {
|
||||||
if r == ref {
|
if r != ref {
|
||||||
s.refs[v.Name()] = append(s.refs[v.Name()][:i], s.refs[v.Name()][i+1:]...)
|
refs = append(refs, r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s.refs[v.Name()] = refs
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refs gets the current list of refs for the given volume
|
// Refs gets the current list of refs for the given volume
|
||||||
|
|
|
@ -157,3 +157,22 @@ func TestFilterByUsed(t *testing.T) {
|
||||||
t.Fatalf("expected used volume fake1, got %s", used[0].Name())
|
t.Fatalf("expected used volume fake1, got %s", used[0].Name())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDerefMultipleOfSameRef(t *testing.T) {
|
||||||
|
volumedrivers.Register(vt.NewFakeDriver("fake"), "fake")
|
||||||
|
|
||||||
|
s := New()
|
||||||
|
v, err := s.CreateWithRef("fake1", "fake", "volReference", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := s.GetWithRef("fake1", "fake", "volReference"); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Dereference(v, "volReference")
|
||||||
|
if err := s.Remove(v); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue