|
@@ -1,6 +1,8 @@
|
|
|
package main
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+ "math/rand"
|
|
|
"net"
|
|
"net"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"sync"
|
|
"sync"
|
|
@@ -21,8 +23,9 @@ type Stresser interface {
|
|
|
|
|
|
|
|
type stresser struct {
|
|
type stresser struct {
|
|
|
Endpoint string
|
|
Endpoint string
|
|
|
- // TODO: not implemented
|
|
|
|
|
- SuffixRange int
|
|
|
|
|
|
|
+
|
|
|
|
|
+ KeySize int
|
|
|
|
|
+ KeySuffixRange int
|
|
|
|
|
|
|
|
N int
|
|
N int
|
|
|
// TODO: not implemented
|
|
// TODO: not implemented
|
|
@@ -58,7 +61,8 @@ func (s *stresser) Stress() error {
|
|
|
for i := 0; i < s.N; i++ {
|
|
for i := 0; i < s.N; i++ {
|
|
|
go func() {
|
|
go func() {
|
|
|
for {
|
|
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 {
|
|
if err == context.Canceled {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -86,3 +90,11 @@ func (s *stresser) Report() (success int, failure int) {
|
|
|
defer s.mu.Unlock()
|
|
defer s.mu.Unlock()
|
|
|
return s.success, s.failure
|
|
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)
|
|
|
|
|
+}
|