diff --git a/getosd.go b/getosd.go index 6d6734c..5e97d1a 100644 --- a/getosd.go +++ b/getosd.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "fmt" "log" "strings" ) @@ -92,7 +93,7 @@ func GetCrushHostBuckets(buckets []Bucket, itemid int64) []Bucket { return rootbuckets } -func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDump, poolinfo Poolinfo, osdsmetadata []OsdMetadata) map[string]BenchOsd { +func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDump, poolinfo Poolinfo) map[string]*BenchOsd { var crushrule int64 var crushrulename string for _, pool := range osddump.Pools { @@ -112,8 +113,8 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum } } - osdhosts := make(map[string]BenchOsd) - var devices []Device + osdhosts := make(map[string]*BenchOsd) + var devices []*Device bucketitems := GetCrushHostBuckets(osdcrushdump.Buckets, rootid) if params.define != "" { if strings.HasPrefix(params.define, "osd.") { @@ -121,19 +122,13 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum for _, item := range hostbucket.Items { for _, device := range osdcrushdump.Devices { if device.ID == item.ID && params.define == device.Name { - for _, osdmetadata := range osdsmetadata { - if osdmetadata.ID == device.ID { - device.Info = osdmetadata - } - - } - devices = append(devices, device) + devices = append(devices, &device) } } } if len(devices) != 0 { - osdhosts[hostbucket.Name] = BenchOsd{Osds: devices} - devices = []Device{} + osdhosts[hostbucket.Name] = &BenchOsd{Osds: devices} + devices = []*Device{} } } if len(osdhosts) == 0 { @@ -146,20 +141,14 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum for _, item := range hostbucket.Items { for _, device := range osdcrushdump.Devices { if device.ID == item.ID { - for _, osdmetadata := range osdsmetadata { - if osdmetadata.ID == device.ID { - device.Info = osdmetadata - } - - } - devices = append(devices, device) + devices = append(devices, &device) } } } } if len(devices) != 0 { - osdhosts[hostbucket.Name] = BenchOsd{Osds: devices} - devices = []Device{} + osdhosts[hostbucket.Name] = &BenchOsd{Osds: devices} + devices = []*Device{} } } if len(osdhosts) == 0 { @@ -171,19 +160,13 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum for _, item := range hostbucket.Items { for _, device := range osdcrushdump.Devices { if device.ID == item.ID { - for _, osdmetadata := range osdsmetadata { - if osdmetadata.ID == device.ID { - device.Info = osdmetadata - } - - } - devices = append(devices, device) + devices = append(devices, &device) } } } if len(devices) != 0 { - osdhosts[hostbucket.Name] = BenchOsd{Osds: devices} - devices = []Device{} + osdhosts[hostbucket.Name] = &BenchOsd{Osds: devices} + devices = []*Device{} } } if len(osdhosts) == 0 { @@ -202,7 +185,7 @@ func ContainsPg(pgs []PlacementGroup, i int64) bool { return false } -func GetOsds(cephconn *Cephconnection, params Params) map[string]BenchOsd { +func GetOsds(cephconn *Cephconnection, params Params) map[string]*BenchOsd { poolinfo := GetPoolSize(cephconn, params) if poolinfo.Size != 1 { log.Fatalf("Pool size must be 1. Current size for pool %v is %v. Don't forget that it must be useless pool (not production). Do:\n # ceph osd pool set %v min_size 1\n # ceph osd pool set %v size 1", @@ -211,8 +194,8 @@ func GetOsds(cephconn *Cephconnection, params Params) map[string]BenchOsd { placementGroups := GetPgByPool(cephconn, params) crushosddump := GetOsdCrushDump(cephconn) osddump := GetOsdDump(cephconn) - osdsmetadata := GetOsdMetadata(cephconn) - osddevices := GetOsdForLocations(params, crushosddump, osddump, poolinfo, osdsmetadata) + //osdsmetadata := GetOsdMetadata(cephconn) + osddevices := GetOsdForLocations(params, crushosddump, osddump, poolinfo) for _, values := range osddevices { for _, item := range values.Osds { if exist := ContainsPg(placementGroups, item.ID); exist == false { @@ -220,5 +203,6 @@ func GetOsds(cephconn *Cephconnection, params Params) map[string]BenchOsd { } } } + fmt.Printf("%+v", osddevices) return osddevices } diff --git a/types.go b/types.go index 7182df5..bc12311 100644 --- a/types.go +++ b/types.go @@ -62,7 +62,7 @@ type Device struct { Class string `json:"class"` ID int64 `json:"id"` Name string `json:"name"` - Info OsdMetadata + Info *OsdMetadata } type OsdCrushDump struct { @@ -375,7 +375,7 @@ type OsdMetadata struct { } type BenchOsd struct { - Osds []Device + Osds []*Device Buffs *[][]byte - Offsets []int64 + Offsets *[]int64 }