mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-11-02 18:22:40 +01:00
fuse integration: require a real mount before running tests
Setup creates the mount point before weed mount starts, so statting and listing it succeeded on the plain directory and tests ran against local disk whenever the mount was slow or died. waitForMount now waits until the mount point's device id differs from its parent's. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
5c7dfabcef
commit
18c27508f6
3 files changed
+32
-3
No files matched your search
@@ -376,11 +376,16 @@ func (f *FuseTestFramework) waitForService(addr string, timeout time.Duration) e
|
||||
|
||||
// waitForMount waits for the FUSE mount to be ready
|
||||
func (f *FuseTestFramework) waitForMount(timeout time.Duration) error {
|
||||
// The mount point is created before weed mount starts, so Stat/ReadDir
|
||||
// alone succeed on the plain directory. The device id only differs from
|
||||
// its parent's once a filesystem is actually mounted on it.
|
||||
parentDev, err := deviceID(filepath.Dir(f.mountPoint))
|
||||
if err != nil {
|
||||
return fmt.Errorf("stat mount parent: %w", err)
|
||||
}
|
||||
deadline := time.Now().Add(timeout)
|
||||
for time.Now().Before(deadline) {
|
||||
// Check if mount point is accessible
|
||||
if _, err := os.Stat(f.mountPoint); err == nil {
|
||||
// Try to list directory
|
||||
if dev, err := deviceID(f.mountPoint); err == nil && dev != parentDev {
|
||||
if _, err := os.ReadDir(f.mountPoint); err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
//go:build unix
|
||||
|
||||
package fuse
|
||||
|
||||
import "syscall"
|
||||
|
||||
// deviceID returns the device ID of the filesystem containing path.
|
||||
func deviceID(path string) (uint64, error) {
|
||||
var st syscall.Stat_t
|
||||
if err := syscall.Stat(path, &st); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return uint64(st.Dev), nil
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
//go:build !unix
|
||||
|
||||
package fuse
|
||||
|
||||
// FUSE mounts are unix-only: reporting one device keeps waitForMount from
|
||||
// mistaking the plain pre-mount directory for a live mount on platforms
|
||||
// where a mount can never appear.
|
||||
func deviceID(path string) (uint64, error) {
|
||||
return 0, nil
|
||||
}
|
||||
Reference in new issue
Block a user