Skip to content

Commit c907159

Browse files
committed
add --metadata to add user metadata during put
1 parent 3d18966 commit c907159

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

cli/flags.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,10 @@ var ioFlags = []cli.Flag{
269269
Value: 0,
270270
Usage: "Rate limit each instance to this number of requests per second (0 to disable)",
271271
},
272+
cli.StringSliceFlag{
273+
Name: "metadata",
274+
Usage: "Set user metada to all objects using the format <key>=<value>. Random value can be set with 'rand:%length'. Can be used multiple times. Example: --metadata foo=bar --metadata randomValue=rand:1024.",
275+
},
272276
}
273277

274278
func getCommon(ctx *cli.Context, src func() generator.Source) bench.Common {

cli/put.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
package cli
1919

2020
import (
21+
"fmt"
22+
"math/rand"
23+
"strings"
2124
"github.com/minio/cli"
2225
"github.com/minio/minio-go/v7"
2326
"github.com/minio/pkg/v2/console"
@@ -71,16 +74,43 @@ func mainPut(ctx *cli.Context) error {
7174
return runBench(ctx, &b)
7275
}
7376

77+
const metadataChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_."
78+
7479
// putOpts retrieves put options from the context.
7580
func putOpts(ctx *cli.Context) minio.PutObjectOptions {
7681
pSize, _ := toSize(ctx.String("part.size"))
82+
83+
/* metadatas */
84+
metadatas := make(map[string]string)
85+
for _, v := range ctx.StringSlice("metadata") {
86+
idx := strings.Index(v, "=")
87+
if idx <= 0 {
88+
console.Fatal("--metadata takes `key=value` argument")
89+
}
90+
key := v[:idx]
91+
value := v[idx+1:]
92+
if len(value) == 0 {
93+
console.Fatal("--metadata value can't be empty")
94+
}
95+
var rand_n int;
96+
if _, err := fmt.Sscanf(value, "rand:%d", &rand_n); err == nil {
97+
rng := rand.New(rand.NewSource(int64(rand.Uint64())))
98+
value = ""
99+
for i:=0; i<rand_n; i++ {
100+
value = value + string(metadataChars[rng.Int()%len(metadataChars)])
101+
}
102+
}
103+
metadatas[key] = value
104+
}
105+
77106
return minio.PutObjectOptions{
78107
ServerSideEncryption: newSSE(ctx),
79108
DisableMultipart: ctx.Bool("disable-multipart"),
80109
DisableContentSha256: ctx.Bool("disable-sha256-payload"),
81110
SendContentMd5: ctx.Bool("md5"),
82111
StorageClass: ctx.String("storage-class"),
83112
PartSize: pSize,
113+
UserMetadata: metadatas,
84114
}
85115
}
86116

0 commit comments

Comments
 (0)