dht: some provider debug logging
Juan Batiz-Benet committed
Jan 3, 2015 at 00:56 UTC
17ce192af532ccdd1e9be9c6b74159d957a1795c
2 files changed
+22
-4
routing/dht/handlers.go
+11
-4
@@ -167,25 +167,31 @@ func (dht *IpfsDHT) handleFindPeer(ctx context.Context, p peer.ID, pmes *pb.Mess
167
168
func (dht *IpfsDHT) handleGetProviders(ctx context.Context, p peer.ID, pmes *pb.Message) (*pb.Message, error) {
169
resp := pb.NewMessage(pmes.GetType(), pmes.GetKey(), pmes.GetClusterLevel())
170
+ key := u.Key(pmes.GetKey())
171
+
172
+ // debug logging niceness.
173
+ reqDesc := fmt.Sprintf("%s handleGetProviders(%s, %s): ", dht.self, p, key)
174
+ log.Debugf("%s begin", reqDesc)
175
+ defer log.Debugf("%s end", reqDesc)
176
177
// check if we have this value, to add ourselves as provider.
172
- log.Debugf("handling GetProviders: '%s'", u.Key(pmes.GetKey()))
173
- dsk := u.Key(pmes.GetKey()).DsKey()
174
- has, err := dht.datastore.Has(dsk)
178
+ has, err := dht.datastore.Has(key.DsKey())
179
if err != nil && err != ds.ErrNotFound {
180
log.Errorf("unexpected datastore error: %v\n", err)
181
has = false
182
}
183
184
// setup providers
181
- providers := dht.providers.GetProviders(ctx, u.Key(pmes.GetKey()))
185
+ providers := dht.providers.GetProviders(ctx, key)
186
if has {
187
providers = append(providers, dht.self)
188
+ log.Debugf("%s have the value. added self as provider", reqDesc)
189
}
190
191
if providers != nil && len(providers) > 0 {
192
infos := peer.PeerInfos(dht.peerstore, providers)
193
resp.ProviderPeers = pb.PeerInfosToPBPeers(dht.host.Network(), infos)
194
+ log.Debugf("%s have %d providers: %s", reqDesc, len(providers), infos)
195
}
196
197
// Also send closer peers.
@@ -193,6 +199,7 @@ func (dht *IpfsDHT) handleGetProviders(ctx context.Context, p peer.ID, pmes *pb.
199
if closer != nil {
200
infos := peer.PeerInfos(dht.peerstore, providers)
201
resp.CloserPeers = pb.PeerInfosToPBPeers(dht.host.Network(), infos)
202
+ log.Debugf("%s have %d closer peers: %s", reqDesc, len(closer), infos)
203
}
204
205
return resp, nil
routing/dht/routing.go
+11
@@ -1,6 +1,7 @@
1
package dht
2
3
import (
4
+ "fmt"
5
"math"
6
"sync"
7
@@ -255,16 +256,24 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
256
// setup the Query
257
query := dht.newQuery(key, func(ctx context.Context, p peer.ID) (*dhtQueryResult, error) {
258
259
+ reqDesc := fmt.Sprintf("%s findProviders(%s).Query(%s): ", dht.self, key, p)
260
+ log.Debugf("%s begin", reqDesc)
261
+ defer log.Debugf("%s end", reqDesc)
262
+
263
pmes, err := dht.findProvidersSingle(ctx, p, key)
264
if err != nil {
265
return nil, err
266
}
267
268
+ log.Debugf("%s got %d provider entries", reqDesc, len(pmes.GetProviderPeers()))
269
provs := pb.PBPeersToPeerInfos(pmes.GetProviderPeers())
270
+ log.Debugf("%s got %d provider entries decoded", reqDesc, len(provs))
271
272
// Add unique providers from request, up to 'count'
273
for _, prov := range provs {
274
+ log.Debugf("%s got provider: %s", reqDesc, prov)
275
if ps.TryAdd(prov.ID) {
276
+ log.Debugf("%s using provider: %s", reqDesc, prov)
277
select {
278
case peerOut <- prov:
279
case <-ctx.Done():
@@ -273,6 +282,7 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
282
}
283
}
284
if ps.Size() >= count {
285
+ log.Debugf("%s got enough providers (%d/%d)", reqDesc, ps.Size(), count)
286
return &dhtQueryResult{success: true}, nil
287
}
288
}
@@ -280,6 +290,7 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
290
// Give closer peers back to the query to be queried
291
closer := pmes.GetCloserPeers()
292
clpeers := pb.PBPeersToPeerInfos(closer)
293
+ log.Debugf("%s got closer peers: %s", reqDesc, clpeers)
294
return &dhtQueryResult{closerPeers: clpeers}, nil
295
})
296