ZFS: dedup toggle per pool and dedup option for new datasets
build / build (push) Successful in 1m4s
build / build (push) Successful in 1m4s
Pool cards show the dedup ratio and can set dedup=on|off on the pool root dataset (inherited by children); the new-dataset form gets a dedup option. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,9 @@ func TestValidators(t *testing.T) {
|
||||
if ValidateCompression("gzip") == nil || ValidateCompression("lz4") != nil || ValidateCompression("") != nil {
|
||||
t.Error("compression validation")
|
||||
}
|
||||
if ValidateDedup("verify") == nil || ValidateDedup("on") != nil || ValidateDedup("") != nil {
|
||||
t.Error("dedup validation")
|
||||
}
|
||||
if ValidateOwner("ansible") == nil || ValidateOwner("1000:1000") != nil || ValidateOwner("") != nil {
|
||||
t.Error("owner validation")
|
||||
}
|
||||
@@ -74,6 +77,16 @@ func TestCreate(t *testing.T) {
|
||||
t.Errorf("calls:\n%s\nwant:\n%s", strings.Join(f.calls, "\n"), strings.Join(want, "\n"))
|
||||
}
|
||||
|
||||
// dedup goes between compression and quota
|
||||
f = &fake{}
|
||||
a = New(f.run)
|
||||
if err := a.Create("tank/d", CreateOpts{Compression: "zstd", Dedup: "on", Quota: "1T"}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(f.calls) != 1 || f.calls[0] != "zfs create -p -o compression=zstd -o dedup=on -o quota=1T tank/d" {
|
||||
t.Errorf("calls = %v", f.calls)
|
||||
}
|
||||
|
||||
// no owner, inherit everything
|
||||
f = &fake{}
|
||||
a = New(f.run)
|
||||
@@ -115,6 +128,28 @@ func TestCreate(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetDedup(t *testing.T) {
|
||||
f := &fake{}
|
||||
a := New(f.run)
|
||||
for _, c := range [][2]string{{"tank/x", "on"}, {"tank", "verify"}, {"tank", ""}, {"-tank", "on"}, {"", "off"}} {
|
||||
if err := a.SetDedup(c[0], c[1]); err == nil {
|
||||
t.Errorf("%q=%q accepted", c[0], c[1])
|
||||
}
|
||||
}
|
||||
if len(f.calls) != 0 {
|
||||
t.Errorf("rejected input ran commands: %v", f.calls)
|
||||
}
|
||||
if err := a.SetDedup("tank", "on"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := a.SetDedup("tank", "off"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if strings.Join(f.calls, "|") != "zfs set dedup=on tank|zfs set dedup=off tank" {
|
||||
t.Errorf("calls = %v", f.calls)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDestroyEmpty(t *testing.T) {
|
||||
ok := map[string]string{"zfs list -Hp -r -t filesystem": "tank/x\t98304", "zfs list -H -t snapshot": ""}
|
||||
f := &fake{reply: ok}
|
||||
|
||||
Reference in New Issue
Block a user