Peerstore -- threadsafe collection
this will later have persistent storage, but no need yet
Juan Batiz-Benet committed
Sep 16, 2014 at 05:05 UTC
4cc1f60d91532697c536c7db4954989866a354c0
1 file changed
+20
-13
routing/dht/dht.go
+20
-13
@@ -194,25 +194,27 @@ func (dht *IpfsDHT) getValueOrPeers(ctx context.Context, p *peer.Peer,
194
return nil, nil, err
195
}
196
197
- if pmes.GetSuccess() {
198
- if pmes.Value == nil { // We were given provider[s]
199
- val, err := dht.getFromPeerList(key, timeout, pmes.GetPeers(), level)
200
- if err != nil {
201
- return nil, nil, err
202
- }
203
- return val, nil, nil
204
- }
205
-
197
+ if value := pmes.GetValue(); value != nil {
198
// Success! We were given the value
207
- return pmes.GetValue(), nil, nil
199
+ return value, nil, nil
200
}
201
210
- // We were given a closer node
202
+ // TODO decide on providers. This probably shouldn't be happening.
203
+ // if prv := pmes.GetProviderPeers(); prv != nil && len(prv) > 0 {
204
+ // val, err := dht.getFromPeerList(key, timeout,, level)
205
+ // if err != nil {
206
+ // return nil, nil, err
207
+ // }
208
+ // return val, nil, nil
209
+ // }
210
+
211
+ // Perhaps we were given closer peers
212
var peers []*peer.Peer
212
- for _, pb := range pmes.GetPeers() {
213
+ for _, pb := range pmes.GetCloserPeers() {
214
if peer.ID(pb.GetId()).Equal(dht.self.ID) {
215
continue
216
}
217
+
218
addr, err := ma.NewMultiaddr(pb.GetAddr())
219
if err != nil {
220
u.PErr("%v\n", err.Error())
@@ -227,7 +229,12 @@ func (dht *IpfsDHT) getValueOrPeers(ctx context.Context, p *peer.Peer,
229
230
peers = append(peers, np)
231
}
230
- return nil, peers, nil
232
+
233
+ if len(peers) > 0 {
234
+ return nil, peers, nil
235
+ }
236
+
237
+ return nil, nil, errors.New("NotFound. did not get value or closer peers.")
238
}
239
240
// getValueSingle simply performs the get value RPC with the given parameters