Merge pull request #20381 from cpuguy83/20378_fix_multiple_deref

Fix issue with multiple volume refs with same name
This commit is contained in:
David Calavera 2016-02-18 13:51:10 -08:00
commit 319bbff799
2 changed files with 24 additions and 7 deletions

View File

@ -302,16 +302,14 @@ func (s *VolumeStore) Dereference(v volume.Volume, ref string) {
s.globalLock.Lock()
defer s.globalLock.Unlock()
refs, exists := s.refs[v.Name()]
if !exists {
return
}
var refs []string
for i, r := range refs {
if r == ref {
s.refs[v.Name()] = append(s.refs[v.Name()][:i], s.refs[v.Name()][i+1:]...)
for _, r := range s.refs[v.Name()] {
if r != ref {
refs = append(refs, r)
}
}
s.refs[v.Name()] = refs
}
// Refs gets the current list of refs for the given volume

View File

@ -157,3 +157,22 @@ func TestFilterByUsed(t *testing.T) {
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)
}
}