fix p2p permission refresh during load tests
This commit is contained in:
@@ -244,7 +244,7 @@ export MYSQL_DSN='readonly:password@tcp(mysql-host:3306)/meeting_im?parseTime=tr
|
||||
-coordinator "loadtest/im-pressure/results/${RUN_ID}/coordinator.json" \
|
||||
-tenant allrich \
|
||||
-dsn-env MYSQL_DSN \
|
||||
-registry-db meeting_im \
|
||||
-registry-db hotgo \
|
||||
-output "loadtest/im-pressure/results/${RUN_ID}/db-verification.json"
|
||||
```
|
||||
|
||||
|
||||
@@ -259,24 +259,14 @@ func (r *agentRun) reconcileHistory(ctx context.Context, ledger []AcceptedMessag
|
||||
defer cancel()
|
||||
r.issueHistoryQueries(historyCtx, queries)
|
||||
_ = waitContext(historyCtx, 2*time.Second)
|
||||
for round := 0; round < 2; round++ {
|
||||
for {
|
||||
missing := missingHistory(r.recorder, expected)
|
||||
if len(missing) == 0 || historyCtx.Err() != nil {
|
||||
break
|
||||
}
|
||||
retryQueries := make([]historyQuery, 0, len(missing))
|
||||
for _, message := range missing {
|
||||
client := r.clients[message.PeerIndex]
|
||||
if message.Kind == "group" {
|
||||
client = r.clients[1]
|
||||
}
|
||||
if client != nil {
|
||||
retryQueries = append(retryQueries, historyQuery{client: client, topic: message.Topic,
|
||||
since: message.Seq, before: message.Seq + 1, limit: 1})
|
||||
}
|
||||
}
|
||||
retryQueries := r.historyQueriesForMessages(missing)
|
||||
r.issueHistoryQueries(historyCtx, retryQueries)
|
||||
_ = waitContext(historyCtx, 2*time.Second)
|
||||
_ = waitContext(historyCtx, 5*time.Second)
|
||||
}
|
||||
missing := missingHistory(r.recorder, expected)
|
||||
missingIDs := make([]string, 0, len(missing))
|
||||
@@ -287,6 +277,33 @@ func (r *agentRun) reconcileHistory(ctx context.Context, ledger []AcceptedMessag
|
||||
return len(expected), len(expected) - len(missing), missingIDs
|
||||
}
|
||||
|
||||
func (r *agentRun) historyQueriesForMessages(messages []AcceptedMessage) []historyQuery {
|
||||
byTopic := make(map[string][]AcceptedMessage)
|
||||
for _, message := range messages {
|
||||
byTopic[message.Topic] = append(byTopic[message.Topic], message)
|
||||
}
|
||||
queries := make([]historyQuery, 0, len(byTopic))
|
||||
for topic, topicMessages := range byTopic {
|
||||
sort.Slice(topicMessages, func(i, j int) bool { return topicMessages[i].Seq < topicMessages[j].Seq })
|
||||
client := r.clients[topicMessages[0].PeerIndex]
|
||||
if topicMessages[0].Kind == "group" {
|
||||
client = r.clients[1]
|
||||
}
|
||||
if client == nil {
|
||||
continue
|
||||
}
|
||||
for start := 0; start < len(topicMessages); start += 200 {
|
||||
end := start + 200
|
||||
if end > len(topicMessages) {
|
||||
end = len(topicMessages)
|
||||
}
|
||||
queries = append(queries, historyQuery{client: client, topic: topic,
|
||||
since: topicMessages[start].Seq, before: topicMessages[end-1].Seq + 1, limit: 256})
|
||||
}
|
||||
}
|
||||
return queries
|
||||
}
|
||||
|
||||
func (r *agentRun) issueHistoryQueries(ctx context.Context, queries []historyQuery) {
|
||||
workers := r.cfg.HistoryWorkers
|
||||
if workers > len(queries) {
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestHistoryQueriesForMessagesGroupsRangesByTopic(t *testing.T) {
|
||||
p2pClient := &WSClient{}
|
||||
groupClient := &WSClient{}
|
||||
run := &agentRun{clients: map[int]*WSClient{1: groupClient, 7: p2pClient}}
|
||||
messages := make([]AcceptedMessage, 0, 207)
|
||||
for seq := int64(205); seq >= 1; seq-- {
|
||||
messages = append(messages, AcceptedMessage{Kind: "p2p", Topic: "p2p-a", PeerIndex: 7, Seq: seq})
|
||||
}
|
||||
messages = append(messages,
|
||||
AcceptedMessage{Kind: "group", Topic: "grp-a", PeerIndex: 99, Seq: 11},
|
||||
AcceptedMessage{Kind: "group", Topic: "grp-a", PeerIndex: 99, Seq: 12},
|
||||
)
|
||||
|
||||
queries := run.historyQueriesForMessages(messages)
|
||||
if len(queries) != 3 {
|
||||
t.Fatalf("queries=%d want=3", len(queries))
|
||||
}
|
||||
p2pQueries := 0
|
||||
groupQueries := 0
|
||||
for _, query := range queries {
|
||||
switch query.topic {
|
||||
case "p2p-a":
|
||||
p2pQueries++
|
||||
if query.client != p2pClient || query.limit != 256 {
|
||||
t.Fatalf("unexpected p2p query: %#v", query)
|
||||
}
|
||||
case "grp-a":
|
||||
groupQueries++
|
||||
if query.client != groupClient || query.since != 11 || query.before != 13 {
|
||||
t.Fatalf("unexpected group query: %#v", query)
|
||||
}
|
||||
}
|
||||
}
|
||||
if p2pQueries != 2 || groupQueries != 1 {
|
||||
t.Fatalf("p2p queries=%d group queries=%d", p2pQueries, groupQueries)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user