swarm: tracing improvements (#19249)

This commit is contained in:
Anton Evangelatov 2019-03-11 11:45:34 +01:00 committed by GitHub
parent 9a58a9b91a
commit 1a3e25e4c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 23 deletions

View File

@ -68,55 +68,45 @@ func uploadAndSyncCmd(ctx *cli.Context, tuid string) error {
} }
func trackChunks(testData []byte) error { func trackChunks(testData []byte) error {
log.Warn("Test timed out; running chunk debug sequence") log.Warn("Test timed out, running chunk debug sequence")
addrs, err := getAllRefs(testData) addrs, err := getAllRefs(testData)
if err != nil { if err != nil {
return err return err
} }
log.Trace("All references retrieved")
for i, ref := range addrs { for i, ref := range addrs {
log.Trace(fmt.Sprintf("ref %d", i), "ref", ref) log.Trace(fmt.Sprintf("ref %d", i), "ref", ref)
} }
// has-chunks
for _, host := range hosts { for _, host := range hosts {
httpHost := fmt.Sprintf("ws://%s:%d", host, 8546) httpHost := fmt.Sprintf("ws://%s:%d", host, 8546)
log.Trace("Calling `Has` on host", "httpHost", httpHost)
hostChunks := []string{} hostChunks := []string{}
rpcClient, err := rpc.Dial(httpHost) rpcClient, err := rpc.Dial(httpHost)
if err != nil { if err != nil {
log.Trace("Error dialing host", "err", err) log.Error("Error dialing host", "err", err)
return err return err
} }
log.Trace("rpc dial ok")
var hasInfo []api.HasInfo var hasInfo []api.HasInfo
err = rpcClient.Call(&hasInfo, "bzz_has", addrs) err = rpcClient.Call(&hasInfo, "bzz_has", addrs)
if err != nil { if err != nil {
log.Trace("Error calling host", "err", err) log.Error("Error calling host", "err", err)
return err return err
} }
log.Trace("rpc call ok")
count := 0
for i, info := range hasInfo {
if i == 0 {
log.Trace("first hasInfo", "addr", info.Addr, "host", host, "i", i)
}
if i == len(hasInfo)-1 {
log.Trace("last hasInfo", "addr", info.Addr, "host", host, "i", i)
}
count := 0
for _, info := range hasInfo {
if info.Has { if info.Has {
hostChunks = append(hostChunks, "1") hostChunks = append(hostChunks, "1")
} else { } else {
hostChunks = append(hostChunks, "0") hostChunks = append(hostChunks, "0")
count++ count++
} }
} }
if count == 0 { if count == 0 {
log.Info("host reported to have all chunks", "host", host) log.Info("host reported to have all chunks", "host", host)
} }

View File

@ -26,7 +26,7 @@ import (
"github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage"
"github.com/ethereum/go-ethereum/swarm/tracing" "github.com/ethereum/go-ethereum/swarm/tracing"
"github.com/opentracing/opentracing-go" olog "github.com/opentracing/opentracing-go/log"
) )
const ( const (
@ -327,7 +327,8 @@ func (f *Fetcher) doRequest(gone chan *enode.ID, peersToSkip *sync.Map, sources
span := tracing.ShiftSpanByKey(spanId) span := tracing.ShiftSpanByKey(spanId)
if span != nil { if span != nil {
defer span.(opentracing.Span).Finish() span.LogFields(olog.String("finish", "from doRequest"))
span.Finish()
} }
}() }()
return sources, nil return sources, nil

View File

@ -29,6 +29,7 @@ import (
"github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage"
"github.com/ethereum/go-ethereum/swarm/tracing" "github.com/ethereum/go-ethereum/swarm/tracing"
opentracing "github.com/opentracing/opentracing-go" opentracing "github.com/opentracing/opentracing-go"
olog "github.com/opentracing/opentracing-go/log"
) )
const ( const (
@ -146,6 +147,8 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *
ctx, ctx,
"stream.handle.retrieve") "stream.handle.retrieve")
osp.LogFields(olog.String("ref", req.Addr.String()))
s, err := sp.getServer(NewStream(swarmChunkServerStreamName, "", true)) s, err := sp.getServer(NewStream(swarmChunkServerStreamName, "", true))
if err != nil { if err != nil {
return err return err
@ -176,12 +179,15 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *
} }
if req.SkipCheck { if req.SkipCheck {
syncing := false syncing := false
osp.LogFields(olog.Bool("skipCheck", true))
err = sp.Deliver(ctx, chunk, s.priority, syncing) err = sp.Deliver(ctx, chunk, s.priority, syncing)
if err != nil { if err != nil {
log.Warn("ERROR in handleRetrieveRequestMsg", "err", err) log.Warn("ERROR in handleRetrieveRequestMsg", "err", err)
} }
return return
} }
osp.LogFields(olog.Bool("skipCheck", false))
select { select {
case streamer.deliveryC <- chunk.Address()[:]: case streamer.deliveryC <- chunk.Address()[:]:
case <-streamer.quit: case <-streamer.quit:
@ -219,7 +225,8 @@ func (d *Delivery) handleChunkDeliveryMsg(ctx context.Context, sp *Peer, req *Ch
go func() { go func() {
if span != nil { if span != nil {
defer span.(opentracing.Span).Finish() span.LogFields(olog.String("finish", "from handleChunkDeliveryMsg"))
defer span.Finish()
} }
req.peer = sp req.peer = sp

View File

@ -167,9 +167,8 @@ func (p *Peer) SendPriority(ctx context.Context, msg interface{}, priority uint8
Msg: msg, Msg: msg,
} }
err := p.pq.Push(wmsg, int(priority)) err := p.pq.Push(wmsg, int(priority))
if err == pq.ErrContention { if err != nil {
log.Warn("dropping peer on priority queue contention", "peer", p.ID()) log.Error("err on p.pq.Push", "err", err, "peer", p.ID())
p.Drop(err)
} }
return err return err
} }
@ -183,6 +182,8 @@ func (p *Peer) SendOfferedHashes(s *server, f, t uint64) error {
) )
defer sp.Finish() defer sp.Finish()
defer metrics.GetOrRegisterResettingTimer("send.offered.hashes", nil).UpdateSince(time.Now())
hashes, from, to, proof, err := s.setNextBatch(f, t) hashes, from, to, proof, err := s.setNextBatch(f, t)
if err != nil { if err != nil {
return err return err

View File

@ -103,6 +103,14 @@ func (n *NetStore) Get(rctx context.Context, ref Address) (Chunk, error) {
return nil, err return nil, err
} }
if chunk != nil { if chunk != nil {
// this is not measuring how long it takes to get the chunk for the localstore, but
// rather just adding a span for clarity when inspecting traces in Jaeger, in order
// to make it easier to reason which is the node that actually delivered a chunk.
_, sp := spancontext.StartSpan(
rctx,
"localstore.get")
defer sp.Finish()
return chunk, nil return chunk, nil
} }
return fetch(rctx) return fetch(rctx)