diff options
Diffstat (limited to 'benchmarks/s3lat/main.go')
-rw-r--r-- | benchmarks/s3lat/main.go | 135 |
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 + } +} |