From 7058ea8d3067b109e1e7fe4e04f17b667252539f Mon Sep 17 00:00:00 2001 From: Lucas Manning Date: Tue, 31 Jan 2023 12:38:08 -0800 Subject: [PATCH] Fix flakiness in FUSE syscall tests. PiperOrigin-RevId: 506082577 --- test/runner/fuse/BUILD | 1 + test/runner/fuse/fuse.go | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/test/runner/fuse/BUILD b/test/runner/fuse/BUILD index 5211d33d4..023bb9513 100644 --- a/test/runner/fuse/BUILD +++ b/test/runner/fuse/BUILD @@ -8,6 +8,7 @@ go_binary( visibility = ["//test/runner:__subpackages__"], deps = [ "//pkg/log", + "//runsc/specutils", "@com_github_hanwen_go_fuse_v2//fs:go_default_library", "@com_github_hanwen_go_fuse_v2//fuse:go_default_library", ], diff --git a/test/runner/fuse/fuse.go b/test/runner/fuse/fuse.go index fd1bf99ec..298408b6c 100644 --- a/test/runner/fuse/fuse.go +++ b/test/runner/fuse/fuse.go @@ -23,6 +23,7 @@ import ( "github.com/hanwen/go-fuse/v2/fs" "github.com/hanwen/go-fuse/v2/fuse" "gvisor.dev/gvisor/pkg/log" + "gvisor.dev/gvisor/runsc/specutils" ) func main() { @@ -44,7 +45,14 @@ func main() { server.Unmount() server.Wait() }() - if err := server.WaitMount(); err != nil { + // TODO(b/267200022): Investigate why gofuse pollHack sometimes fails with + // EINTR. + if _, _, err := specutils.RetryEintr(func() (uintptr, uintptr, error) { + if err := server.WaitMount(); err != nil { + return 0, 0, err + } + return 0, 0, nil + }); err != nil { // We don't shutdown the serve loop. If the mount does // not succeed, the loop won't work and exit. log.Warningf(`Could not mount fuse submount "/tmp": %v`, err)