From a15b804e007efe563a6d30faaafb35832aba3570 Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Tue, 10 Oct 2023 19:51:42 +0000 Subject: [PATCH] Sort snapshots by time and key in tabwriter output Fixes snapshot list coming out in non-deterministic order Signed-off-by: Brad Davidson --- pkg/cli/etcdsnapshot/etcd_snapshot.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/cli/etcdsnapshot/etcd_snapshot.go b/pkg/cli/etcdsnapshot/etcd_snapshot.go index 93dd738cd7..97e8c696fa 100644 --- a/pkg/cli/etcdsnapshot/etcd_snapshot.go +++ b/pkg/cli/etcdsnapshot/etcd_snapshot.go @@ -7,6 +7,7 @@ import ( "fmt" "os" "path/filepath" + "sort" "strings" "text/tabwriter" "time" @@ -193,9 +194,23 @@ func list(app *cli.Context, cfg *cmds.Server) error { w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) defer w.Flush() + // Sort snapshots by creation time and key + sfKeys := make([]string, 0, len(sf)) + for k := range sf { + sfKeys = append(sfKeys, k) + } + sort.Slice(sfKeys, func(i, j int) bool { + iKey := sfKeys[i] + jKey := sfKeys[j] + if sf[iKey].CreatedAt.Equal(sf[jKey].CreatedAt) { + return iKey < jKey + } + return sf[iKey].CreatedAt.Before(sf[jKey].CreatedAt) + }) + fmt.Fprint(w, "Name\tLocation\tSize\tCreated\n") - for _, s := range sf { - fmt.Fprintf(w, "%s\t%s\t%d\t%s\n", s.Name, s.Location, s.Size, s.CreatedAt.Format(time.RFC3339)) + for _, k := range sfKeys { + fmt.Fprintf(w, "%s\t%s\t%d\t%s\n", sf[k].Name, sf[k].Location, sf[k].Size, sf[k].CreatedAt.Format(time.RFC3339)) } }