Return logs (ZIL) vdev as well in VDevTree
This commit is contained in:
		
							parent
							
								
									08a4903509
								
							
						
					
					
						commit
						f5a73ad14f
					
				| 
						 | 
					@ -1,2 +1,3 @@
 | 
				
			||||||
.gitconfig
 | 
					.gitconfig
 | 
				
			||||||
*.sublime-*
 | 
					*.sublime-*
 | 
				
			||||||
 | 
					go-libzfs.test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								zpool.go
								
								
								
								
							
							
						
						
									
										18
									
								
								zpool.go
								
								
								
								
							| 
						 | 
					@ -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
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		vdevs.Devices = append(vdevs.Devices, vdev)
 | 
							if islog != C.B_FALSE {
 | 
				
			||||||
	}
 | 
								vdevs.Logs = &vdev
 | 
				
			||||||
	if vdevs.Spares, err = poolGetSpares(name, nv); err != nil {
 | 
							} else {
 | 
				
			||||||
		return
 | 
								vdevs.Devices = append(vdevs.Devices, vdev)
 | 
				
			||||||
	}
 | 
							}
 | 
				
			||||||
	if vdevs.L2Cache, err = poolGetL2Cache(name, nv); err != nil {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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))
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue