mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
add watch benchmark
This commit is contained in:
parent
10b5bc9871
commit
026f93cd83
@ -1,7 +1,8 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@ -54,3 +55,41 @@ func TestWatch(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkWatch creates 10K watchers watch at /foo/[paht] each time.
|
||||
// Path is randomly chosen with max depth 10.
|
||||
// It should take less than 15ms to wake up 10K watchers.
|
||||
func BenchmarkWatch(b *testing.B) {
|
||||
s := CreateStore(100)
|
||||
|
||||
key := make([]string, 10000)
|
||||
for i := 0; i < 10000; i++ {
|
||||
|
||||
key[i] = "/foo/"
|
||||
depth := rand.Intn(10)
|
||||
|
||||
for j := 0; j < depth; j++ {
|
||||
key[i] += "/" + strconv.Itoa(rand.Int()%10)
|
||||
}
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
watchers := make([]*Watcher, 10000)
|
||||
for i := 0; i < 10000; i++ {
|
||||
// create a new watcher
|
||||
watchers[i] = NewWatcher()
|
||||
// add to the watchers list
|
||||
s.AddWatcher(key[i], watchers[i], 0)
|
||||
}
|
||||
|
||||
s.watcher.stopWatchers()
|
||||
|
||||
for _, watcher := range watchers {
|
||||
// wait for the notification for any changing
|
||||
<-watcher.C
|
||||
}
|
||||
|
||||
s.watcher = newWatcherHub()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user