Merge pull request #47530 from vvoland/flaky-liverestore

volume: Don't decrement refcount below 0
This commit is contained in:
Paweł Gronowski 2024-03-08 12:28:10 +01:00 committed by GitHub
commit db2263749b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 2 deletions

View file

@ -9,6 +9,7 @@ import (
"os"
"path/filepath"
"reflect"
"runtime/debug"
"strings"
"sync"
@ -334,8 +335,15 @@ func (v *localVolume) Unmount(id string) error {
// ultimately there's nothing that can be done. If we don't decrement the count
// this volume can never be removed until a daemon restart occurs.
if v.needsMount() {
v.active.count--
logger.WithField("active mounts", v.active).Debug("Decremented active mount count")
// TODO: Remove once the real bug is fixed: https://github.com/moby/moby/issues/46508
if v.active.count > 0 {
v.active.count--
logger.WithField("active mounts", v.active).Debug("Decremented active mount count")
} else {
logger.Error("An attempt to decrement a zero mount count")
logger.Error(string(debug.Stack()))
return nil
}
}
if v.active.count > 0 {

View file

@ -5,6 +5,7 @@ import (
"fmt"
"os"
"path/filepath"
"runtime/debug"
"syscall"
"github.com/containerd/log"
@ -88,6 +89,15 @@ func (m *MountPoint) Cleanup(ctx context.Context) error {
return nil
}
logger := log.G(ctx).WithFields(log.Fields{"active": m.active, "id": m.ID})
// TODO: Remove once the real bug is fixed: https://github.com/moby/moby/issues/46508
if m.active == 0 {
logger.Error("An attempt to decrement a zero mount count")
logger.Error(string(debug.Stack()))
return nil
}
for _, p := range m.safePaths {
if !p.IsValid() {
continue
@ -108,6 +118,8 @@ func (m *MountPoint) Cleanup(ctx context.Context) error {
}
m.active--
logger.Debug("MountPoint.Cleanup Decrement active count")
if m.active == 0 {
m.ID = ""
}