Return logs (ZIL) vdev as well in VDevTree

This commit is contained in:
Faruk Kasumovic 2018-03-28 10:24:47 +02:00
parent 08a4903509
commit f5a73ad14f
3 changed files with 40 additions and 11 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
.gitconfig .gitconfig
*.sublime-* *.sublime-*
go-libzfs.test

View File

@ -103,7 +103,7 @@ type VDevTree struct {
Devices []VDevTree // groups other devices (e.g. mirror) Devices []VDevTree // groups other devices (e.g. mirror)
Spares []VDevTree Spares []VDevTree
L2Cache []VDevTree L2Cache []VDevTree
Logs []VDevTree Logs *VDevTree
Parity uint Parity uint
Path string Path string
Name string Name string
@ -222,9 +222,7 @@ func poolGetConfig(name string, nv C.nvlist_ptr) (vdevs VDevTree, err error) {
var islog = C.uint64_t(C.B_FALSE) var islog = C.uint64_t(C.B_FALSE)
islog = C.get_vdev_is_log(C.nvlist_array_at(children.first, c)) islog = C.get_vdev_is_log(C.nvlist_array_at(children.first, c))
if islog != C.B_FALSE {
continue
}
vname := C.zpool_vdev_name(C.libzfsHandle, nil, C.nvlist_array_at(children.first, c), vname := C.zpool_vdev_name(C.libzfsHandle, nil, C.nvlist_array_at(children.first, c),
C.B_TRUE) C.B_TRUE)
var vdev VDevTree var vdev VDevTree
@ -234,13 +232,11 @@ func poolGetConfig(name string, nv C.nvlist_ptr) (vdevs VDevTree, err error) {
if err != nil { if err != nil {
return return
} }
if islog != C.B_FALSE {
vdevs.Logs = &vdev
} else {
vdevs.Devices = append(vdevs.Devices, vdev) vdevs.Devices = append(vdevs.Devices, vdev)
} }
if vdevs.Spares, err = poolGetSpares(name, nv); err != nil {
return
}
if vdevs.L2Cache, err = poolGetL2Cache(name, nv); err != nil {
return
} }
return return
} }

View File

@ -1,6 +1,7 @@
package zfs_test package zfs_test
import ( import (
"encoding/json"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
@ -529,3 +530,34 @@ func ExamplePool_State() {
} }
println("POOL TESTPOOL state:", zfs.PoolStateToName(pstate)) println("POOL TESTPOOL state:", zfs.PoolStateToName(pstate))
} }
func TestPool_VDevTree(t *testing.T) {
type fields struct {
poolName string
}
tests := []struct {
name string
fields fields
wantErr bool
}{
// TODO: Add test cases.
{
name: "test1",
fields: fields{"NETSTOR"},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
pool, _ := zfs.PoolOpen(tt.fields.poolName)
defer pool.Close()
gotVdevs, err := pool.VDevTree()
if (err != nil) != tt.wantErr {
t.Errorf("Pool.VDevTree() error = %v, wantErr %v", err, tt.wantErr)
return
}
jsonData, _ := json.MarshalIndent(gotVdevs, "", "\t")
t.Logf("gotVdevs: %s", string(jsonData))
})
}
}