Skip to content

TestUsage broken on ZFS #172

@samuelkarp

Description

@samuelkarp

When I run TestUsage in the fs package with a temp dir on a ZFS mount, it fails like this:

$ TMPDIR=/testpool/tmp go test ./fs -v -run TestUsage
=== RUN   TestUsage
=== RUN   TestUsage/SingleSmallFile
=== PAUSE TestUsage/SingleSmallFile
=== RUN   TestUsage/MultipleSmallFile
=== PAUSE TestUsage/MultipleSmallFile
=== RUN   TestUsage/BiggerFiles
=== PAUSE TestUsage/BiggerFiles
=== RUN   TestUsage/SparseFiles
=== PAUSE TestUsage/SparseFiles
=== RUN   TestUsage/Hardlinks
=== PAUSE TestUsage/Hardlinks
=== RUN   TestUsage/HardlinkSparefile
=== PAUSE TestUsage/HardlinkSparefile
=== CONT  TestUsage/SingleSmallFile
    du_test.go:129: Wrong usage size 1536, expected 132096
=== CONT  TestUsage/HardlinkSparefile
=== CONT  TestUsage/SparseFiles
    du_test.go:129: Wrong usage size 2560, expected 525312
=== CONT  TestUsage/MultipleSmallFile
=== CONT  TestUsage/Hardlinks
=== CONT  TestUsage/BiggerFiles
=== CONT  TestUsage/HardlinkSparefile
    du_test.go:129: Wrong usage size 1536, expected 263168
=== CONT  TestUsage/MultipleSmallFile
    du_test.go:129: Wrong usage size 2048, expected 263168
=== CONT  TestUsage/Hardlinks
    du_test.go:129: Wrong usage size 1536, expected 132096
=== CONT  TestUsage/BiggerFiles
    du_test.go:129: Wrong usage size 2560, expected 394240
--- FAIL: TestUsage (0.00s)
    --- FAIL: TestUsage/SingleSmallFile (0.00s)
    --- FAIL: TestUsage/SparseFiles (0.00s)
    --- FAIL: TestUsage/Hardlinks (0.00s)
    --- FAIL: TestUsage/BiggerFiles (0.00s)
    --- FAIL: TestUsage/HardlinkSparefile (0.00s)
    --- FAIL: TestUsage/MultipleSmallFile (0.00s)
FAIL
FAIL	github.com/containerd/continuity/fs	0.006s
FAIL

If I add a sleep before DiskUsage is called, I get slightly different but still-failing results:

$ TMPDIR=/testpool/tmp go test ./fs -v -run TestUsage
=== RUN   TestUsage
=== RUN   TestUsage/SingleSmallFile
=== PAUSE TestUsage/SingleSmallFile
=== RUN   TestUsage/MultipleSmallFile
=== PAUSE TestUsage/MultipleSmallFile
=== RUN   TestUsage/BiggerFiles
=== PAUSE TestUsage/BiggerFiles
=== RUN   TestUsage/SparseFiles
=== PAUSE TestUsage/SparseFiles
=== RUN   TestUsage/Hardlinks
=== PAUSE TestUsage/Hardlinks
=== RUN   TestUsage/HardlinkSparefile
=== PAUSE TestUsage/HardlinkSparefile
=== CONT  TestUsage/SingleSmallFile
=== CONT  TestUsage/HardlinkSparefile
=== CONT  TestUsage/Hardlinks
=== CONT  TestUsage/SparseFiles
=== CONT  TestUsage/SingleSmallFile
    du_test.go:132: Wrong usage size 2048, expected 132096
=== CONT  TestUsage/HardlinkSparefile
    du_test.go:132: Wrong usage size 266752, expected 263168
=== CONT  TestUsage/BiggerFiles
=== CONT  TestUsage/MultipleSmallFile
=== CONT  TestUsage/Hardlinks
    du_test.go:132: Wrong usage size 62976, expected 132096
=== CONT  TestUsage/SparseFiles
    du_test.go:132: Wrong usage size 399360, expected 525312
=== CONT  TestUsage/BiggerFiles
    du_test.go:132: Wrong usage size 55296, expected 394240
=== CONT  TestUsage/MultipleSmallFile
    du_test.go:132: Wrong usage size 3072, expected 263168
--- FAIL: TestUsage (0.00s)
    --- FAIL: TestUsage/SingleSmallFile (5.00s)
    --- FAIL: TestUsage/HardlinkSparefile (5.00s)
    --- FAIL: TestUsage/Hardlinks (5.00s)
    --- FAIL: TestUsage/SparseFiles (5.00s)
    --- FAIL: TestUsage/BiggerFiles (5.00s)
    --- FAIL: TestUsage/MultipleSmallFile (5.00s)
FAIL
FAIL	github.com/containerd/continuity/fs	10.005s
FAIL

It looks like the DiskUsage function is working correctly, but the expected size calculation doesn't hold for how ZFS manages its blocks. This occurs both with OpenZFS on Ubuntu 16.04 and on FreeBSD 12.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions