From d3db9c946ff462b40ad2ba7ac98eb1886e56403b Mon Sep 17 00:00:00 2001 From: apostasie Date: Mon, 5 Aug 2024 15:39:46 -0700 Subject: [PATCH] Debug VolumeLs failure on Windows Signed-off-by: apostasie --- pkg/lockutil/lockutil_windows.go | 11 ++++++++++- pkg/mountutil/volumestore/volumestore.go | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/lockutil/lockutil_windows.go b/pkg/lockutil/lockutil_windows.go index a269fc65716..ebc6af3a5bf 100644 --- a/pkg/lockutil/lockutil_windows.go +++ b/pkg/lockutil/lockutil_windows.go @@ -45,22 +45,31 @@ func WithDirLock(dir string, fn func() error) error { } func Lock(dir string) (*os.File, error) { + log.L.Error("[LOCK] About to lock", dir) dirFile, err := os.OpenFile(dir+".lock", os.O_CREATE, 0644) + log.L.Error("[LOCK] Opened", dir) if err != nil { return nil, err } // see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx // 1 lock immediately + log.L.Error("[LOCK] Locking", dir) if err = windows.LockFileEx(windows.Handle(dirFile.Fd()), 1, 0, 1, 0, &windows.Overlapped{}); err != nil { + log.L.Error("[LOCK] Failed", dir) return nil, fmt.Errorf("failed to lock %q: %w", dir, err) } + log.L.Error("[LOCK] Success", dir) return dirFile, nil } func Unlock(locked *os.File) error { + log.L.Error("[UNLOCK] About to close", locked.Name()) defer func() { _ = locked.Close() }() - return windows.UnlockFileEx(windows.Handle(locked.Fd()), 0, 1, 0, &windows.Overlapped{}) + log.L.Error("[UNLOCK] About to unlock", locked.Name()) + err := windows.UnlockFileEx(windows.Handle(locked.Fd()), 0, 1, 0, &windows.Overlapped{}) + log.L.Error("[UNLOCK] Unlocked", locked.Name()) + return err } diff --git a/pkg/mountutil/volumestore/volumestore.go b/pkg/mountutil/volumestore/volumestore.go index 627e78abafe..40432eae77b 100644 --- a/pkg/mountutil/volumestore/volumestore.go +++ b/pkg/mountutil/volumestore/volumestore.go @@ -217,9 +217,12 @@ func (vs *volumeStore) Get(name string, size bool) (*native.Volume, error) { var err error if vs.locked == nil { + log.L.Error("[VOLGET] NEED TO LOCK") err = lockutil.WithDirLock(vs.dir, fn) } else { + log.L.Error("[VOLGET] RUNNING (no extra locking)") err = fn() + log.L.Error("[VOLGET] DONE") } if err != nil { return nil, err @@ -234,6 +237,7 @@ func (vs *volumeStore) List(size bool) (map[string]native.Volume, error) { res := map[string]native.Volume{} fn := func() error { + log.L.Error("[VOLLS] running list") dirEntries, err := os.ReadDir(vs.dir) if err != nil { return fmt.Errorf("filesystem error while trying to list volumes from the volume store: %w", err) @@ -241,18 +245,23 @@ func (vs *volumeStore) List(size bool) (map[string]native.Volume, error) { for _, dirEntry := range dirEntries { name := dirEntry.Name() + log.L.Error("[VOLLS] going to get") vol, err := vs.Get(name, size) + log.L.Error("[VOLLS] done with get") if err != nil { return err } res[name] = *vol } + log.L.Error("[VOLLS] returning list") return nil } var err error // Since we are calling Get, we need to acquire a global lock + log.L.Error("[VOLLS] about to ls") if vs.locked == nil { + log.L.Error("[VOLLS] locking") err = vs.Lock() if err != nil { return nil, err