Skip to content

Commit

Permalink
mosdns: forward: avoid picking same upstream
Browse files Browse the repository at this point in the history
* Link: IrineSistiana/mosdns#842

Signed-off-by: sbwml <[email protected]>
  • Loading branch information
sbwml committed Oct 3, 2024
1 parent ab4c2a0 commit 805606d
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
4 changes: 2 additions & 2 deletions mosdns/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk

PKG_NAME:=mosdns
PKG_VERSION:=5.3.3
PKG_RELEASE:=1
PKG_RELEASE:=2

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/IrineSistiana/mosdns/tar.gz/v$(PKG_VERSION)?
Expand All @@ -22,7 +22,7 @@ PKG_USE_MIPS16:=0
PKG_BUILD_FLAGS:=no-mips16

GO_PKG:=github.com/IrineSistiana/mosdns
GO_PKG_LDFLAGS_X:=main.version=v$(PKG_VERSION)
GO_PKG_LDFLAGS_X:=main.version=v$(PKG_VERSION)-$(PKG_RELEASE)

include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
Expand Down
62 changes: 62 additions & 0 deletions mosdns/patches/200-forward-avoid-picking-same-upstream.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
From 348bc3f68c676de929e74accc75e62d01ea999be Mon Sep 17 00:00:00 2001
From: Henry-ZHR <[email protected]>
Date: Mon, 16 Sep 2024 10:59:42 +0800
Subject: [PATCH] forward: avoid picking same upstream

---
plugin/executable/forward/forward.go | 7 ++++++-
plugin/executable/forward/utils.go | 5 -----
2 files changed, 6 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"
"strings"
"time"

@@ -251,6 +252,9 @@ func (f *Forward) exchange(ctx context.C
if concurrent > maxConcurrentQueries {
concurrent = maxConcurrentQueries
}
+ if concurrent > len(us) {
+ concurrent = len(us)
+ }

type res struct {
r *dns.Msg
@@ -261,8 +265,9 @@ func (f *Forward) exchange(ctx context.C
done := make(chan struct{})
defer close(done)

+ p := rand.Perm(len(us))
for i := 0; i < concurrent; i++ {
- u := randPick(us)
+ u := us[p[i]]
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)

0 comments on commit 805606d

Please sign in to comment.