fix p2p permission refresh during load tests

This commit is contained in:
richjohnrambo
2026-09-27 12:53:09 +08:00
parent a57d1e8d4a
commit f9f7321b11
9 changed files with 269 additions and 15 deletions
+1 -1
View File
@@ -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"
```
+30 -13
View File
@@ -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)
}
}