Fix issue with multiple volume refs with same name

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 0fe31306d1c1c93c4ef33654f7a37932296cf8a6
Component: engine
This commit is contained in:
Brian Goff
2016-02-16 21:46:13 -05:00
parent e9b00fc7ff
commit 5b28f437b0
2 changed files with 24 additions and 7 deletions
+5 -7
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
@@ -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)
}
}