From 66e3e50b6d2d82a40bc4959728cbba1fce3f26b2 Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Fri, 22 Dec 2023 16:44:06 +0100 Subject: [PATCH] Revert "peerservice: ignore addrs list" This reverts commit 95fe3ba04ca3b1385ef8a6a7eefe1a87286411e3. --- net/peerservice/peerservice.go | 55 +++++++++++------------------ net/peerservice/peerservice_test.go | 26 +++----------- 2 files changed, 25 insertions(+), 56 deletions(-) diff --git a/net/peerservice/peerservice.go b/net/peerservice/peerservice.go index ab9d93af..0f880690 100644 --- a/net/peerservice/peerservice.go +++ b/net/peerservice/peerservice.go @@ -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 diff --git a/net/peerservice/peerservice_test.go b/net/peerservice/peerservice_test.go index c20fded0..0856f5bc 100644 --- a/net/peerservice/peerservice_test.go +++ b/net/peerservice/peerservice_test.go @@ -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) {