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 (
"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
}

View File

@ -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
}