package main import ( "context" "log" "os" "fmt" "time" "io" "io/ioutil" "strings" "net/http" "crypto/tls" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) // alias grg='sudo python3 main.py run dc1:dc1s1 garage -c /tmp/../tmp/garage-testnet/dc1/dc1s1/garage.toml' // grg key new --name bench // for i in $(seq 1 10); do grg bucket create bench$i; grg bucket allow --read --write bench$i --key bench; done func main() { mc, err := minio.New(os.Getenv("ENDPOINT"), &minio.Options{ Creds: credentials.NewStaticV4(os.Getenv("AWS_ACCESS_KEY_ID"), os.Getenv("AWS_SECRET_ACCESS_KEY"), ""), Secure: true, Region: os.Getenv("REGION"), Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}, }) if err != nil { log.Fatal("failed connect", err) return } for i := 0; i < 100; i++ { start := time.Now() _, err := mc.ListBuckets(context.Background()) elapsed := time.Since(start) if err != nil { log.Fatal("failed listbucket: ", err) return } fmt.Printf("listbuckets,%v\n", elapsed) } for i := 0; i < 100; i++ { content := string(i) + " hello world " + string(i) start := time.Now() _, err := mc.PutObject(context.Background(), "bench1", "element"+string(i), strings.NewReader(content), int64(len(content)), minio.PutObjectOptions{ContentType:"application/octet-stream"}) elapsed := time.Since(start) if err != nil { log.Fatal("failed putObject: ",err) return } fmt.Printf("putobject,%v\n", elapsed) } for i := 0; i < 100; i++ { ctx, cancel := context.WithCancel(context.Background()) defer cancel() start := time.Now() objectCh := mc.ListObjects(ctx, "bench1", minio.ListObjectsOptions{ Recursive: true, }) for object := range objectCh { if object.Err != nil { log.Fatal(object.Err) return } } elapsed := time.Since(start) fmt.Printf("listobjects,%v\n", elapsed) } for i := 0; i < 100; i++ { start := time.Now() object, err := mc.GetObject(context.Background(), "bench1", "element"+string(i), minio.GetObjectOptions{}) if err != nil { log.Fatal(err) return } if _, err = io.Copy(ioutil.Discard, object) ; err != nil { log.Fatal("failed getobject: ", err) return } elapsed := time.Since(start) fmt.Printf("getobject,%v\n", elapsed) } for i := 0; i < 100; i++ { start := time.Now() err = mc.RemoveObject(context.Background(), "bench1", "element"+string(i), minio.RemoveObjectOptions{}) elapsed := time.Since(start) if err != nil { log.Fatal(err) return } fmt.Printf("removeobject,%v\n", elapsed) } }