debug
This commit is contained in:
parent
2d2f24b3e3
commit
cc89d5919e
@ -67,7 +67,7 @@ func (s *messagePool) SendSync(ctx context.Context, peerId string, msg *spacesyn
|
|||||||
s.waiters[msg.ReplyId] = waiter
|
s.waiters[msg.ReplyId] = waiter
|
||||||
s.waitersMx.Unlock()
|
s.waitersMx.Unlock()
|
||||||
|
|
||||||
err = s.SendPeer(ctx, peerId, msg)
|
err = s.SendPeer(context.Background(), peerId, msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -87,15 +87,30 @@ func (s *messagePool) SendSync(ctx context.Context, peerId string, msg *spacesyn
|
|||||||
|
|
||||||
func (s *messagePool) SendPeer(ctx context.Context, peerId string, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
func (s *messagePool) SendPeer(ctx context.Context, peerId string, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
s.updateLastUsage()
|
s.updateLastUsage()
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
log.Warn("ctx.Done")
|
||||||
|
default:
|
||||||
|
}
|
||||||
return s.StreamManager.SendPeer(ctx, peerId, msg)
|
return s.StreamManager.SendPeer(ctx, peerId, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *messagePool) SendResponsible(ctx context.Context, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
func (s *messagePool) SendResponsible(ctx context.Context, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
s.updateLastUsage()
|
s.updateLastUsage()
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
log.Warn("ctx.Done")
|
||||||
|
default:
|
||||||
|
}
|
||||||
return s.StreamManager.SendResponsible(ctx, msg)
|
return s.StreamManager.SendResponsible(ctx, msg)
|
||||||
}
|
}
|
||||||
func (s *messagePool) Broadcast(ctx context.Context, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
func (s *messagePool) Broadcast(ctx context.Context, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
s.updateLastUsage()
|
s.updateLastUsage()
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
log.Warn("ctx.Done")
|
||||||
|
default:
|
||||||
|
}
|
||||||
return s.StreamManager.Broadcast(ctx, msg)
|
return s.StreamManager.Broadcast(ctx, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -97,7 +97,7 @@ func (s *spaceService) DeriveSpace(ctx context.Context, payload SpaceDerivePaylo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
|
func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
|
||||||
st, err := s.storageProvider.SpaceStorage(id)
|
st, err := s.storageProvider.WaitSpaceStorage(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err != spacestorage.ErrSpaceStorageMissing {
|
if err != spacestorage.ErrSpaceStorageMissing {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
package spacestorage
|
package spacestorage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/anytypeio/any-sync/app"
|
"github.com/anytypeio/any-sync/app"
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto"
|
"github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto"
|
||||||
@ -51,7 +52,7 @@ type SpaceStorageCreatePayload struct {
|
|||||||
|
|
||||||
type SpaceStorageProvider interface {
|
type SpaceStorageProvider interface {
|
||||||
app.Component
|
app.Component
|
||||||
SpaceStorage(id string) (SpaceStorage, error)
|
WaitSpaceStorage(ctx context.Context, id string) (SpaceStorage, error)
|
||||||
SpaceExists(id string) bool
|
SpaceExists(id string) bool
|
||||||
CreateSpaceStorage(payload SpaceStorageCreatePayload) (SpaceStorage, error)
|
CreateSpaceStorage(payload SpaceStorageCreatePayload) (SpaceStorage, error)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,6 +65,7 @@ func (d *dialer) UpdateAddrs(addrs map[string][]string) {
|
|||||||
func (d *dialer) Dial(ctx context.Context, peerId string) (p peer.Peer, err error) {
|
func (d *dialer) Dial(ctx context.Context, peerId string) (p peer.Peer, err error) {
|
||||||
d.mu.RLock()
|
d.mu.RLock()
|
||||||
defer d.mu.RUnlock()
|
defer d.mu.RUnlock()
|
||||||
|
|
||||||
addrs, ok := d.peerAddrs[peerId]
|
addrs, ok := d.peerAddrs[peerId]
|
||||||
if !ok || len(addrs) == 0 {
|
if !ok || len(addrs) == 0 {
|
||||||
return nil, ErrArrdsNotFound
|
return nil, ErrArrdsNotFound
|
||||||
@ -73,6 +74,7 @@ func (d *dialer) Dial(ctx context.Context, peerId string) (p peer.Peer, err erro
|
|||||||
conn drpc.Conn
|
conn drpc.Conn
|
||||||
sc sec.SecureConn
|
sc sec.SecureConn
|
||||||
)
|
)
|
||||||
|
log.Warn("dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs))
|
||||||
for _, addr := range addrs {
|
for _, addr := range addrs {
|
||||||
conn, sc, err = d.handshake(ctx, addr)
|
conn, sc, err = d.handshake(ctx, addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -2,12 +2,16 @@ package peer
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/anytypeio/any-sync/app/logger"
|
||||||
"github.com/libp2p/go-libp2p/core/sec"
|
"github.com/libp2p/go-libp2p/core/sec"
|
||||||
|
"go.uber.org/zap"
|
||||||
"storj.io/drpc"
|
"storj.io/drpc"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var log = logger.NewNamed("peer")
|
||||||
|
|
||||||
func NewPeer(sc sec.SecureConn, conn drpc.Conn) Peer {
|
func NewPeer(sc sec.SecureConn, conn drpc.Conn) Peer {
|
||||||
return &peer{
|
return &peer{
|
||||||
id: sc.RemotePeer().String(),
|
id: sc.RemotePeer().String(),
|
||||||
@ -71,3 +75,8 @@ func (p *peer) Write(b []byte) (n int, err error) {
|
|||||||
func (p *peer) UpdateLastUsage() {
|
func (p *peer) UpdateLastUsage() {
|
||||||
atomic.StoreInt64(&p.lastUsage, time.Now().Unix())
|
atomic.StoreInt64(&p.lastUsage, time.Now().Unix())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *peer) Close() (err error) {
|
||||||
|
log.Warn("peer close", zap.String("peerId", p.id))
|
||||||
|
return p.Conn.Close()
|
||||||
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ type Service interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type poolService struct {
|
type poolService struct {
|
||||||
|
// default pool
|
||||||
*pool
|
*pool
|
||||||
dialer dialer.Dialer
|
dialer dialer.Dialer
|
||||||
metricReg *prometheus.Registry
|
metricReg *prometheus.Registry
|
||||||
|
|||||||
@ -27,6 +27,7 @@ func (sr *stream) readLoop() error {
|
|||||||
defer func() {
|
defer func() {
|
||||||
sr.streamClose()
|
sr.streamClose()
|
||||||
}()
|
}()
|
||||||
|
sr.l.Debug("stream read started")
|
||||||
for {
|
for {
|
||||||
msg := sr.pool.handler.NewReadMessage()
|
msg := sr.pool.handler.NewReadMessage()
|
||||||
if err := sr.stream.MsgRecv(msg, EncodingProto); err != nil {
|
if err := sr.stream.MsgRecv(msg, EncodingProto); err != nil {
|
||||||
|
|||||||
@ -142,7 +142,7 @@ func (s *streamPool) sendOne(ctx context.Context, p peer.Peer, msg drpc.Message)
|
|||||||
}
|
}
|
||||||
for _, st := range streams {
|
for _, st := range streams {
|
||||||
if err = st.write(msg); err != nil {
|
if err = st.write(msg); err != nil {
|
||||||
st.l.Info("sendOne write error", zap.Error(err))
|
st.l.Info("sendOne write error", zap.Error(err), zap.Int("streams", len(streams)))
|
||||||
// continue with next stream
|
// continue with next stream
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
@ -279,7 +279,7 @@ func (s *streamPool) handleMessageLoop() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = s.handler.HandleMessage(hm.ctx, hm.peerId, hm.msg); err != nil {
|
if err = s.handler.HandleMessage(context.Background(), hm.peerId, hm.msg); err != nil {
|
||||||
log.Warn("handle message error", zap.Error(err))
|
log.Warn("handle message error", zap.Error(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,11 +2,15 @@ package timeoutconn
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"github.com/anytypeio/any-sync/app/logger"
|
||||||
|
"go.uber.org/zap"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var log = logger.NewNamed("net.timeoutconn")
|
||||||
|
|
||||||
type Conn struct {
|
type Conn struct {
|
||||||
net.Conn
|
net.Conn
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
@ -17,22 +21,32 @@ func NewConn(conn net.Conn, timeout time.Duration) *Conn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Conn) Write(p []byte) (n int, err error) {
|
func (c *Conn) Write(p []byte) (n int, err error) {
|
||||||
|
return c.Conn.Write(p)
|
||||||
for {
|
for {
|
||||||
if c.timeout != 0 {
|
if c.timeout != 0 {
|
||||||
c.Conn.SetWriteDeadline(time.Now().Add(c.timeout))
|
if e := c.Conn.SetWriteDeadline(time.Now().Add(c.timeout)); e != nil {
|
||||||
|
log.Warn("can't set write deadline", zap.String("remoteAddr", c.RemoteAddr().String()))
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
nn, err := c.Conn.Write(p[n:])
|
nn, err := c.Conn.Write(p[n:])
|
||||||
n += nn
|
n += nn
|
||||||
if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) {
|
if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) {
|
||||||
// Keep extending the deadline so long as we're making progress.
|
// Keep extending the deadline so long as we're making progress.
|
||||||
|
log.Debug("keep extending the deadline so long as we're making progress", zap.String("remoteAddr", c.RemoteAddr().String()))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if c.timeout != 0 {
|
if c.timeout != 0 {
|
||||||
c.Conn.SetWriteDeadline(time.Time{})
|
if e := c.Conn.SetWriteDeadline(time.Time{}); e != nil {
|
||||||
|
log.Warn("can't set write deadline", zap.String("remoteAddr", c.RemoteAddr().String()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// if the connection is timed out and we should close it
|
// if the connection is timed out and we should close it
|
||||||
c.Conn.Close()
|
if e := c.Conn.Close(); e != nil {
|
||||||
|
log.Warn("connection close error", zap.String("remoteAddr", c.RemoteAddr().String()))
|
||||||
|
}
|
||||||
|
log.Debug("connection timed out", zap.String("remoteAddr", c.RemoteAddr().String()))
|
||||||
}
|
}
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user