remove ListBucketsMetadata instead add them to AccountInfo() (#13241)

This commit is contained in:
Harshavardhana 2021-09-17 15:02:21 -07:00 committed by GitHub
parent 5ed781a330
commit 6d42569ade
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 32 additions and 108 deletions

View File

@ -1081,8 +1081,12 @@ func (a adminAPIHandlers) AccountInfoHandler(w http.ResponseWriter, r *http.Requ
if rd || wr { if rd || wr {
// Fetch the data usage of the current bucket // Fetch the data usage of the current bucket
var size uint64 var size uint64
var objectsCount uint64
var objectsHist map[string]uint64
if !dataUsageInfo.LastUpdate.IsZero() { if !dataUsageInfo.LastUpdate.IsZero() {
size = dataUsageInfo.BucketsUsage[bucket.Name].Size size = dataUsageInfo.BucketsUsage[bucket.Name].Size
objectsCount = dataUsageInfo.BucketsUsage[bucket.Name].ObjectsCount
objectsHist = dataUsageInfo.BucketsUsage[bucket.Name].ObjectSizesHistogram
} }
// Fetch the prefix usage of the current bucket // Fetch the prefix usage of the current bucket
var prefixUsage map[string]uint64 var prefixUsage map[string]uint64
@ -1093,11 +1097,27 @@ func (a adminAPIHandlers) AccountInfoHandler(w http.ResponseWriter, r *http.Requ
logger.LogIf(ctx, err) logger.LogIf(ctx, err)
} }
} }
lcfg, _ := globalBucketObjectLockSys.Get(bucket.Name)
quota, _ := globalBucketQuotaSys.Get(bucket.Name)
rcfg, _ := globalBucketMetadataSys.GetReplicationConfig(ctx, bucket.Name)
tcfg, _ := globalBucketMetadataSys.GetTaggingConfig(bucket.Name)
acctInfo.Buckets = append(acctInfo.Buckets, madmin.BucketAccessInfo{ acctInfo.Buckets = append(acctInfo.Buckets, madmin.BucketAccessInfo{
Name: bucket.Name, Name: bucket.Name,
Created: bucket.Created, Created: bucket.Created,
Size: size, Size: size,
PrefixUsage: prefixUsage, Objects: objectsCount,
ObjectSizesHistogram: objectsHist,
PrefixUsage: prefixUsage,
Details: &madmin.BucketDetails{
Versioning: globalBucketVersioningSys.Enabled(bucket.Name),
VersioningSuspended: globalBucketVersioningSys.Suspended(bucket.Name),
Replication: rcfg != nil,
Locking: lcfg.LockEnabled,
Quota: quota,
Tagging: tcfg,
},
Access: madmin.AccountAccess{ Access: madmin.AccountAccess{
Read: rd, Read: rd,
Write: wr, Write: wr,

View File

@ -240,16 +240,6 @@ type CommonPrefix struct {
type Bucket struct { type Bucket struct {
Name string Name string
CreationDate string // time string of format "2006-01-02T15:04:05.000Z" CreationDate string // time string of format "2006-01-02T15:04:05.000Z"
// Usage size of the bucket not reflective of
// actual usage atomically, but an ever increasing
// value.
Usage *BucketUsageInfo `xml:"Usage,omitempty"`
// Provides information about various bucket features
// enabled such as versioning, object locking, tagging
// quota, replication config etc.
Details *BucketDetailsInfo `xml:"Details,omitempty"`
} }
// ObjectVersion container for object version metadata // ObjectVersion container for object version metadata
@ -437,8 +427,6 @@ func generateListBucketsResponse(buckets []BucketInfo) ListBucketsResponse {
listbuckets = append(listbuckets, Bucket{ listbuckets = append(listbuckets, Bucket{
Name: bucket.Name, Name: bucket.Name,
CreationDate: bucket.Created.UTC().Format(iso8601TimeFormat), CreationDate: bucket.Created.UTC().Format(iso8601TimeFormat),
Usage: bucket.Usage,
Details: bucket.Details,
}) })
} }

View File

@ -306,8 +306,6 @@ func (api objectAPIHandlers) ListBucketsHandler(w http.ResponseWriter, r *http.R
return return
} }
metadata := r.Form.Get("metadata") == "true"
// If etcd, dns federation configured list buckets from etcd. // If etcd, dns federation configured list buckets from etcd.
var bucketsInfo []BucketInfo var bucketsInfo []BucketInfo
if globalDNSConfig != nil && globalBucketFederation { if globalDNSConfig != nil && globalBucketFederation {
@ -372,49 +370,6 @@ func (api objectAPIHandlers) ListBucketsHandler(w http.ResponseWriter, r *http.R
} }
} }
if metadata && !globalIsGateway {
usageInfo, err := loadDataUsageFromBackend(ctx, objectAPI)
if err != nil {
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
return
}
for i, bucket := range bucketsInfo {
if bu, ok := usageInfo.BucketsUsage[bucket.Name]; ok {
bucketsInfo[i].Usage = &BucketUsageInfo{
Size: bu.Size,
ObjectsCount: bu.ObjectsCount,
ObjectSizesHistogram: StringMap{},
}
for k, v := range bu.ObjectSizesHistogram {
bucketsInfo[i].Usage.ObjectSizesHistogram[k] = fmt.Sprint(v)
}
} else {
bucketsInfo[i].Usage = &BucketUsageInfo{
ObjectSizesHistogram: StringMap{},
}
}
lcfg, _ := globalBucketObjectLockSys.Get(bucket.Name)
quota, _ := globalBucketQuotaSys.Get(bucket.Name)
var bquota *BucketQuotaConfig
if quota != nil {
bquota = &BucketQuotaConfig{
Quota: quota.Quota,
Type: quota.Type,
}
}
rcfg, _ := globalBucketMetadataSys.GetReplicationConfig(ctx, bucket.Name)
tcfg, _ := globalBucketMetadataSys.GetTaggingConfig(bucket.Name)
bucketsInfo[i].Details = &BucketDetailsInfo{
Versioning: globalBucketVersioningSys.Enabled(bucket.Name),
VersioningSuspended: globalBucketVersioningSys.Suspended(bucket.Name),
Replication: rcfg != nil,
Locking: lcfg.LockEnabled,
Quota: bquota,
Tagging: tcfg,
}
}
}
// Generate response. // Generate response.
response := generateListBucketsResponse(bucketsInfo) response := generateListBucketsResponse(bucketsInfo)
encodedSuccessResponse := encodeResponse(response) encodedSuccessResponse := encodeResponse(response)

View File

@ -104,10 +104,7 @@ func (er erasureObjects) getBucketInfo(ctx context.Context, bucketName string) (
if err != nil { if err != nil {
return err return err
} }
bucketsInfo[index] = BucketInfo{ bucketsInfo[index] = BucketInfo(volInfo)
Name: volInfo.Name,
Created: volInfo.Created,
}
return nil return nil
}, index) }, index)
} }

