A FileSystem Abstraction System for Go
5070 448 91 188

MemMapFS: missing files after write multi files in concurrency

I have used afero.MemMapFs for filesystem mock test in my projects. But I got some unexpected test results.

I want to list all files in target directory that I have wrote multi files in concurrency before. Occasionally some files are not returned by Readdir function. Also I had the same problem calling Walk function on this directory.

Here is a test to reproduce my problem.

failure result:

❯ go test -race -run ^TestListFilesAfterConcurrencyFileWrite$ ./... -test.count 1
--- FAIL: TestListFilesAfterConcurrencyFileWrite (4.39s)
                Error Trace:    memmap_test.go:99
                Error:          Not equal: 
                                expected: 10000
                                actual  : 9995
                Test:           TestListFilesAfterConcurrencyFileWrite
                Messages:       missing files
FAIL     4.677s

I notice another issue #298 that found MemMapFs.Mkdir have problem when call in concurrency. In my opinion, we need a double check here before we create new directory.

So I send a PR for this.


  1. Your failing test case looks correct to me (as in, it should not fail), which comes a little as a surprise to mek as I use this pretty concurrently myself ... It's not obvious to me why, though.

    I also agree about the Mkdir bug, assuming that that's how most sane real file systems work?