tools/etcd-tester: stress cluster using 50MB snapshot

release-2.1
Yicheng Qin 2015-03-18 14:15:52 -07:00
parent 7e7bc76038
commit d920c5b801
2 changed files with 19 additions and 4 deletions

View File

@ -108,7 +108,10 @@ func (c *cluster) Bootstrap() error {
for i, u := range clientURLs {
s := &stresser{
Endpoint: u,
N: 200,
// 500000 100B key (50MB)
KeySize: 100,
KeySuffixRange: 500000,
N: 200,
}
go s.Stress()
stressers[i] = s

View File

@ -1,6 +1,8 @@
package main
import (
"fmt"
"math/rand"
"net"
"net/http"
"sync"
@ -21,8 +23,9 @@ type Stresser interface {
type stresser struct {
Endpoint string
// TODO: not implemented
SuffixRange int
KeySize int
KeySuffixRange int
N int
// TODO: not implemented
@ -58,7 +61,8 @@ func (s *stresser) Stress() error {
for i := 0; i < s.N; i++ {
go func() {
for {
_, err := kv.Set(ctx, "foo", "bar", nil)
key := fmt.Sprintf("foo%d", rand.Intn(s.KeySuffixRange))
_, err := kv.Set(ctx, key, randStr(s.KeySize), nil)
if err == context.Canceled {
return
}
@ -86,3 +90,11 @@ func (s *stresser) Report() (success int, failure int) {
defer s.mu.Unlock()
return s.success, s.failure
}
func randStr(size int) string {
data := make([]byte, size)
for i := 0; i < size; i++ {
data[i] = byte(int('a') + rand.Intn(26))
}
return string(data)
}