mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-21 02:33:32 +00:00
Prefer root mountpoint for ZFS summaries
This commit is contained in:
@@ -328,14 +328,17 @@ func bestZFSMountpoints(datasets []zfsDatasetUsage) map[string]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func zfsMountpointScore(ds zfsDatasetUsage) int {
|
func zfsMountpointScore(ds zfsDatasetUsage) int {
|
||||||
if ds.Dataset != "" && !strings.Contains(ds.Dataset, "/") {
|
if strings.TrimSpace(ds.Mountpoint) == "/" {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
if ds.Dataset != "" && !strings.Contains(ds.Dataset, "/") {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
path := strings.Trim(ds.Mountpoint, "/")
|
path := strings.Trim(ds.Mountpoint, "/")
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return 1
|
return 0
|
||||||
}
|
}
|
||||||
return 1 + strings.Count(path, "/")
|
return 2 + strings.Count(path, "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
func zfsPoolFromDevice(device string) string {
|
func zfsPoolFromDevice(device string) string {
|
||||||
|
|||||||
@@ -593,6 +593,14 @@ func TestBestZFSMountpoints(t *testing.T) {
|
|||||||
},
|
},
|
||||||
want: map[string]string{"rpool": "/"},
|
want: map[string]string{"rpool": "/"},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "root mountpoint beats pool root mounted elsewhere",
|
||||||
|
datasets: []zfsDatasetUsage{
|
||||||
|
{Pool: "rpool", Dataset: "rpool", Mountpoint: "/mnt/storage"},
|
||||||
|
{Pool: "rpool", Dataset: "rpool/ROOT/pve-1", Mountpoint: "/"},
|
||||||
|
},
|
||||||
|
want: map[string]string{"rpool": "/"},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "skip empty pool",
|
name: "skip empty pool",
|
||||||
datasets: []zfsDatasetUsage{
|
datasets: []zfsDatasetUsage{
|
||||||
@@ -651,39 +659,44 @@ func TestZfsMountpointScore(t *testing.T) {
|
|||||||
want int
|
want int
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "root dataset gets score 0",
|
name: "root mountpoint gets score 0",
|
||||||
ds: zfsDatasetUsage{Dataset: "tank", Mountpoint: "/tank"},
|
ds: zfsDatasetUsage{Dataset: "rpool/ROOT/ubuntu", Mountpoint: "/"},
|
||||||
want: 0,
|
want: 0,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "root dataset mounted elsewhere gets score 1",
|
||||||
|
ds: zfsDatasetUsage{Dataset: "tank", Mountpoint: "/tank"},
|
||||||
|
want: 1,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "child dataset at root mountpoint",
|
name: "child dataset at root mountpoint",
|
||||||
ds: zfsDatasetUsage{Dataset: "rpool/ROOT/ubuntu", Mountpoint: "/"},
|
ds: zfsDatasetUsage{Dataset: "rpool/ROOT/ubuntu", Mountpoint: "/"},
|
||||||
want: 1, // path empty after trim("/"), returns 1
|
want: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "child dataset shallow path",
|
name: "child dataset shallow path",
|
||||||
ds: zfsDatasetUsage{Dataset: "tank/data", Mountpoint: "/data"},
|
ds: zfsDatasetUsage{Dataset: "tank/data", Mountpoint: "/data"},
|
||||||
want: 1, // path="data" has 0 slashes, 1+0=1
|
want: 2, // non-root mountpoints rank after / and pool root datasets
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "child dataset deep path",
|
name: "child dataset deep path",
|
||||||
ds: zfsDatasetUsage{Dataset: "tank/a/b/c", Mountpoint: "/a/b/c"},
|
ds: zfsDatasetUsage{Dataset: "tank/a/b/c", Mountpoint: "/a/b/c"},
|
||||||
want: 3, // path="a/b/c" has 2 slashes, 1+2=3
|
want: 4, // path="a/b/c" has 2 slashes, 2+2=4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "empty dataset falls through to path scoring",
|
name: "empty dataset falls through to path scoring",
|
||||||
ds: zfsDatasetUsage{Dataset: "", Mountpoint: "/tank"},
|
ds: zfsDatasetUsage{Dataset: "", Mountpoint: "/tank"},
|
||||||
want: 1, // empty dataset passes first check, path="tank" has 0 slashes, 1+0=1
|
want: 2, // empty dataset passes first check, path="tank" has 0 slashes, 2+0=2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "trailing slash stripped from mountpoint",
|
name: "trailing slash stripped from mountpoint",
|
||||||
ds: zfsDatasetUsage{Dataset: "tank/data", Mountpoint: "/data/"},
|
ds: zfsDatasetUsage{Dataset: "tank/data", Mountpoint: "/data/"},
|
||||||
want: 1, // path="data" has 0 slashes, 1+0=1
|
want: 2, // path="data" has 0 slashes, 2+0=2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "very deep mountpoint",
|
name: "very deep mountpoint",
|
||||||
ds: zfsDatasetUsage{Dataset: "tank/deep", Mountpoint: "/a/b/c/d/e"},
|
ds: zfsDatasetUsage{Dataset: "tank/deep", Mountpoint: "/a/b/c/d/e"},
|
||||||
want: 5, // path="a/b/c/d/e" has 4 slashes, 1+4=5
|
want: 6, // path="a/b/c/d/e" has 4 slashes, 2+4=6
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user