View File

@ -859,10 +859,7 @@ func (s *erasureSets) ListBuckets(ctx context.Context) (buckets []BucketInfo, er
} }
for _, v := range healBuckets { for _, v := range healBuckets {
listBuckets = append(listBuckets, BucketInfo{ listBuckets = append(listBuckets, BucketInfo(v))
Name: v.Name,
Created: v.Created,
})
} }
sort.Slice(listBuckets, func(i, j int) bool { sort.Slice(listBuckets, func(i, j int) bool {

View File

@ -24,7 +24,6 @@ import (
humanize "github.com/dustin/go-humanize" humanize "github.com/dustin/go-humanize"
"github.com/minio/madmin-go" "github.com/minio/madmin-go"
"github.com/minio/minio-go/v7/pkg/tags"
"github.com/minio/minio/internal/bucket/replication" "github.com/minio/minio/internal/bucket/replication"
"github.com/minio/minio/internal/hash" "github.com/minio/minio/internal/hash"
) )
@ -71,30 +70,6 @@ var ObjectsHistogramIntervals = []objectHistogramInterval{
{"GREATER_THAN_512_MB", humanize.MiByte * 512, math.MaxInt64}, {"GREATER_THAN_512_MB", humanize.MiByte * 512, math.MaxInt64},
} }
// BucketUsageInfo represents per bucket usage statistics
type BucketUsageInfo struct {
Size uint64
ObjectsCount uint64
ObjectSizesHistogram StringMap
}
// BucketQuotaConfig holds bucket quota restrictions
type BucketQuotaConfig struct {
Quota uint64
Type madmin.QuotaType
}
// BucketDetailsInfo provides information about features currently
// turned-on per bucket.
type BucketDetailsInfo struct {
Versioning bool
VersioningSuspended bool
Locking bool
Replication bool
Tagging *tags.Tags `xml:",omitempty"`
Quota *BucketQuotaConfig `xml:",omitempty"`
}
// BucketInfo - represents bucket metadata. // BucketInfo - represents bucket metadata.
type BucketInfo struct { type BucketInfo struct {
// Name of the bucket. // Name of the bucket.
@ -102,16 +77,6 @@ type BucketInfo struct {
// Date and time when the bucket was created. // Date and time when the bucket was created.
Created time.Time Created time.Time
// Usage size of the bucket not reflective of
// actual usage atomically, but an ever increasing
// value.
Usage *BucketUsageInfo `xml:",omitempty"`
// Provides information about various bucket features
// enabled such as versioning, object locking, tagging
// quota, replication config etc.
Details *BucketDetailsInfo `xml:",omitempty"`
} }
// ObjectInfo - represents object metadata. // ObjectInfo - represents object metadata.

4
go.mod
View File

@ -45,7 +45,7 @@ require (
github.com/minio/csvparser v1.0.0 github.com/minio/csvparser v1.0.0
github.com/minio/highwayhash v1.0.2 github.com/minio/highwayhash v1.0.2
github.com/minio/kes v0.14.0 github.com/minio/kes v0.14.0
github.com/minio/madmin-go v1.1.5 github.com/minio/madmin-go v1.1.6-0.20210917204419-f12dc0d0a8bd
github.com/minio/minio-go/v7 v7.0.14 github.com/minio/minio-go/v7 v7.0.14
github.com/minio/parquet-go v1.0.0 github.com/minio/parquet-go v1.0.0
github.com/minio/pkg v1.1.3 github.com/minio/pkg v1.1.3
@ -68,7 +68,7 @@ require (
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.8.0 github.com/prometheus/client_golang v1.8.0
github.com/prometheus/client_model v0.2.0 github.com/prometheus/client_model v0.2.0
github.com/prometheus/procfs v0.6.0 github.com/prometheus/procfs v0.7.3
github.com/rs/cors v1.7.0 github.com/rs/cors v1.7.0
github.com/secure-io/sio-go v0.3.1 github.com/secure-io/sio-go v0.3.1
github.com/shirou/gopsutil/v3 v3.21.7 github.com/shirou/gopsutil/v3 v3.21.7

6
go.sum
View File

@ -1022,8 +1022,9 @@ github.com/minio/kes v0.11.0/go.mod h1:mTF1Bv8YVEtQqF/B7Felp4tLee44Pp+dgI0rhCvgN
github.com/minio/kes v0.14.0 h1:plCGm4LwR++T1P1sXsJbyFRX54CE1WRuo9PAPj6MC3Q= github.com/minio/kes v0.14.0 h1:plCGm4LwR++T1P1sXsJbyFRX54CE1WRuo9PAPj6MC3Q=
github.com/minio/kes v0.14.0/go.mod h1:OUensXz2BpgMfiogslKxv7Anyx/wj+6bFC6qA7BQcfA= github.com/minio/kes v0.14.0/go.mod h1:OUensXz2BpgMfiogslKxv7Anyx/wj+6bFC6qA7BQcfA=
github.com/minio/madmin-go v1.0.12/go.mod h1:BK+z4XRx7Y1v8SFWXsuLNqQqnq5BO/axJ8IDJfgyvfs= github.com/minio/madmin-go v1.0.12/go.mod h1:BK+z4XRx7Y1v8SFWXsuLNqQqnq5BO/axJ8IDJfgyvfs=
github.com/minio/madmin-go v1.1.5 h1:xfzHwQ/KeKDQZKLqllNSyexwOPM/tvc13UdCeVMzADY=
github.com/minio/madmin-go v1.1.5/go.mod h1:xIPJHUbyYhNDgeD9Wov5Fz5/p7DIW0u+q6Rs/+Xu2TM= github.com/minio/madmin-go v1.1.5/go.mod h1:xIPJHUbyYhNDgeD9Wov5Fz5/p7DIW0u+q6Rs/+Xu2TM=
github.com/minio/madmin-go v1.1.6-0.20210917204419-f12dc0d0a8bd h1:NRQh43NGG+GThP26HufDWUp6pNhR1anfG7phaUDxYMk=
github.com/minio/madmin-go v1.1.6-0.20210917204419-f12dc0d0a8bd/go.mod h1:vw+c3/u+DeVKqReEavo///Cl2OO8nt5s4ee843hJeLs=
github.com/minio/mc v0.0.0-20210626002108-cebf3318546f h1:hyFvo5hSFw2K417YvDr/vAKlgCG69uTuhZW/5LNdL0U= github.com/minio/mc v0.0.0-20210626002108-cebf3318546f h1:hyFvo5hSFw2K417YvDr/vAKlgCG69uTuhZW/5LNdL0U=
github.com/minio/mc v0.0.0-20210626002108-cebf3318546f/go.mod h1:tuaonkPjVApCXkbtKENHBtsqUf7YTV33qmFrC+Pgp5g= github.com/minio/mc v0.0.0-20210626002108-cebf3318546f/go.mod h1:tuaonkPjVApCXkbtKENHBtsqUf7YTV33qmFrC+Pgp5g=
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
@ -1252,8 +1253,9 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k=