From cc88215b46166777e6185cb364c6c7033d9175e9 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Thu, 19 Dec 2013 22:43:50 -0800 Subject: [PATCH] fix(bench): initial commit --- .gitignore | 1 + bench/bench.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ build | 1 + 3 files changed, 66 insertions(+) create mode 100644 bench/bench.go diff --git a/.gitignore b/.gitignore index a080789ef..e1f4d0fee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ src/ pkg/ /etcd +/etcdbench /server/release_version.go /go-bindata /machine* diff --git a/bench/bench.go b/bench/bench.go new file mode 100644 index 000000000..9baf6ea06 --- /dev/null +++ b/bench/bench.go @@ -0,0 +1,64 @@ +package main + +import ( + "flag" + "log" + "strconv" + + "github.com/coreos/go-etcd/etcd" +) + +func doWrite(client *etcd.Client, key string, c chan int) { + client.Set(key, key, 0) + c <- 1 +} + +func write(client *etcd.Client, requests int, end chan int) { + c := make(chan int) + + for i := 0; i < requests; i++ { + key := strconv.Itoa(i) + go doWrite(client, key, c) + <-c + } + end <- 1 +} + +func watch(client *etcd.Client, key string) { + receiver := make(chan *etcd.Response) + go client.Watch(key, 0, true, receiver, nil) + + log.Printf("watching: %s", key) + + received := 0 + for { + <-receiver + received++ + } +} + +func main() { + rWrites := flag.Int("write-requests", 50000, "number of writes") + cWrites := flag.Int("concurrent-writes", 500, "number of concurrent writes") + + watches := flag.Int("watches", 500, "number of writes") + + flag.Parse() + + client := etcd.NewClient(nil) + + for i := 0; i < *watches; i++ { + key := strconv.Itoa(i) + go watch(client, key) + } + + wChan := make(chan int, *cWrites) + for i := 0; i < *cWrites; i++ { + go write(client, (*rWrites / *cWrites), wChan) + } + + for i := 0; i < *cWrites; i++ { + <-wChan + log.Printf("Completed %d writes", (*rWrites / *cWrites)) + } +} diff --git a/build b/build index 8e76b4c86..eff0f84d5 100755 --- a/build +++ b/build @@ -24,3 +24,4 @@ done ./scripts/release-version > server/release_version.go go build "${ETCD_PACKAGE}" +go build -o etcdbench "${ETCD_PACKAGE}"/bench