aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-04-15 21:13:07 -0700
committerChris Lu <chris.lu@gmail.com>2019-04-15 21:13:07 -0700
commitaf52fb23163e952d55b0f529fb9a7509b17db704 (patch)
tree938b52637ad99779219329d8be3fcd5bb9a2d88d
parent59966561414997b18be3413d05c02a7eb15b6d12 (diff)
downloadseaweedfs-af52fb23163e952d55b0f529fb9a7509b17db704.tar.xz
seaweedfs-af52fb23163e952d55b0f529fb9a7509b17db704.zip
stress test filer
-rw-r--r--unmaintained/stress_filer_upload/bench_filer_upload/bench_filer_upload.go34
-rw-r--r--unmaintained/stress_filer_upload/stress_filer_upload_actual/stress_filer_upload.go1
2 files changed, 25 insertions, 10 deletions
diff --git a/unmaintained/stress_filer_upload/bench_filer_upload/bench_filer_upload.go b/unmaintained/stress_filer_upload/bench_filer_upload/bench_filer_upload.go
index 79ecaff12..b2e4b28c6 100644
--- a/unmaintained/stress_filer_upload/bench_filer_upload/bench_filer_upload.go
+++ b/unmaintained/stress_filer_upload/bench_filer_upload/bench_filer_upload.go
@@ -4,7 +4,10 @@ import (
"bytes"
"flag"
"fmt"
+ "io"
+ "io/ioutil"
"log"
+ "math/rand"
"mime/multipart"
"net/http"
"os"
@@ -17,6 +20,7 @@ var (
size = flag.Int("size", 1024, "file size")
concurrency = flag.Int("c", 4, "concurrent number of uploads")
times = flag.Int("n", 1024, "repeated number of times")
+ fileCount = flag.Int("fileCount", 1, "number of files to write")
destination = flag.String("to", "http://localhost:8888/", "destination directory on filer")
statsChan = make(chan stat, 8)
@@ -37,24 +41,32 @@ func main() {
for x := 0; x < *concurrency; x++ {
wg.Add(1)
- client := &http.Client{}
-
- go func() {
+ go func(x int) {
defer wg.Done()
+
+ client := &http.Client{Transport: &http.Transport{
+ MaxConnsPerHost: 1024,
+ MaxIdleConnsPerHost: 1024,
+ }}
+ r := rand.New(rand.NewSource(time.Now().UnixNano() + int64(x)))
+
for t := 0; t < *times; t++ {
- if size, err := uploadFileToFiler(client, data, fmt.Sprintf("file%d", t), *destination); err == nil {
- statsChan <- stat{
- size: size,
+ for f := 0; f < *fileCount; f++ {
+ fn := r.Intn(*fileCount)
+ if size, err := uploadFileToFiler(client, data, fmt.Sprintf("file%04d", fn), *destination); err == nil {
+ statsChan <- stat{
+ size: size,
+ }
+ } else {
+ log.Fatalf("client %d upload %d times: %v", x, t, err)
}
- }else {
- log.Fatalf("upload: %v", err)
}
}
- }()
+ }(x)
}
go func() {
- ticker := time.NewTicker(500 * time.Millisecond)
+ ticker := time.NewTicker(1000 * time.Millisecond)
var lastTime time.Time
var counter, size int64
@@ -105,6 +117,7 @@ func uploadFileToFiler(client *http.Client, data []byte, filename, destination s
request, err := http.NewRequest("POST", uri, body)
request.Header.Set("Content-Type", writer.FormDataContentType())
+ // request.Close = true // can not use this, which do not reuse http connection, impacting filer->volume also.
resp, err := client.Do(request)
if err != nil {
@@ -115,6 +128,7 @@ func uploadFileToFiler(client *http.Client, data []byte, filename, destination s
if err != nil {
return 0, fmt.Errorf("read http POST %s response: %v", uri, err)
}
+ io.Copy(ioutil.Discard, resp.Body)
resp.Body.Close()
}
diff --git a/unmaintained/stress_filer_upload/stress_filer_upload_actual/stress_filer_upload.go b/unmaintained/stress_filer_upload/stress_filer_upload_actual/stress_filer_upload.go
index 41fb85ae0..8b986b546 100644
--- a/unmaintained/stress_filer_upload/stress_filer_upload_actual/stress_filer_upload.go
+++ b/unmaintained/stress_filer_upload/stress_filer_upload_actual/stress_filer_upload.go
@@ -142,6 +142,7 @@ func uploadFileToFiler(client *http.Client, filename, destination string) (size
if err != nil {
return 0, fmt.Errorf("read http POST %s response: %v", uri, err)
}
+ io.Copy(ioutil.Discard, resp.Body)
resp.Body.Close()
}