mirror of
https://github.com/minio/minio.git
synced 2025-11-23 02:57:42 -05:00
metrics: Use StorageInfo() instead to have consistent info (#9006)
Metrics used to have its own code to calculate offline disks. StorageInfo() was avoided because it is an expensive operation by sending calls to all nodes. To make metrics & server info share the same code, a new argument `local` is added to StorageInfo() so it will only query local disks when needed. Metrics now calls StorageInfo() as server info handler does but with the local flag set to false. Co-authored-by: Praveen raj Mani <praveen@minio.io> Co-authored-by: Harshavardhana <harsha@minio.io>
This commit is contained in:
46
cmd/xl-v1.go
46
cmd/xl-v1.go
@@ -19,14 +19,12 @@ package cmd
|
||||
import (
|
||||
"context"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/minio/minio/cmd/logger"
|
||||
"github.com/minio/minio/pkg/bpool"
|
||||
"github.com/minio/minio/pkg/dsync"
|
||||
"github.com/minio/minio/pkg/madmin"
|
||||
xnet "github.com/minio/minio/pkg/net"
|
||||
"github.com/minio/minio/pkg/sync/errgroup"
|
||||
)
|
||||
|
||||
@@ -115,34 +113,27 @@ func getDisksInfo(disks []StorageAPI) (disksInfo []DiskInfo, onlineDisks, offlin
|
||||
}, index)
|
||||
}
|
||||
|
||||
getPeerAddress := func(diskPath string) (string, error) {
|
||||
hostPort := strings.Split(diskPath, SlashSeparator)[0]
|
||||
// Host will be empty for xl/fs disk paths.
|
||||
if hostPort == "" {
|
||||
return "", nil
|
||||
}
|
||||
thisAddr, err := xnet.ParseHost(hostPort)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return thisAddr.String(), nil
|
||||
}
|
||||
|
||||
onlineDisks = make(madmin.BackendDisks)
|
||||
offlineDisks = make(madmin.BackendDisks)
|
||||
|
||||
localNodeAddr := GetLocalPeer(globalEndpoints)
|
||||
|
||||
// Wait for the routines.
|
||||
for i, err := range g.Wait() {
|
||||
peerAddr, pErr := getPeerAddress(disksInfo[i].RelativePath)
|
||||
if pErr != nil {
|
||||
for i, diskInfoErr := range g.Wait() {
|
||||
if disks[i] == nil {
|
||||
continue
|
||||
}
|
||||
peerAddr := disks[i].Hostname()
|
||||
if peerAddr == "" {
|
||||
peerAddr = localNodeAddr
|
||||
}
|
||||
if _, ok := offlineDisks[peerAddr]; !ok {
|
||||
offlineDisks[peerAddr] = 0
|
||||
}
|
||||
if _, ok := onlineDisks[peerAddr]; !ok {
|
||||
onlineDisks[peerAddr] = 0
|
||||
}
|
||||
if err != nil {
|
||||
if diskInfoErr != nil {
|
||||
offlineDisks[peerAddr]++
|
||||
continue
|
||||
}
|
||||
@@ -170,7 +161,7 @@ func getStorageInfo(disks []StorageAPI) StorageInfo {
|
||||
usedList[i] = di.Used
|
||||
totalList[i] = di.Total
|
||||
availableList[i] = di.Free
|
||||
mountPaths[i] = di.RelativePath
|
||||
mountPaths[i] = di.MountPath
|
||||
}
|
||||
|
||||
storageInfo := StorageInfo{
|
||||
@@ -188,8 +179,19 @@ func getStorageInfo(disks []StorageAPI) StorageInfo {
|
||||
}
|
||||
|
||||
// StorageInfo - returns underlying storage statistics.
|
||||
func (xl xlObjects) StorageInfo(ctx context.Context) StorageInfo {
|
||||
return getStorageInfo(xl.getDisks())
|
||||
func (xl xlObjects) StorageInfo(ctx context.Context, local bool) StorageInfo {
|
||||
var disks []StorageAPI
|
||||
if !local {
|
||||
disks = xl.getDisks()
|
||||
} else {
|
||||
for _, d := range xl.getDisks() {
|
||||
if d.Hostname() == "" {
|
||||
// Append this local disk since local flag is true
|
||||
disks = append(disks, d)
|
||||
}
|
||||
}
|
||||
}
|
||||
return getStorageInfo(disks)
|
||||
}
|
||||
|
||||
// GetMetrics - is not implemented and shouldn't be called.
|
||||
|
||||
Reference in New Issue
Block a user