@cryptotaxi247 / kubo / commits / 3b2bd9bf6

make the providers manager respect contexts

Jeromy committed Feb 26, 2015 at 16:44 UTC 3b2bd9bf6a6a01c3457462b91a0d658e4d9deb45
4 files changed +9 -5
routing/dht/handlers.go
+1 -1
@@ -223,7 +223,7 @@ func (dht *IpfsDHT) handleAddProvider(ctx context.Context, p peer.ID, pmes *pb.M
223 // add the received addresses to our peerstore.
224 dht.peerstore.AddAddrs(pi.ID, pi.Addrs, peer.ProviderAddrTTL)
225 }
226 - dht.providers.AddProvider(key, p)
226 + dht.providers.AddProvider(ctx, key, p)
227 }
228
229 return pmes, nil // send back same msg as confirmation.
routing/dht/providers.go
+6 -2
@@ -99,11 +99,15 @@ func (pm *ProviderManager) run() {
99 }
100 }
101
102 -func (pm *ProviderManager) AddProvider(k u.Key, val peer.ID) {
103 - pm.newprovs <- &addProv{
102 +func (pm *ProviderManager) AddProvider(ctx context.Context, k u.Key, val peer.ID) {
103 + prov := &addProv{
104 k: k,
105 val: val,
106 }
107 + select {
108 + case pm.newprovs <- prov:
109 + case <-ctx.Done():
110 + }
111 }
112
113 func (pm *ProviderManager) GetProviders(ctx context.Context, k u.Key) []peer.ID {
routing/dht/providers_test.go
+1 -1
@@ -14,7 +14,7 @@ func TestProviderManager(t *testing.T) {
14 mid := peer.ID("testing")
15 p := NewProviderManager(ctx, mid)
16 a := u.Key("test")
17 - p.AddProvider(a, peer.ID("testingprovider"))
17 + p.AddProvider(ctx, a, peer.ID("testingprovider"))
18 resp := p.GetProviders(ctx, a)
19 if len(resp) != 1 {
20 t.Fatal("Could not retrieve provider.")
routing/dht/routing.go
+1 -1
@@ -141,7 +141,7 @@ func (dht *IpfsDHT) Provide(ctx context.Context, key u.Key) error {
141 defer log.EventBegin(ctx, "provide", &key).Done()
142
143 // add self locally
144 - dht.providers.AddProvider(key, dht.self)
144 + dht.providers.AddProvider(ctx, key, dht.self)
145
146 peers, err := dht.GetClosestPeers(ctx, key)
147 if err != nil {