Browse Source

Merge pull request #3538 from xiang90/bench

benchmarkv3: refactoring the main logic
Xiang Li 10 years ago
parent
commit
8bb50635ce
2 changed files with 65 additions and 39 deletions
  1. 42 0
      tools/v3benchmark/get.go
  2. 23 39
      tools/v3benchmark/main.go

+ 42 - 0
tools/v3benchmark/get.go

@@ -0,0 +1,42 @@
+// Copyright 2015 CoreOS, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package main
+
+import (
+	"time"
+
+	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
+	"github.com/coreos/etcd/etcdserver/etcdserverpb"
+)
+
+func get(client etcdserverpb.EtcdClient, key, end []byte, requests <-chan struct{}) {
+	defer wg.Done()
+	req := &etcdserverpb.RangeRequest{Key: key, RangeEnd: end}
+
+	for _ = range requests {
+		st := time.Now()
+		_, err := client.Range(context.Background(), req)
+
+		var errStr string
+		if err != nil {
+			errStr = err.Error()
+		}
+		results <- &result{
+			errStr:   errStr,
+			duration: time.Now().Sub(st),
+		}
+		bar.Increment()
+	}
+}

+ 23 - 39
tools/v3benchmark/main.go

@@ -22,11 +22,16 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/rakyll/pb"
 	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/rakyll/pb"
-	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
 	"github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/etcdserverpb"
 )
 )
 
 
+var (
+	bar     *pb.ProgressBar
+	results chan *result
+	wg      sync.WaitGroup
+)
+
 func main() {
 func main() {
 	var c, n int
 	var c, n int
 	var url string
 	var url string
@@ -50,53 +55,32 @@ func main() {
 		rangeEnd = []byte(flag.Args()[2])
 		rangeEnd = []byte(flag.Args()[2])
 	}
 	}
 
 
-	results := make(chan *result, n)
-	bar := pb.New(n)
+	results = make(chan *result, n)
+	bar = pb.New(n)
 	bar.Format("Bom !")
 	bar.Format("Bom !")
 	bar.Start()
 	bar.Start()
+
 	start := time.Now()
 	start := time.Now()
-	defer func() {
-		bar.Finish()
-		printReport(n, results, time.Now().Sub(start))
-	}()
 
 
-	var wg sync.WaitGroup
 	wg.Add(c)
 	wg.Add(c)
-	jobs := make(chan struct{}, n)
-	for i := 0; i < c; i++ {
-		go func() {
-			defer wg.Done()
-
-			conn, err := grpc.Dial(url)
-			if err != nil {
-				fmt.Errorf("dial error: %v", err)
-				os.Exit(1)
-			}
-			etcd := etcdserverpb.NewEtcdClient(conn)
-			req := &etcdserverpb.RangeRequest{Key: key, RangeEnd: rangeEnd}
-
-			for _ = range jobs {
-				st := time.Now()
-				resp, err := etcd.Range(context.Background(), req)
+	requests := make(chan struct{}, n)
+	conn, err := grpc.Dial(url)
+	if err != nil {
+		fmt.Errorf("dial error: %v", err)
+		os.Exit(1)
+	}
 
 
-				var errStr string
-				if err != nil {
-					errStr = err.Error()
-				} else {
-					errStr = resp.Header.Error
-				}
-				results <- &result{
-					errStr:   errStr,
-					duration: time.Now().Sub(st),
-				}
-				bar.Increment()
-			}
-		}()
+	for i := 0; i < c; i++ {
+		go get(etcdserverpb.NewEtcdClient(conn), key, rangeEnd, requests)
 	}
 	}
+
 	for i := 0; i < n; i++ {
 	for i := 0; i < n; i++ {
-		jobs <- struct{}{}
+		requests <- struct{}{}
 	}
 	}
-	close(jobs)
+	close(requests)
 
 
 	wg.Wait()
 	wg.Wait()
+
+	bar.Finish()
+	printReport(n, results, time.Now().Sub(start))
 }
 }