53 lines
1.3 KiB
Diff
53 lines
1.3 KiB
Diff
From f5d190ab1542b96688353eeb3d3d5c46fbad8b7c Mon Sep 17 00:00:00 2001
|
|
From: Irine Sistiana <49315432+IrineSistiana@users.noreply.github.com>
|
|
Date: Wed, 11 Dec 2024 20:49:42 +0800
|
|
Subject: [PATCH 1/2] forward: avoid picking same upstream if concurrent > 2
|
|
|
|
---
|
|
plugin/executable/forward/forward.go | 4 +++-
|
|
plugin/executable/forward/utils.go | 5 -----
|
|
2 files changed, 3 insertions(+), 6 deletions(-)
|
|
|
|
--- a/plugin/executable/forward/forward.go
|
|
+++ b/plugin/executable/forward/forward.go
|
|
@@ -24,6 +24,7 @@ import (
|
|
"crypto/tls"
|
|
"errors"
|
|
"fmt"
|
|
+ "math/rand/v2"
|
|
"strings"
|
|
"time"
|
|
|
|
@@ -261,8 +262,9 @@ func (f *Forward) exchange(ctx context.C
|
|
done := make(chan struct{})
|
|
defer close(done)
|
|
|
|
+ r := rand.IntN(len(us))
|
|
for i := 0; i < concurrent; i++ {
|
|
- u := randPick(us)
|
|
+ u := us[(r+i)%len(us)]
|
|
qc := copyPayload(queryPayload)
|
|
go func(uqid uint32, question dns.Question) {
|
|
defer pool.ReleaseBuf(qc)
|
|
--- a/plugin/executable/forward/utils.go
|
|
+++ b/plugin/executable/forward/utils.go
|
|
@@ -21,7 +21,6 @@ package fastforward
|
|
|
|
import (
|
|
"context"
|
|
- "math/rand"
|
|
"time"
|
|
|
|
"github.com/IrineSistiana/mosdns/v5/pkg/pool"
|
|
@@ -153,10 +152,6 @@ func (q *queryInfo) MarshalLogObject(enc
|
|
return nil
|
|
}
|
|
|
|
-func randPick[T any](s []T) T {
|
|
- return s[rand.Intn(len(s))]
|
|
-}
|
|
-
|
|
func copyPayload(b *[]byte) *[]byte {
|
|
bc := pool.GetBuf(len(*b))
|
|
copy(*bc, *b)
|