mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-10 14:34:24 +08:00
dht: some provider debug logging
This commit is contained in:
@ -167,25 +167,31 @@ func (dht *IpfsDHT) handleFindPeer(ctx context.Context, p peer.ID, pmes *pb.Mess
|
|||||||
|
|
||||||
func (dht *IpfsDHT) handleGetProviders(ctx context.Context, p peer.ID, pmes *pb.Message) (*pb.Message, error) {
|
func (dht *IpfsDHT) handleGetProviders(ctx context.Context, p peer.ID, pmes *pb.Message) (*pb.Message, error) {
|
||||||
resp := pb.NewMessage(pmes.GetType(), pmes.GetKey(), pmes.GetClusterLevel())
|
resp := pb.NewMessage(pmes.GetType(), pmes.GetKey(), pmes.GetClusterLevel())
|
||||||
|
key := u.Key(pmes.GetKey())
|
||||||
|
|
||||||
|
// debug logging niceness.
|
||||||
|
reqDesc := fmt.Sprintf("%s handleGetProviders(%s, %s): ", dht.self, p, key)
|
||||||
|
log.Debugf("%s begin", reqDesc)
|
||||||
|
defer log.Debugf("%s end", reqDesc)
|
||||||
|
|
||||||
// check if we have this value, to add ourselves as provider.
|
// check if we have this value, to add ourselves as provider.
|
||||||
log.Debugf("handling GetProviders: '%s'", u.Key(pmes.GetKey()))
|
has, err := dht.datastore.Has(key.DsKey())
|
||||||
dsk := u.Key(pmes.GetKey()).DsKey()
|
|
||||||
has, err := dht.datastore.Has(dsk)
|
|
||||||
if err != nil && err != ds.ErrNotFound {
|
if err != nil && err != ds.ErrNotFound {
|
||||||
log.Errorf("unexpected datastore error: %v\n", err)
|
log.Errorf("unexpected datastore error: %v\n", err)
|
||||||
has = false
|
has = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup providers
|
// setup providers
|
||||||
providers := dht.providers.GetProviders(ctx, u.Key(pmes.GetKey()))
|
providers := dht.providers.GetProviders(ctx, key)
|
||||||
if has {
|
if has {
|
||||||
providers = append(providers, dht.self)
|
providers = append(providers, dht.self)
|
||||||
|
log.Debugf("%s have the value. added self as provider", reqDesc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if providers != nil && len(providers) > 0 {
|
if providers != nil && len(providers) > 0 {
|
||||||
infos := peer.PeerInfos(dht.peerstore, providers)
|
infos := peer.PeerInfos(dht.peerstore, providers)
|
||||||
resp.ProviderPeers = pb.PeerInfosToPBPeers(dht.host.Network(), infos)
|
resp.ProviderPeers = pb.PeerInfosToPBPeers(dht.host.Network(), infos)
|
||||||
|
log.Debugf("%s have %d providers: %s", reqDesc, len(providers), infos)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also send closer peers.
|
// Also send closer peers.
|
||||||
@ -193,6 +199,7 @@ func (dht *IpfsDHT) handleGetProviders(ctx context.Context, p peer.ID, pmes *pb.
|
|||||||
if closer != nil {
|
if closer != nil {
|
||||||
infos := peer.PeerInfos(dht.peerstore, providers)
|
infos := peer.PeerInfos(dht.peerstore, providers)
|
||||||
resp.CloserPeers = pb.PeerInfosToPBPeers(dht.host.Network(), infos)
|
resp.CloserPeers = pb.PeerInfosToPBPeers(dht.host.Network(), infos)
|
||||||
|
log.Debugf("%s have %d closer peers: %s", reqDesc, len(closer), infos)
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package dht
|
package dht
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -255,16 +256,24 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
|
|||||||
// setup the Query
|
// setup the Query
|
||||||
query := dht.newQuery(key, func(ctx context.Context, p peer.ID) (*dhtQueryResult, error) {
|
query := dht.newQuery(key, func(ctx context.Context, p peer.ID) (*dhtQueryResult, error) {
|
||||||
|
|
||||||
|
reqDesc := fmt.Sprintf("%s findProviders(%s).Query(%s): ", dht.self, key, p)
|
||||||
|
log.Debugf("%s begin", reqDesc)
|
||||||
|
defer log.Debugf("%s end", reqDesc)
|
||||||
|
|
||||||
pmes, err := dht.findProvidersSingle(ctx, p, key)
|
pmes, err := dht.findProvidersSingle(ctx, p, key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debugf("%s got %d provider entries", reqDesc, len(pmes.GetProviderPeers()))
|
||||||
provs := pb.PBPeersToPeerInfos(pmes.GetProviderPeers())
|
provs := pb.PBPeersToPeerInfos(pmes.GetProviderPeers())
|
||||||
|
log.Debugf("%s got %d provider entries decoded", reqDesc, len(provs))
|
||||||
|
|
||||||
// Add unique providers from request, up to 'count'
|
// Add unique providers from request, up to 'count'
|
||||||
for _, prov := range provs {
|
for _, prov := range provs {
|
||||||
|
log.Debugf("%s got provider: %s", reqDesc, prov)
|
||||||
if ps.TryAdd(prov.ID) {
|
if ps.TryAdd(prov.ID) {
|
||||||
|
log.Debugf("%s using provider: %s", reqDesc, prov)
|
||||||
select {
|
select {
|
||||||
case peerOut <- prov:
|
case peerOut <- prov:
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
@ -273,6 +282,7 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ps.Size() >= count {
|
if ps.Size() >= count {
|
||||||
|
log.Debugf("%s got enough providers (%d/%d)", reqDesc, ps.Size(), count)
|
||||||
return &dhtQueryResult{success: true}, nil
|
return &dhtQueryResult{success: true}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -280,6 +290,7 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
|
|||||||
// Give closer peers back to the query to be queried
|
// Give closer peers back to the query to be queried
|
||||||
closer := pmes.GetCloserPeers()
|
closer := pmes.GetCloserPeers()
|
||||||
clpeers := pb.PBPeersToPeerInfos(closer)
|
clpeers := pb.PBPeersToPeerInfos(closer)
|
||||||
|
log.Debugf("%s got closer peers: %s", reqDesc, clpeers)
|
||||||
return &dhtQueryResult{closerPeers: clpeers}, nil
|
return &dhtQueryResult{closerPeers: clpeers}, nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user