Struct pointers

master
Alexey Kostin 2019-02-20 23:26:40 +03:00
parent 53189e2d59
commit b81a43bfd0
2 changed files with 20 additions and 36 deletions

View File

@ -2,6 +2,7 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt"
"log" "log"
"strings" "strings"
) )
@ -92,7 +93,7 @@ func GetCrushHostBuckets(buckets []Bucket, itemid int64) []Bucket {
return rootbuckets 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 crushrule int64
var crushrulename string var crushrulename string
for _, pool := range osddump.Pools { for _, pool := range osddump.Pools {
@ -112,8 +113,8 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum
} }
} }
osdhosts := make(map[string]BenchOsd) osdhosts := make(map[string]*BenchOsd)
var devices []Device var devices []*Device
bucketitems := GetCrushHostBuckets(osdcrushdump.Buckets, rootid) bucketitems := GetCrushHostBuckets(osdcrushdump.Buckets, rootid)
if params.define != "" { if params.define != "" {
if strings.HasPrefix(params.define, "osd.") { if strings.HasPrefix(params.define, "osd.") {
@ -121,19 +122,13 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum
for _, item := range hostbucket.Items { for _, item := range hostbucket.Items {
for _, device := range osdcrushdump.Devices { for _, device := range osdcrushdump.Devices {
if device.ID == item.ID && params.define == device.Name { if device.ID == item.ID && params.define == device.Name {
for _, osdmetadata := range osdsmetadata { devices = append(devices, &device)
if osdmetadata.ID == device.ID {
device.Info = osdmetadata
}
}
devices = append(devices, device)
} }
} }
} }
if len(devices) != 0 { if len(devices) != 0 {
osdhosts[hostbucket.Name] = BenchOsd{Osds: devices} osdhosts[hostbucket.Name] = &BenchOsd{Osds: devices}
devices = []Device{} devices = []*Device{}
} }
} }
if len(osdhosts) == 0 { if len(osdhosts) == 0 {
@ -146,20 +141,14 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum
for _, item := range hostbucket.Items { for _, item := range hostbucket.Items {
for _, device := range osdcrushdump.Devices { for _, device := range osdcrushdump.Devices {
if device.ID == item.ID { if device.ID == item.ID {
for _, osdmetadata := range osdsmetadata { devices = append(devices, &device)
if osdmetadata.ID == device.ID {
device.Info = osdmetadata
}
}
devices = append(devices, device)
} }
} }
} }
} }
if len(devices) != 0 { if len(devices) != 0 {
osdhosts[hostbucket.Name] = BenchOsd{Osds: devices} osdhosts[hostbucket.Name] = &BenchOsd{Osds: devices}
devices = []Device{} devices = []*Device{}
} }
} }
if len(osdhosts) == 0 { if len(osdhosts) == 0 {
@ -171,19 +160,13 @@ func GetOsdForLocations(params Params, osdcrushdump OsdCrushDump, osddump OsdDum
for _, item := range hostbucket.Items { for _, item := range hostbucket.Items {
for _, device := range osdcrushdump.Devices { for _, device := range osdcrushdump.Devices {
if device.ID == item.ID { if device.ID == item.ID {
for _, osdmetadata := range osdsmetadata { devices = append(devices, &device)
if osdmetadata.ID == device.ID {
device.Info = osdmetadata
}
}
devices = append(devices, device)
} }
} }
} }
if len(devices) != 0 { if len(devices) != 0 {
osdhosts[hostbucket.Name] = BenchOsd{Osds: devices} osdhosts[hostbucket.Name] = &BenchOsd{Osds: devices}
devices = []Device{} devices = []*Device{}
} }
} }
if len(osdhosts) == 0 { if len(osdhosts) == 0 {
@ -202,7 +185,7 @@ func ContainsPg(pgs []PlacementGroup, i int64) bool {
return false return false
} }
func GetOsds(cephconn *Cephconnection, params Params) map[string]BenchOsd { func GetOsds(cephconn *Cephconnection, params Params) map[string]*BenchOsd {
poolinfo := GetPoolSize(cephconn, params) poolinfo := GetPoolSize(cephconn, params)
if poolinfo.Size != 1 { 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", 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) placementGroups := GetPgByPool(cephconn, params)
crushosddump := GetOsdCrushDump(cephconn) crushosddump := GetOsdCrushDump(cephconn)
osddump := GetOsdDump(cephconn) osddump := GetOsdDump(cephconn)
osdsmetadata := GetOsdMetadata(cephconn) //osdsmetadata := GetOsdMetadata(cephconn)
osddevices := GetOsdForLocations(params, crushosddump, osddump, poolinfo, osdsmetadata) osddevices := GetOsdForLocations(params, crushosddump, osddump, poolinfo)
for _, values := range osddevices { for _, values := range osddevices {
for _, item := range values.Osds { for _, item := range values.Osds {
if exist := ContainsPg(placementGroups, item.ID); exist == false { 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 return osddevices
} }

View File

@ -62,7 +62,7 @@ type Device struct {
Class string `json:"class"` Class string `json:"class"`
ID int64 `json:"id"` ID int64 `json:"id"`
Name string `json:"name"` Name string `json:"name"`
Info OsdMetadata Info *OsdMetadata
} }
type OsdCrushDump struct { type OsdCrushDump struct {
@ -375,7 +375,7 @@ type OsdMetadata struct {
} }
type BenchOsd struct { type BenchOsd struct {
Osds []Device Osds []*Device
Buffs *[][]byte Buffs *[][]byte
Offsets []int64 Offsets *[]int64
} }