aboutsummaryrefslogtreecommitdiff
path: root/benchmarks/s3lat/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/s3lat/main.go')
-rw-r--r--benchmarks/s3lat/main.go135
1 files changed, 135 insertions, 0 deletions
diff --git a/benchmarks/s3lat/main.go b/benchmarks/s3lat/main.go
new file mode 100644
index 0000000..32b03cf
--- /dev/null
+++ b/benchmarks/s3lat/main.go
@@ -0,0 +1,135 @@
+package main
+
+import (
+ "context"
+ "log"
+ "os"
+ "fmt"
+ "time"
+ "io"
+ "io/ioutil"
+ "strings"
+ "net/http"
+ "crypto/tls"
+ "strconv"
+
+ "github.com/minio/minio-go/v7"
+ "github.com/minio/minio-go/v7/pkg/credentials"
+ "github.com/google/uuid"
+)
+
+func main() {
+ fmt.Printf("endpoint,nanoseconds\n")
+
+ // Initial setup
+ _, isSSL := os.LookupEnv("SSL");
+ opts := minio.Options {
+ Creds: credentials.NewStaticV4(os.Getenv("AWS_ACCESS_KEY_ID"), os.Getenv("AWS_SECRET_ACCESS_KEY"), ""),
+ Secure: isSSL,
+ }
+
+ if region, ok := os.LookupEnv("REGION"); ok {
+ opts.Region = region
+ }
+
+ if _, ok := os.LookupEnv("SSL_INSECURE"); ok {
+ opts.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}
+ }
+
+ mc, err := minio.New(os.Getenv("ENDPOINT"), &opts)
+
+ if err != nil {
+ log.Fatal("failed connect", err)
+ return
+ }
+
+ // Create Bucket
+ buck := uuid.New().String()
+ err = mc.MakeBucket(context.Background(), buck, minio.MakeBucketOptions{ })
+ if err != nil {
+ log.Fatal(err)
+ return
+ }
+
+ // List Buckets
+ 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.Nanoseconds())
+ }
+
+ // PutObject
+ for i := 0; i < 100; i++ {
+ istr := strconv.Itoa(i)
+ content := istr + " hello world " + istr
+ start := time.Now()
+ _, err := mc.PutObject(context.Background(), buck, "element"+istr, 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.Nanoseconds())
+ }
+
+ // ListObject
+ for i := 0; i < 100; i++ {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ start := time.Now()
+ objectCh := mc.ListObjects(ctx, buck, 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.Nanoseconds())
+ }
+
+ // GetObject
+ for i := 0; i < 100; i++ {
+ istr := strconv.Itoa(i)
+ start := time.Now()
+ object, err := mc.GetObject(context.Background(), buck, "element"+istr, 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.Nanoseconds())
+ }
+
+ // RemoveObject
+ for i := 0; i < 100; i++ {
+ istr := strconv.Itoa(i)
+ start := time.Now()
+ err = mc.RemoveObject(context.Background(), buck, "element"+istr, minio.RemoveObjectOptions{})
+ elapsed := time.Since(start)
+ if err != nil {
+ log.Fatal(err)
+ return
+ }
+ fmt.Printf("removeobject,%v\n", elapsed.Nanoseconds())
+ }
+
+ // RemoveBucket
+ err = mc.RemoveBucket(context.Background(), buck)
+ if err != nil {
+ log.Fatal(err)
+ return
+ }
+}