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-10-10 20:58:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/minio-client (Old) and /work/SRC/openSUSE:Factory/.minio-client.new.28202 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "minio-client" Tue Oct 10 20:58:52 2023 rev:49 rq:1116328 version:20231004T065256Z Changes: -------- --- /work/SRC/openSUSE:Factory/minio-client/minio-client.changes 2023-10-02 20:10:12.790889115 +0200 +++ /work/SRC/openSUSE:Factory/.minio-client.new.28202/minio-client.changes 2023-10-10 20:59:05.223442759 +0200 @@ -1,0 +2,9 @@ +Sun Oct 08 16:04:34 UTC 2023 - ka...@b1-systems.de + +- Update to version 20231004T065256Z: + * Add support for resource metrics (#4689) + * scanner: Limit the active disks if no enough term space (#4705) + * Fix mirror stats with --quiet flag (#4703) + * add 'mc admin trace' filtering based on request queries (#4704) + +------------------------------------------------------------------- Old: ---- mc-20230929T164122Z.obscpio New: ---- mc-20231004T065256Z.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ minio-client.spec ++++++ --- /var/tmp/diff_new_pack.LzUiY2/_old 2023-10-10 20:59:07.107511080 +0200 +++ /var/tmp/diff_new_pack.LzUiY2/_new 2023-10-10 20:59:07.107511080 +0200 @@ -22,7 +22,7 @@ %define binary_name minio-client Name: minio-client -Version: 20230929T164122Z +Version: 20231004T065256Z Release: 0 Summary: Client for MinIO License: AGPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.LzUiY2/_old 2023-10-10 20:59:07.143512386 +0200 +++ /var/tmp/diff_new_pack.LzUiY2/_new 2023-10-10 20:59:07.147512530 +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-09-29T16-41-22Z</param> + <param name="revision">RELEASE.2023-10-04T06-52-56Z</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="manual"> - <param name="archive">mc-20230929T164122Z.obscpio</param> + <param name="archive">mc-20231004T065256Z.obscpio</param> </service> </services> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.LzUiY2/_old 2023-10-10 20:59:07.163513111 +0200 +++ /var/tmp/diff_new_pack.LzUiY2/_new 2023-10-10 20:59:07.167513256 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/minio/mc</param> - <param name="changesrevision">d47a2ba53a5e10cd1bc8b946c05f4cadb71d4ee3</param></service></servicedata> + <param name="changesrevision">eca8310ac822cf0e533c6bd3fb85c8d6099d1465</param></service></servicedata> (No newline at EOF) ++++++ mc-20230929T164122Z.obscpio -> mc-20231004T065256Z.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/accounting-reader.go new/mc-20231004T065256Z/cmd/accounting-reader.go --- old/mc-20230929T164122Z/cmd/accounting-reader.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/accounting-reader.go 2023-10-04 08:52:56.000000000 +0200 @@ -32,7 +32,7 @@ type accounter struct { current int64 - Total int64 + total int64 startTime time.Time startValue int64 refreshRate time.Duration @@ -44,7 +44,7 @@ // Instantiate a new accounter. func newAccounter(total int64) *accounter { acct := &accounter{ - Total: total, + total: total, startTime: time.Now(), startValue: 0, refreshRate: time.Millisecond * 200, @@ -112,7 +112,7 @@ var acntStat accountStat a.finishOnce.Do(func() { close(a.isFinished) - acntStat.Total = a.Total + acntStat.Total = a.total acntStat.Transferred = atomic.LoadInt64(&a.current) acntStat.Speed = a.write(atomic.LoadInt64(&a.current)) }) @@ -139,7 +139,8 @@ return atomic.LoadInt64(&a.current) } -func (a *accounter) SetTotal(int64) { +func (a *accounter) SetTotal(n int64) { + atomic.StoreInt64(&a.total, n) } // Add add to current value atomically. @@ -149,6 +150,13 @@ // Read implements Reader which internally updates current value. func (a *accounter) Read(p []byte) (n int, err error) { + defer func() { + // Upload retry can read one object twice; Avoid read to be greater than Total + if n, t := a.Get(), atomic.LoadInt64(&a.total); t > 0 && n > t { + a.Set(t) + } + }() + n = len(p) a.Add(int64(n)) return diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/admin-prometheus-generate.go new/mc-20231004T065256Z/cmd/admin-prometheus-generate.go --- old/mc-20230929T164122Z/cmd/admin-prometheus-generate.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/admin-prometheus-generate.go 2023-10-04 08:52:56.000000000 +0200 @@ -31,12 +31,14 @@ ) const ( - defaultJobName = "minio-job" - nodeJobName = "minio-job-node" - bucketJobName = "minio-job-bucket" - defaultMetricsPath = "/minio/v2/metrics/cluster" - nodeMetricsPath = "/minio/v2/metrics/node" - bucketMetricsPath = "/minio/v2/metrics/bucket" + defaultJobName = "minio-job" + nodeJobName = "minio-job-node" + bucketJobName = "minio-job-bucket" + defaultMetricsPath = "/minio/v2/metrics/cluster" + nodeMetricsPath = "/minio/v2/metrics/node" + bucketMetricsPath = "/minio/v2/metrics/bucket" + resourceJobName = "minio-job-resource" + resourceMetricsPath = "/minio/v2/metrics/resource" ) var prometheusFlags = []cli.Flag{ @@ -75,6 +77,9 @@ 3. Generate prometheus config for bucket metrics. {{.Prompt}} {{.HelpName}} play bucket + + 4. Generate prometheus config for resource metrics. + {{.Prompt}} {{.HelpName}} play resource `, } @@ -184,6 +189,20 @@ StaticConfigs: []StatConfig{ { Targets: []string{""}, + }, + }, + }, + }, + } + case "resource": + config = PrometheusConfig{ + ScrapeConfigs: []ScrapeConfig{ + { + JobName: resourceJobName, + MetricsPath: resourceMetricsPath, + StaticConfigs: []StatConfig{ + { + Targets: []string{""}, }, }, }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/admin-prometheus-metrics.go new/mc-20231004T065256Z/cmd/admin-prometheus-metrics.go --- old/mc-20230929T164122Z/cmd/admin-prometheus-metrics.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/admin-prometheus-metrics.go 2023-10-04 08:52:56.000000000 +0200 @@ -42,7 +42,7 @@ {{.HelpName}} TARGET [METRIC-TYPE] METRIC-TYPE: - valid values are ['cluster', 'node', 'bucket']. Defaults to 'cluster' if not specified. + valid values are ['cluster', 'node', 'bucket', 'resource']. Defaults to 'cluster' if not specified. FLAGS: {{range .VisibleFlags}}{{.}} @@ -56,6 +56,9 @@ 3. List of metrics reported at bucket level. {{.Prompt}} {{.HelpName}} play bucket + + 4. List of resource metrics. + {{.Prompt}} {{.HelpName}} play resource `, } @@ -91,7 +94,7 @@ } metricsSubSystem := args.Get(1) switch metricsSubSystem { - case "node", "bucket", "cluster": + case "node", "bucket", "cluster", "resource": case "": metricsSubSystem = "cluster" default: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/admin-scanner-status.go new/mc-20231004T065256Z/cmd/admin-scanner-status.go --- old/mc-20230929T164122Z/cmd/admin-scanner-status.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/admin-scanner-status.go 2023-10-04 08:52:56.000000000 +0200 @@ -229,14 +229,19 @@ table.SetAlignment(tablewriter.ALIGN_LEFT) table.SetBorder(true) table.SetRowLine(false) + + writtenRows := 0 addRow := func(s string) { table.Append([]string{s}) + writtenRows++ } _ = addRow addRowF := func(format string, vals ...interface{}) { s := fmt.Sprintf(format, vals...) table.Append([]string{s}) + writtenRows++ } + sc := m.current.Aggregated.Scanner if sc == nil { s.WriteString("(waiting for data)") @@ -338,14 +343,27 @@ } addRowF(title("Yield:")+" %v total; Avg: %s", metricsDuration(time.Duration(x.AccTime)), avg) } + if errs := m.current.Errors; len(errs) > 0 { + addRow("------------------------------------------- Errors --------------------------------------------------") + for _, s := range errs { + addRow(console.Colorize("metrics-error", s)) + } + } if m.maxPaths != 0 && len(sc.ActivePaths) > 0 { addRow("------------------------------------- Currently Scanning Paths --------------------------------------") - const length = 100 + length := 100 + if globalTermWidth > 5 { + length = globalTermWidth + } for i, s := range sc.ActivePaths { if i == m.maxPaths { break } + if globalTermHeight > 5 && writtenRows >= globalTermHeight-5 { + addRow(console.Colorize("metrics-path", fmt.Sprintf("( ... hiding %d more disk(s) .. )", len(sc.ActivePaths)-i))) + break + } if len(s) > length { s = s[:length-3] + "..." } @@ -353,12 +371,6 @@ addRow(console.Colorize("metrics-path", s)) } } - if errs := m.current.Errors; len(errs) > 0 { - addRow("------------------------------------------- Errors --------------------------------------------------") - for _, s := range errs { - addRow(console.Colorize("metrics-error", s)) - } - } table.Render() return s.String() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/admin-trace.go new/mc-20231004T065256Z/cmd/admin-trace.go --- old/mc-20230929T164122Z/cmd/admin-trace.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/admin-trace.go 2023-10-04 08:52:56.000000000 +0200 @@ -23,6 +23,7 @@ "fmt" "hash/fnv" "net/http" + "net/url" "path" "sort" "strings" @@ -74,6 +75,10 @@ Name: "request-header", Usage: "trace only matching request headers", }, + cli.StringSliceFlag{ + Name: "request-query", + Usage: "trace only matching request queries", + }, cli.BoolFlag{ Name: "errors, e", Usage: "trace only failed requests", @@ -250,6 +255,7 @@ apiPaths []string nodes []string reqHeaders []matchString + reqQueries []matchString requestSize uint64 responseSize uint64 } @@ -333,7 +339,7 @@ headerFound := false for traceHdr, traceVals := range traceInfo.Trace.HTTP.ReqInfo.Headers { for _, traceVal := range traceVals { - if headerMatch(hdr.val, traceHdr+": "+traceVal) { + if patternMatch(hdr.val, traceHdr+": "+traceVal) { headerFound = true goto exitFindingHeader } @@ -351,6 +357,34 @@ } } + if len(opts.reqQueries) > 0 && traceInfo.Trace.HTTP != nil { + matched := false + for _, qry := range opts.reqQueries { + queryFound := false + v, err := url.ParseQuery(traceInfo.Trace.HTTP.ReqInfo.RawQuery) + if err != nil { + continue + } + for traceQuery, traceVals := range v { + for _, traceVal := range traceVals { + if patternMatch(qry.val, traceQuery+"="+traceVal) { + queryFound = true + goto exitFindingQuery + } + } + } + exitFindingQuery: + if !qry.reverse && queryFound || qry.reverse && !queryFound { + matched = true + goto exitMatchingQuery + } + } + exitMatchingQuery: + if !matched { + return false + } + } + if opts.requestSize > 0 && traceInfo.Trace.HTTP.CallStats.InputBytes < int(opts.requestSize) { return false } @@ -369,11 +403,18 @@ opts.apiPaths = ctx.StringSlice("path") opts.nodes = ctx.StringSlice("node") for _, s := range ctx.StringSlice("request-header") { - ms := matchString{} - ms.reverse = strings.HasPrefix(s, "!") - ms.val = strings.TrimPrefix(s, "!") - opts.reqHeaders = append(opts.reqHeaders, ms) + opts.reqHeaders = append(opts.reqHeaders, matchString{ + reverse: strings.HasPrefix(s, "!"), + val: strings.TrimPrefix(s, "!"), + }) + } + for _, s := range ctx.StringSlice("request-query") { + opts.reqQueries = append(opts.reqQueries, matchString{ + reverse: strings.HasPrefix(s, "!"), + val: strings.TrimPrefix(s, "!"), + }) } + var e error var requestSize, responseSize uint64 if ctx.Bool("filter-request") && ctx.String("filter-size") != "" { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/find.go new/mc-20231004T065256Z/cmd/find.go --- old/mc-20230929T164122Z/cmd/find.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/find.go 2023-10-04 08:52:56.000000000 +0200 @@ -96,10 +96,10 @@ return matched } -func headerMatch(pattern, header string) bool { +func patternMatch(pattern, match string) bool { pattern = strings.ToLower(pattern) - header = strings.ToLower(header) - return wildcard.Match(pattern, header) + match = strings.ToLower(match) + return wildcard.Match(pattern, match) } // pathMatch reports whether path matches the wildcard pattern. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/globals.go new/mc-20231004T065256Z/cmd/globals.go --- old/mc-20230929T164122Z/cmd/globals.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/globals.go 2023-10-04 08:52:56.000000000 +0200 @@ -82,8 +82,8 @@ ) var ( - // Terminal width - globalTermWidth int + // Terminal height/width, zero if not found + globalTermWidth, globalTermHeight int globalHelpPager *termPager diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/main.go new/mc-20231004T065256Z/cmd/main.go --- old/mc-20230929T164122Z/cmd/main.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/main.go 2023-10-04 08:52:56.000000000 +0200 @@ -33,7 +33,6 @@ "syscall" "time" - "github.com/cheggaaa/pb" "github.com/inconshreveable/mousetrap" "github.com/minio/cli" "github.com/minio/mc/pkg/probe" @@ -42,6 +41,7 @@ "github.com/minio/pkg/v2/env" "github.com/minio/pkg/v2/trie" "github.com/minio/pkg/v2/words" + "golang.org/x/term" completeinstall "github.com/posener/complete/cmd/install" ) @@ -117,10 +117,10 @@ // Fetch terminal size, if not available, automatically // set globalQuiet to true. - if w, e := pb.GetTerminalWidth(); e != nil { + if w, h, e := term.GetSize(int(os.Stdin.Fd())); e != nil { globalQuiet = true } else { - globalTermWidth = w + globalTermWidth, globalTermHeight = w, h } // Set the mc app name. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/progress-bar.go new/mc-20231004T065256Z/cmd/progress-bar.go --- old/mc-20230929T164122Z/cmd/progress-bar.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/progress-bar.go 2023-10-04 08:52:56.000000000 +0200 @@ -105,11 +105,9 @@ func (p *progressBar) Read(buf []byte) (n int, err error) { defer func() { - // After updating the internal progress bar, make sure that its - // current progress doesn't exceed the specified total progress - currentProgress := p.ProgressBar.Get() - if currentProgress > p.ProgressBar.Total { - p.ProgressBar.Set64(p.ProgressBar.Total) + // Upload retry can read one object twice; Avoid read to be greater than Total + if n, t := p.ProgressBar.Get(), p.ProgressBar.Total; t > 0 && n > t { + p.ProgressBar.Set64(t) } }() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20230929T164122Z/cmd/status.go new/mc-20231004T065256Z/cmd/status.go --- old/mc-20230929T164122Z/cmd/status.go 2023-09-29 18:41:22.000000000 +0200 +++ new/mc-20231004T065256Z/cmd/status.go 2023-10-04 08:52:56.000000000 +0200 @@ -87,7 +87,7 @@ // SetTotal sets the total of the progressbar, ignored for quietstatus func (qs *QuietStatus) SetTotal(v int64) Status { - qs.accounter.Set(v) + qs.accounter.SetTotal(v) return qs } ++++++ mc.obsinfo ++++++ --- /var/tmp/diff_new_pack.LzUiY2/_old 2023-10-10 20:59:07.451523555 +0200 +++ /var/tmp/diff_new_pack.LzUiY2/_new 2023-10-10 20:59:07.455523700 +0200 @@ -1,5 +1,5 @@ name: mc -version: 20230929T164122Z -mtime: 1696005682 -commit: d47a2ba53a5e10cd1bc8b946c05f4cadb71d4ee3 +version: 20231004T065256Z +mtime: 1696402376 +commit: eca8310ac822cf0e533c6bd3fb85c8d6099d1465 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/minio-client/vendor.tar.gz /work/SRC/openSUSE:Factory/.minio-client.new.28202/vendor.tar.gz differ: char 5, line 1