mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
Revert "peerservice: ignore addrs list"
This reverts commit 95fe3ba04c
.
This commit is contained in:
parent
68e62f3eb7
commit
66e3e50b6d
2 changed files with 25 additions and 56 deletions
|
@ -4,12 +4,6 @@ import (
|
|||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/app/logger"
|
||||
"github.com/anyproto/any-sync/net/peer"
|
||||
|
@ -19,6 +13,9 @@ import (
|
|||
"github.com/anyproto/any-sync/net/transport/quic"
|
||||
"github.com/anyproto/any-sync/net/transport/yamux"
|
||||
"github.com/anyproto/any-sync/nodeconf"
|
||||
"go.uber.org/zap"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const CName = "net.peerservice"
|
||||
|
@ -43,16 +40,14 @@ type PeerService interface {
|
|||
}
|
||||
|
||||
type peerService struct {
|
||||
yamux transport.Transport
|
||||
quic transport.Transport
|
||||
nodeConf nodeconf.NodeConf
|
||||
peerAddrs map[string][]string
|
||||
ignoreAddrs *sync.Map
|
||||
ignoreTimeout time.Duration
|
||||
pool pool.Pool
|
||||
server server.DRPCServer
|
||||
preferQuic bool
|
||||
mu sync.RWMutex
|
||||
yamux transport.Transport
|
||||
quic transport.Transport
|
||||
nodeConf nodeconf.NodeConf
|
||||
peerAddrs map[string][]string
|
||||
pool pool.Pool
|
||||
server server.DRPCServer
|
||||
preferQuic bool
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
func (p *peerService) Init(a *app.App) (err error) {
|
||||
|
@ -62,8 +57,6 @@ func (p *peerService) Init(a *app.App) (err error) {
|
|||
p.pool = a.MustComponent(pool.CName).(pool.Pool)
|
||||
p.server = a.MustComponent(server.CName).(server.DRPCServer)
|
||||
p.peerAddrs = map[string][]string{}
|
||||
p.ignoreAddrs = &sync.Map{}
|
||||
p.ignoreTimeout = time.Minute * 3
|
||||
p.yamux.SetAccepter(p)
|
||||
p.quic.SetAccepter(p)
|
||||
return nil
|
||||
|
@ -86,21 +79,21 @@ func (p *peerService) PreferQuic(prefer bool) {
|
|||
|
||||
func (p *peerService) Dial(ctx context.Context, peerId string) (pr peer.Peer, err error) {
|
||||
p.mu.RLock()
|
||||
defer p.mu.RUnlock()
|
||||
|
||||
addrs, err := p.getPeerAddrs(peerId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var mc transport.MultiConn
|
||||
log.DebugCtx(ctx, "dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs))
|
||||
|
||||
var schemes = yamuxPreferSchemes
|
||||
if p.preferQuic {
|
||||
schemes = quicPreferSchemes
|
||||
}
|
||||
|
||||
addrs, err := p.getPeerAddrs(peerId)
|
||||
if err != nil {
|
||||
p.mu.RUnlock()
|
||||
return
|
||||
}
|
||||
p.mu.RUnlock()
|
||||
|
||||
var mc transport.MultiConn
|
||||
log.DebugCtx(ctx, "dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs))
|
||||
|
||||
err = ErrAddrsNotFound
|
||||
for _, sch := range schemes {
|
||||
if mc, err = p.dialScheme(ctx, sch, addrs); err == nil {
|
||||
|
@ -132,20 +125,14 @@ func (p *peerService) dialScheme(ctx context.Context, sch string, addrs []string
|
|||
}
|
||||
|
||||
err = ErrAddrsNotFound
|
||||
now := time.Now()
|
||||
for _, addr := range addrs {
|
||||
if scheme(addr) != sch {
|
||||
continue
|
||||
}
|
||||
if tm, ok := p.ignoreAddrs.Load(addr); ok && tm.(time.Time).After(now) {
|
||||
continue
|
||||
}
|
||||
if mc, err = tr.Dial(ctx, stripScheme(addr)); err == nil {
|
||||
p.ignoreAddrs.Delete(addr)
|
||||
return
|
||||
} else {
|
||||
log.InfoCtx(ctx, "can't connect to host", zap.String("addr", addr), zap.Error(err))
|
||||
p.ignoreAddrs.Store(addr, time.Now().Add(p.ignoreTimeout))
|
||||
}
|
||||
}
|
||||
return
|
||||
|
|
|
@ -3,12 +3,6 @@ package peerservice
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/mock/gomock"
|
||||
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/net/peer"
|
||||
"github.com/anyproto/any-sync/net/pool"
|
||||
|
@ -18,6 +12,10 @@ import (
|
|||
"github.com/anyproto/any-sync/net/transport/yamux"
|
||||
"github.com/anyproto/any-sync/nodeconf"
|
||||
"github.com/anyproto/any-sync/nodeconf/mock_nodeconf"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/mock/gomock"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var ctx = context.Background()
|
||||
|
@ -113,22 +111,6 @@ func TestPeerService_Dial(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
assert.NotNil(t, p)
|
||||
})
|
||||
t.Run("ignore", func(t *testing.T) {
|
||||
fx := newFixture(t)
|
||||
defer fx.finish(t)
|
||||
fx.PreferQuic(false)
|
||||
var peerId = "p1"
|
||||
|
||||
fx.nodeConf.EXPECT().PeerAddresses(peerId).Return([]string{"127.0.0.1:1111"}, true).AnyTimes()
|
||||
|
||||
fx.yamux.MockTransport.EXPECT().Dial(ctx, "127.0.0.1:1111").Return(nil, fmt.Errorf("error"))
|
||||
|
||||
_, err := fx.Dial(ctx, peerId)
|
||||
require.Error(t, err)
|
||||
|
||||
_, err = fx.Dial(ctx, peerId)
|
||||
require.EqualError(t, err, ErrAddrsNotFound.Error())
|
||||
})
|
||||
}
|
||||
|
||||
func TestPeerService_Accept(t *testing.T) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue