Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package minio-client for openSUSE:Factory checked in at 2023-07-09 20:40:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/minio-client (Old) and /work/SRC/openSUSE:Factory/.minio-client.new.23466 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "minio-client" Sun Jul 9 20:40:54 2023 rev:38 rq:1097763 version:20230707T052551Z Changes: -------- --- /work/SRC/openSUSE:Factory/minio-client/minio-client.changes 2023-06-29 17:29:35.262701943 +0200 +++ /work/SRC/openSUSE:Factory/.minio-client.new.23466/minio-client.changes 2023-07-09 20:42:59.070084678 +0200 @@ -1,0 +2,9 @@ +Sat Jul 08 19:38:03 UTC 2023 - ka...@b1-systems.de + +- Update to version 20230707T052551Z: + * Enhance user info output with authentication info (#4613) + * admin replicate update: rename --sync flag to --mode (#4623) + * fix: miss count for 'mc support top drive' (#4624) + * support site perf replication (#4608) + +------------------------------------------------------------------- Old: ---- mc-20230628T215417Z.obscpio New: ---- mc-20230707T052551Z.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ minio-client.spec ++++++ --- /var/tmp/diff_new_pack.SfHyoE/_old 2023-07-09 20:42:59.730088648 +0200 +++ /var/tmp/diff_new_pack.SfHyoE/_new 2023-07-09 20:42:59.734088672 +0200 @@ -22,7 +22,7 @@ %define binary_name minio-client Name: minio-client -Version: 20230628T215417Z +Version: 20230707T052551Z Release: 0 Summary: Client for MinIO License: AGPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.SfHyoE/_old 2023-07-09 20:42:59.770088889 +0200 +++ /var/tmp/diff_new_pack.SfHyoE/_new 2023-07-09 20:42:59.774088913 +0200 @@ -5,7 +5,7 @@ <param name="exclude">.git</param> <param name="changesgenerate">enable</param> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">RELEASE.2023-06-28T21-54-17Z</param> + <param name="revision">RELEASE.2023-07-07T05-25-51Z</param> <param name="match-tag">RELEASE.*</param> <param name="versionrewrite-pattern">RELEASE\.(.*)-(.*)-(.*)-(.*)-(.*)</param> <param name="versionrewrite-replacement">\1\2\3\4\5</param> @@ -19,7 +19,7 @@ <param name="compression">gz</param> </service> <service name="go_modules" mode="disabled"> - <param name="archive">mc-20230628T215417Z.obscpio</param> + <param name="archive">mc-20230707T052551Z.obscpio</param> </service> </services> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.SfHyoE/_old 2023-07-09 20:42:59.794089033 +0200 +++ /var/tmp/diff_new_pack.SfHyoE/_new 2023-07-09 20:42:59.798089057 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/minio/mc</param> - <param name="changesrevision">eebdcdf36501cec35c893d7e8ab7a7473ff6860a</param></service></servicedata> + <param name="changesrevision">1b992864ee0682b8be6a590ccbda080475dcadd3</param></service></servicedata> (No newline at EOF) ++++++ mc-20230628T215417Z.obscpio -> mc-20230707T052551Z.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/admin-replicate-update.go new/mc-20230707T052551Z/cmd/admin-replicate-update.go --- old/mc-20230628T215417Z/cmd/admin-replicate-update.go 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/cmd/admin-replicate-update.go 2023-07-07 07:25:51.000000000 +0200 @@ -39,9 +39,16 @@ Usage: "endpoint for the site", }, cli.StringFlag{ - Name: "sync", - Usage: "enable synchronous replication for this target, valid values are ['enable', 'disable'].", - Value: "disable", + Name: "mode", + Usage: "change mode of replication for this target, valid values are ['sync', 'async'].", + Value: "", + }, + cli.StringFlag{ + Name: "sync", + Usage: "enable synchronous replication for this target, valid values are ['enable', 'disable'].", + Value: "disable", + Hidden: true, // deprecated Jul 2023 + }, } @@ -115,11 +122,15 @@ if !ctx.IsSet("deployment-id") { fatalIf(errInvalidArgument(), "--deployment-id is a required flag") } - if !ctx.IsSet("endpoint") && !ctx.IsSet("sync") { - fatalIf(errInvalidArgument(), "--endpoint or --sync is a required flag") + if !ctx.IsSet("endpoint") && !ctx.IsSet("mode") && !ctx.IsSet("sync") { + fatalIf(errInvalidArgument(), "--endpoint or --mode is a required flag") } + if ctx.IsSet("mode") && ctx.IsSet("sync") { + fatalIf(errInvalidArgument(), "either --sync or --mode flag should be specified") + } + var syncState string - if ctx.IsSet("sync") { + if ctx.IsSet("sync") { // for backward compatibility - deprecated Jul 2023 syncState = strings.ToLower(ctx.String("sync")) switch syncState { case "enable", "disable": @@ -127,6 +138,18 @@ fatalIf(errInvalidArgument().Trace(args...), "--sync can be either [enable|disable]") } } + + if ctx.IsSet("mode") { + mode := strings.ToLower(ctx.String("mode")) + switch mode { + case "sync": + syncState = "enable" + case "async": + syncState = "disable" + default: + fatalIf(errInvalidArgument().Trace(args...), "--mode can be either [sync|async]") + } + } var ep string if ctx.IsSet("endpoint") { parsedURL := ctx.String("endpoint") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/admin-user-add.go new/mc-20230707T052551Z/cmd/admin-user-add.go --- old/mc-20230628T215417Z/cmd/admin-user-add.go 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/cmd/admin-user-add.go 2023-07-07 07:25:51.000000000 +0200 @@ -91,13 +91,14 @@ // userMessage container for content message structure type userMessage struct { - op string - Status string `json:"status"` // TODO: remove this? - AccessKey string `json:"accessKey,omitempty"` - SecretKey string `json:"secretKey,omitempty"` - PolicyName string `json:"policyName,omitempty"` - UserStatus string `json:"userStatus,omitempty"` - MemberOf []userGroup `json:"memberOf,omitempty"` + op string + Status string `json:"status"` // TODO: remove this? + AccessKey string `json:"accessKey,omitempty"` + SecretKey string `json:"secretKey,omitempty"` + PolicyName string `json:"policyName,omitempty"` + UserStatus string `json:"userStatus,omitempty"` + MemberOf []userGroup `json:"memberOf,omitempty"` + Authentication string `json:"authentication,omitempty"` } func (u userMessage) String() string { @@ -118,13 +119,16 @@ for _, group := range u.MemberOf { memberOf = append(memberOf, group.Name) } - return console.Colorize("UserMessage", strings.Join( - []string{ - fmt.Sprintf("AccessKey: %s", u.AccessKey), - fmt.Sprintf("Status: %s", u.UserStatus), - fmt.Sprintf("PolicyName: %s", u.PolicyName), - fmt.Sprintf("MemberOf: %s", memberOf), - }, "\n")) + lines := []string{ + fmt.Sprintf("AccessKey: %s", u.AccessKey), + fmt.Sprintf("Status: %s", u.UserStatus), + fmt.Sprintf("PolicyName: %s", u.PolicyName), + fmt.Sprintf("MemberOf: %s", memberOf), + } + if u.Authentication != "" { + lines = append(lines, fmt.Sprintf("Authentication: %s", u.Authentication)) + } + return console.Colorize("UserMessage", strings.Join(lines, "\n")) case "remove": return console.Colorize("UserMessage", "Removed user `"+u.AccessKey+"` successfully.") case "disable": diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/admin-user-info.go new/mc-20230707T052551Z/cmd/admin-user-info.go --- old/mc-20230628T215417Z/cmd/admin-user-info.go 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/cmd/admin-user-info.go 2023-07-07 07:25:51.000000000 +0200 @@ -18,10 +18,12 @@ package cmd import ( + "fmt" "strings" "github.com/fatih/color" "github.com/minio/cli" + "github.com/minio/madmin-go/v3" "github.com/minio/mc/pkg/probe" "github.com/minio/pkg/console" ) @@ -87,12 +89,26 @@ } printMsg(userMessage{ - op: ctx.Command.Name, - AccessKey: args.Get(1), - PolicyName: user.PolicyName, - UserStatus: string(user.Status), - MemberOf: memberOf, + op: ctx.Command.Name, + AccessKey: args.Get(1), + PolicyName: user.PolicyName, + UserStatus: string(user.Status), + MemberOf: memberOf, + Authentication: authInfoToUserMessage(user.AuthInfo), }) return nil } + +func authInfoToUserMessage(a *madmin.UserAuthInfo) string { + if a == nil { + return "" + } + + authServer := "" + if a.Type != madmin.BuiltinUserAuthType { + authServer = "/" + a.AuthServer + } + + return fmt.Sprintf("%s%s (%s)", a.Type, authServer, a.AuthServerUserID) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/speedtest-spinner.go new/mc-20230707T052551Z/cmd/speedtest-spinner.go --- old/mc-20230628T215417Z/cmd/speedtest-spinner.go 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/cmd/speedtest-spinner.go 2023-07-07 07:25:51.000000000 +0200 @@ -48,6 +48,7 @@ NetPerfTest PerfTestType = 1 << iota DrivePerfTest ObjectPerfTest + SiteReplicationPerfTest ) // Name - returns name of the performance test @@ -59,18 +60,21 @@ return "DrivePerf" case ObjectPerfTest: return "ObjectPerf" + case SiteReplicationPerfTest: + return "SiteReplication" } return "<unknown>" } // PerfTestResult - stores the result of a performance test type PerfTestResult struct { - Type PerfTestType `json:"type"` - ObjectResult *madmin.SpeedTestResult `json:"object,omitempty"` - NetResult *madmin.NetperfResult `json:"network,omitempty"` - DriveResult []madmin.DriveSpeedTestResult `json:"drive,omitempty"` - Err string `json:"err,omitempty"` - Final bool `json:"final,omitempty"` + Type PerfTestType `json:"type"` + ObjectResult *madmin.SpeedTestResult `json:"object,omitempty"` + NetResult *madmin.NetperfResult `json:"network,omitempty"` + SiteReplicationResult *madmin.SiteNetPerfResult `json:"siteReplication,omitempty"` + DriveResult []madmin.DriveSpeedTestResult `json:"drive,omitempty"` + Err string `json:"err,omitempty"` + Final bool `json:"final,omitempty"` } func initSpeedTestUI() *speedTestUI { @@ -134,6 +138,7 @@ ores := m.result.ObjectResult nres := m.result.NetResult + sres := m.result.SiteReplicationResult dres := m.result.DriveResult trailerIfGreaterThan := func(in string, max int) string { @@ -218,6 +223,57 @@ } } } + + sort.Slice(data, func(i, j int) bool { + return data[i][0] < data[j][0] + }) + + table.AppendBulk(data) + table.Render() + } else if sres != nil { + table.SetHeader([]string{"Endpoint", "RX", "TX", ""}) + data := make([][]string, 0, len(sres.NodeResults)) + if len(sres.NodeResults) == 0 { + data = append(data, []string{ + "...", + whiteStyle.Render("-- MiB"), + whiteStyle.Render("-- MiB"), + "", + }) + } else { + for _, nodeResult := range sres.NodeResults { + if nodeResult.Error != "" { + data = append(data, []string{ + trailerIfGreaterThan(nodeResult.Endpoint, 64), + crossTickCell, + crossTickCell, + "Err: " + nodeResult.Error, + }) + } else { + dataItem := []string{} + dataError := "" + // show endpoint + dataItem = append(dataItem, trailerIfGreaterThan(nodeResult.Endpoint, 64)) + // show RX + if uint64(nodeResult.RXTotalDuration.Seconds()) == 0 { + dataError += "- RXTotalDuration are zero " + dataItem = append(dataItem, crossTickCell) + } else { + dataItem = append(dataItem, whiteStyle.Render(humanize.IBytes(nodeResult.RX/uint64(nodeResult.RXTotalDuration.Seconds())))+"/s") + } + // show TX + if uint64(nodeResult.TXTotalDuration.Seconds()) == 0 { + dataError += "- TXTotalDuration are zero" + dataItem = append(dataItem, crossTickCell) + } else { + dataItem = append(dataItem, whiteStyle.Render(humanize.IBytes(nodeResult.TX/uint64(nodeResult.TXTotalDuration.Seconds())))+"/s") + } + // show message + dataItem = append(dataItem, dataError) + data = append(data, dataItem) + } + } + } sort.Slice(data, func(i, j int) bool { return data[i][0] < data[j][0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/support-perf-site-replication.go new/mc-20230707T052551Z/cmd/support-perf-site-replication.go --- old/mc-20230628T215417Z/cmd/support-perf-site-replication.go 1970-01-01 01:00:00.000000000 +0100 +++ new/mc-20230707T052551Z/cmd/support-perf-site-replication.go 2023-07-07 07:25:51.000000000 +0200 @@ -0,0 +1,130 @@ +// Copyright (c) 2023 MinIO, Inc. +// +// This file is part of MinIO Object Storage stack +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package cmd + +import ( + "context" + "os" + "time" + + tea "github.com/charmbracelet/bubbletea" + "github.com/minio/cli" + "github.com/minio/madmin-go/v3" + "github.com/minio/mc/pkg/probe" +) + +func mainAdminSpeedTestSiteReplication(ctx *cli.Context, aliasedURL string, outCh chan<- PerfTestResult) error { + client, perr := newAdminClient(aliasedURL) + if perr != nil { + fatalIf(perr.Trace(aliasedURL), "Unable to initialize admin client.") + return nil + } + + ctxt, cancel := context.WithCancel(globalContext) + defer cancel() + + duration, e := time.ParseDuration(ctx.String("duration")) + if e != nil { + fatalIf(probe.NewError(e), "Unable to parse duration") + return nil + } + if duration <= 0 { + fatalIf(errInvalidArgument(), "duration cannot be 0 or negative") + return nil + } + + resultCh := make(chan madmin.SiteNetPerfResult) + errorCh := make(chan error) + go func() { + defer close(resultCh) + defer close(errorCh) + + result, e := client.SiteReplicationPerf(ctxt, duration) + if e != nil { + errorCh <- e + } + resultCh <- result + }() + + if globalJSON { + select { + case e := <-errorCh: + printMsg(convertPerfResult(PerfTestResult{ + Type: SiteReplicationPerfTest, + Err: e.Error(), + Final: true, + })) + case result := <-resultCh: + printMsg(convertPerfResult(PerfTestResult{ + Type: SiteReplicationPerfTest, + SiteReplicationResult: &result, + Final: true, + })) + } + return nil + } + + done := make(chan struct{}) + + p := tea.NewProgram(initSpeedTestUI()) + go func() { + if _, e := p.Run(); e != nil { + os.Exit(1) + } + close(done) + }() + + go func() { + for { + select { + case e := <-errorCh: + r := PerfTestResult{ + Type: SiteReplicationPerfTest, + Err: e.Error(), + Final: true, + } + p.Send(r) + if outCh != nil { + outCh <- r + } + return + case result := <-resultCh: + r := PerfTestResult{ + Type: SiteReplicationPerfTest, + SiteReplicationResult: &result, + Final: true, + } + p.Send(r) + if outCh != nil { + outCh <- r + } + return + default: + p.Send(PerfTestResult{ + Type: SiteReplicationPerfTest, + SiteReplicationResult: &madmin.SiteNetPerfResult{}, + }) + time.Sleep(100 * time.Millisecond) + } + } + }() + + <-done + + return nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/support-perf.go new/mc-20230707T052551Z/cmd/support-perf.go --- old/mc-20230628T215417Z/cmd/support-perf.go 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/cmd/support-perf.go 2023-07-07 07:25:51.000000000 +0200 @@ -23,6 +23,7 @@ "fmt" "os" "path/filepath" + "time" humanize "github.com/dustin/go-humanize" "github.com/minio/cli" @@ -112,10 +113,11 @@ // PerfTestOutput - stores the final output of performance test(s) type PerfTestOutput struct { - ObjectResults *ObjTestResults `json:"object,omitempty"` - NetResults *NetTestResults `json:"network,omitempty"` - DriveResults *DriveTestResults `json:"drive,omitempty"` - Error string `json:"error,omitempty"` + ObjectResults *ObjTestResults `json:"object,omitempty"` + NetResults *NetTestResults `json:"network,omitempty"` + SiteReplicationResults *SiteReplicationTestResults `json:"siteReplication,omitempty"` + DriveResults *DriveTestResults `json:"drive,omitempty"` + Error string `json:"error,omitempty"` } // DriveTestResult - result of the drive performance test on a given endpoint @@ -194,6 +196,27 @@ Results []NetTestResult `json:"servers"` } +// SiteNetStats - status for siteNet +type SiteNetStats struct { + TX uint64 `json:"tx"` // transfer rate in bytes + TXTotalDuration time.Duration `json:"txTotalDuration"` + RX uint64 `json:"rx"` // received rate in bytes + RXTotalDuration time.Duration `json:"rxTotalDuration"` + TotalConn uint64 `json:"totalConn"` +} + +// SiteReplicationTestNodeResult - result of the network performance test for site-replication +type SiteReplicationTestNodeResult struct { + Endpoint string `json:"endpoint"` + Perf SiteNetStats `json:"perf"` + Error string `json:"error,omitempty"` +} + +// SiteReplicationTestResults - result of the network performance test across all site-replication +type SiteReplicationTestResults struct { + Results []SiteReplicationTestNodeResult `json:"servers"` +} + func objectTestVerboseResult(result *madmin.SpeedTestResult) (msg string) { msg += "PUT:\n" for _, node := range result.PUTStats.Servers { @@ -247,7 +270,7 @@ switch len(args) { case 1: // cannot use alias by the name 'drive' or 'net' - if args[0] == "drive" || args[0] == "net" || args[0] == "object" { + if args[0] == "drive" || args[0] == "net" || args[0] == "object" || args[0] == "site-replication" { showCommandHelpAndExit(ctx, 1) } aliasedURL = args[0] @@ -287,6 +310,30 @@ return &r } +func convertSiteReplicationTestResults(netResults *madmin.SiteNetPerfResult) *SiteReplicationTestResults { + if netResults == nil { + return nil + } + results := []SiteReplicationTestNodeResult{} + for _, nr := range netResults.NodeResults { + results = append(results, SiteReplicationTestNodeResult{ + Endpoint: nr.Endpoint, + Error: nr.Error, + Perf: SiteNetStats{ + TX: nr.TX, + TXTotalDuration: nr.TXTotalDuration, + RX: nr.RX, + RXTotalDuration: nr.RXTotalDuration, + TotalConn: nr.TotalConn, + }, + }) + } + r := SiteReplicationTestResults{ + Results: results, + } + return &r +} + func convertNetTestResults(netResults *madmin.NetperfResult) *NetTestResults { if netResults == nil { return nil @@ -369,6 +416,8 @@ out.ObjectResults = convertObjTestResults(r.ObjectResult) case NetPerfTest: out.NetResults = convertNetTestResults(r.NetResult) + case SiteReplicationPerfTest: + out.SiteReplicationResults = convertSiteReplicationTestResults(r.SiteReplicationResult) default: fatalIf(errDummy().Trace(), fmt.Sprintf("Invalid test type %d", r.Type)) } @@ -458,6 +507,8 @@ mainAdminSpeedTestObject(ctx, aliasedURL, resultCh) case "net": mainAdminSpeedTestNetperf(ctx, aliasedURL, resultCh) + case "site-replication": + mainAdminSpeedTestSiteReplication(ctx, aliasedURL, resultCh) default: showCommandHelpAndExit(ctx, 1) // last argument is exit code } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/cmd/support-top-drive.go new/mc-20230707T052551Z/cmd/support-top-drive.go --- old/mc-20230628T215417Z/cmd/support-top-drive.go 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/cmd/support-top-drive.go 2023-07-07 07:25:51.000000000 +0200 @@ -97,6 +97,7 @@ Type: madmin.MetricsDisk, Interval: time.Second, ByDisk: true, + N: ctx.Int("count"), } p := tea.NewProgram(initTopDriveUI(disks, ctx.Int("count"))) @@ -114,6 +115,7 @@ if e != nil { fatalIf(probe.NewError(e), "Unable to fetch top drives events") } + p.Quit() }() if _, e := p.Run(); e != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/go.mod new/mc-20230707T052551Z/go.mod --- old/mc-20230628T215417Z/go.mod 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/go.mod 2023-07-07 07:25:51.000000000 +0200 @@ -47,7 +47,7 @@ github.com/gdamore/tcell/v2 v2.6.0 github.com/golang-jwt/jwt/v4 v4.5.0 github.com/juju/ratelimit v1.0.2 - github.com/minio/madmin-go/v3 v3.0.4 + github.com/minio/madmin-go/v3 v3.0.5 github.com/muesli/reflow v0.3.0 github.com/navidys/tvxwidgets v0.3.0 github.com/olekukonko/tablewriter v0.0.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230628T215417Z/go.sum new/mc-20230707T052551Z/go.sum --- old/mc-20230628T215417Z/go.sum 2023-06-28 23:54:17.000000000 +0200 +++ new/mc-20230707T052551Z/go.sum 2023-07-07 07:25:51.000000000 +0200 @@ -146,8 +146,8 @@ github.com/minio/colorjson v1.0.5/go.mod h1:Oq6oB83q+sL08u9wx68+91ELf0nV5G4c6l9pQcH5ElI= github.com/minio/filepath v1.0.0 h1:fvkJu1+6X+ECRA6G3+JJETj4QeAYO9sV43I79H8ubDY= github.com/minio/filepath v1.0.0/go.mod h1:/nRZA2ldl5z6jT9/KQuvZcQlxZIMQoFFQPvEXx9T/Bw= -github.com/minio/madmin-go/v3 v3.0.4 h1:nINToRlCFRKKINGIvn+RUkYgnQregTEi6xVO6XwSUtA= -github.com/minio/madmin-go/v3 v3.0.4/go.mod h1:lPrMoc1aeiIWmmrxBthkDqzMPQwC/Lu9ByuyM2wenJk= +github.com/minio/madmin-go/v3 v3.0.5 h1:ynWTsnszHnQVJWRL2OE4ysCvCNG0uHgdTvJpdLazf9c= +github.com/minio/madmin-go/v3 v3.0.5/go.mod h1:lPrMoc1aeiIWmmrxBthkDqzMPQwC/Lu9ByuyM2wenJk= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= github.com/minio/minio-go/v7 v7.0.57 h1:xsFiOiWjpC1XAGbFEUOzj1/gMXGz7ljfxifwcb/5YXU= ++++++ mc.obsinfo ++++++ --- /var/tmp/diff_new_pack.SfHyoE/_old 2023-07-09 20:43:00.054090598 +0200 +++ /var/tmp/diff_new_pack.SfHyoE/_new 2023-07-09 20:43:00.054090598 +0200 @@ -1,5 +1,5 @@ name: mc -version: 20230628T215417Z -mtime: 1687989257 -commit: eebdcdf36501cec35c893d7e8ab7a7473ff6860a +version: 20230707T052551Z +mtime: 1688707551 +commit: 1b992864ee0682b8be6a590ccbda080475dcadd3 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/minio-client/vendor.tar.gz /work/SRC/openSUSE:Factory/.minio-client.new.23466/vendor.tar.gz differ: char 5, line 1