From 02d14a685ec6099b493b9996e42c17821a4f9be6 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Thu, 2 Apr 2015 11:19:56 +1100 Subject: [PATCH] Added a random delays feature for #8. --- fuseutil/file_system.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fuseutil/file_system.go b/fuseutil/file_system.go index 95cfe20..e96de72 100644 --- a/fuseutil/file_system.go +++ b/fuseutil/file_system.go @@ -15,12 +15,19 @@ package fuseutil import ( + "flag" "io" + "math/rand" + "time" "github.com/jacobsa/fuse" "github.com/jacobsa/fuse/fuseops" ) +var fRandDelays = flag.Bool( + "fuseutil.rand_delays", false, + "If set, randomly delay each op received, to help expose concurrency issues.") + // An interface with a method for each op type in the fuseops package. This can // be used in conjunction with NewFileSystemServer to avoid writing a "dispatch // loop" that switches on op types, instead receiving typed method calls @@ -109,6 +116,14 @@ func (s fileSystemServer) ServeOps(c *fuse.Connection) { } func (s fileSystemServer) handleOp(op fuseops.Op) { + // Delay if requested. + if *fRandDelays { + const delayLimit = 100 * time.Microsecond + delay := time.Duration(rand.Int63n(int64(delayLimit))) + time.Sleep(delay) + } + + // Dispatch to the appropriate method. switch typed := op.(type) { default: op.Respond(fuse.ENOSYS)