From a4b8928660170709c88a261b3f00116c786690d4 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Wed, 14 Jul 2021 16:51:10 +0100 Subject: [PATCH] Move prefix usage in admin AccountInfo API (#12710) --- cmd/admin-handlers-users.go | 21 +++++++++++++++++---- cmd/admin-handlers.go | 34 ---------------------------------- cmd/admin-router.go | 2 -- go.mod | 2 +- go.sum | 2 ++ 5 files changed, 20 insertions(+), 41 deletions(-) diff --git a/cmd/admin-handlers-users.go b/cmd/admin-handlers-users.go index 424945593..07ee8e721 100644 --- a/cmd/admin-handlers-users.go +++ b/cmd/admin-handlers-users.go @@ -984,6 +984,9 @@ func (a adminAPIHandlers) AccountInfoHandler(w http.ResponseWriter, r *http.Requ // Set delimiter value for "s3:delimiter" policy conditionals. r.Header.Set("delimiter", SlashSeparator) + // Check if we are asked to return prefix usage + enablePrefixUsage := r.URL.Query().Get("prefix-usage") == "true" + isAllowedAccess := func(bucketName string) (rd, wr bool) { if globalIAMSys.IsAllowed(iampolicy.Args{ AccountName: cred.AccessKey, @@ -1086,15 +1089,25 @@ func (a adminAPIHandlers) AccountInfoHandler(w http.ResponseWriter, r *http.Requ for _, bucket := range buckets { rd, wr := isAllowedAccess(bucket.Name) if rd || wr { - var size uint64 // Fetch the data usage of the current bucket + var size uint64 if !dataUsageInfo.LastUpdate.IsZero() { size = dataUsageInfo.BucketsUsage[bucket.Name].Size } + // Fetch the prefix usage of the current bucket + var prefixUsage map[string]uint64 + if enablePrefixUsage { + if pu, err := loadPrefixUsageFromBackend(ctx, objectAPI, bucket.Name); err == nil { + prefixUsage = pu + } else { + logger.LogIf(ctx, err) + } + } acctInfo.Buckets = append(acctInfo.Buckets, madmin.BucketAccessInfo{ - Name: bucket.Name, - Created: bucket.Created, - Size: size, + Name: bucket.Name, + Created: bucket.Created, + Size: size, + PrefixUsage: prefixUsage, Access: madmin.AccountAccess{ Read: rd, Write: wr, diff --git a/cmd/admin-handlers.go b/cmd/admin-handlers.go index 9d9216e46..34a38bcde 100644 --- a/cmd/admin-handlers.go +++ b/cmd/admin-handlers.go @@ -346,40 +346,6 @@ func (a adminAPIHandlers) DataUsageInfoHandler(w http.ResponseWriter, r *http.Re writeSuccessResponseJSON(w, dataUsageInfoJSON) } -// PrefixUsageInfoHandler - GET /minio/admin/v3/prefixusage -// ---------- -// Get server/cluster data usage info -func (a adminAPIHandlers) PrefixUsageInfoHandler(w http.ResponseWriter, r *http.Request) { - ctx := newContext(r, w, "PrefixUsageInfo") - - defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r)) - - objectAPI, _ := validateAdminReq(ctx, w, r, iampolicy.DataUsageInfoAdminAction) - if objectAPI == nil { - return - } - - bucket := r.URL.Query().Get("bucket") - if isReservedOrInvalidBucket(bucket, false) { - writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrInvalidBucketName), r.URL) - return - } - - prefixUsageInfo, err := loadPrefixUsageFromBackend(ctx, objectAPI, bucket) - if err != nil { - writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) - return - } - - prefixUsageInfoJSON, err := json.Marshal(prefixUsageInfo) - if err != nil { - writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) - return - } - - writeSuccessResponseJSON(w, prefixUsageInfoJSON) -} - func lriToLockEntry(l lockRequesterInfo, resource, server string) *madmin.LockEntry { entry := &madmin.LockEntry{ Timestamp: l.Timestamp, diff --git a/cmd/admin-router.go b/cmd/admin-router.go index e07ae5460..0496e3119 100644 --- a/cmd/admin-router.go +++ b/cmd/admin-router.go @@ -72,8 +72,6 @@ func registerAdminRouter(router *mux.Router, enableConfigOps bool) { adminRouter.Methods(http.MethodGet).Path(adminVersion + "/storageinfo").HandlerFunc(gz(httpTraceAll(adminAPI.StorageInfoHandler))) // DataUsageInfo operations adminRouter.Methods(http.MethodGet).Path(adminVersion + "/datausageinfo").HandlerFunc(gz(httpTraceAll(adminAPI.DataUsageInfoHandler))) - // PrefixUsageInfo operations - adminRouter.Methods(http.MethodGet).Path(adminVersion + "/prefixusageinfo").HandlerFunc(gz(httpTraceAll(adminAPI.PrefixUsageInfoHandler))) if globalIsDistErasure || globalIsErasure { /// Heal operations diff --git a/go.mod b/go.mod index 8dba41f68..a33b48cbc 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,7 @@ require ( github.com/minio/csvparser v1.0.0 github.com/minio/highwayhash v1.0.2 github.com/minio/kes v0.14.0 - github.com/minio/madmin-go v1.0.15 + github.com/minio/madmin-go v1.0.16-0.20210713203601-e2a5b7c4d8ae github.com/minio/minio-go/v7 v7.0.13-0.20210706013812-337aa536abe2 github.com/minio/parquet-go v1.0.0 github.com/minio/pkg v1.0.10 diff --git a/go.sum b/go.sum index 9dce59930..e55edd7d8 100644 --- a/go.sum +++ b/go.sum @@ -1024,6 +1024,8 @@ github.com/minio/madmin-go v1.0.6/go.mod h1:BK+z4XRx7Y1v8SFWXsuLNqQqnq5BO/axJ8ID github.com/minio/madmin-go v1.0.12/go.mod h1:BK+z4XRx7Y1v8SFWXsuLNqQqnq5BO/axJ8IDJfgyvfs= github.com/minio/madmin-go v1.0.15 h1:aoJlvLvbNh87LzVK1us48s7IwVr4poQB35rVN+KbZqs= github.com/minio/madmin-go v1.0.15/go.mod h1:4nl9hvLWFnwCjkLfZSsZXEHgDODa2XSG6xGlIZyQ2oA= +github.com/minio/madmin-go v1.0.16-0.20210713203601-e2a5b7c4d8ae h1:eRwOOnwEoqHL8CLQR69obOxYYshQoQ3470+qgD9psJw= +github.com/minio/madmin-go v1.0.16-0.20210713203601-e2a5b7c4d8ae/go.mod h1:4nl9hvLWFnwCjkLfZSsZXEHgDODa2XSG6xGlIZyQ2oA= 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/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=