Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6c42ba3

Browse files
committedNov 27, 2015
make the rest of the code work with provideMany
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
1 parent 71ab52e commit 6c42ba3

File tree

6 files changed

+55
-35
lines changed

6 files changed

+55
-35
lines changed
 

‎routing/dht/dht.go

-28
Original file line numberDiff line numberDiff line change
@@ -160,34 +160,6 @@ func (dht *IpfsDHT) putProviders(ctx context.Context, p peer.ID, keys []key.Key)
160160
return nil
161161
}
162162

163-
// putProvider sends a message to peer 'p' saying that the local node
164-
// can provide the value of 'key'
165-
func (dht *IpfsDHT) putProvider(ctx context.Context, p peer.ID, skey string) error {
166-
167-
// add self as the provider
168-
pi := peer.PeerInfo{
169-
ID: dht.self,
170-
Addrs: dht.host.Addrs(),
171-
}
172-
173-
// // only share WAN-friendly addresses ??
174-
// pi.Addrs = addrutil.WANShareableAddrs(pi.Addrs)
175-
if len(pi.Addrs) < 1 {
176-
// log.Infof("%s putProvider: %s for %s error: no wan-friendly addresses", dht.self, p, key.Key(key), pi.Addrs)
177-
return fmt.Errorf("no known addresses for self. cannot put provider.")
178-
}
179-
180-
pmes := pb.NewMessage(pb.Message_ADD_PROVIDER, skey, 0)
181-
pmes.ProviderPeers = pb.RawPeerInfosToPBPeers([]peer.PeerInfo{pi})
182-
err := dht.sendMessage(ctx, p, pmes)
183-
if err != nil {
184-
return err
185-
}
186-
187-
log.Debugf("%s putProvider: %s for %s (%s)", dht.self, p, key.Key(skey), pi.Addrs)
188-
return nil
189-
}
190-
191163
// getValueOrPeers queries a particular peer p for the value for
192164
// key. It returns either the value or a list of closer peers.
193165
// NOTE: it will update the dht's peerstore with any new addresses

‎routing/dht/routing.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,13 @@ func (dht *IpfsDHT) GetValues(ctx context.Context, key key.Key, nvals int) ([]ro
215215
// This is what DSHTs (Coral and MainlineDHT) do to store large values in a DHT.
216216

217217
// Provide makes this node announce that it can provide a value for the given key
218-
func (dht *IpfsDHT) Provide(ctx context.Context, key key.Key) error {
219-
defer log.EventBegin(ctx, "provide", &key).Done()
218+
func (dht *IpfsDHT) Provide(ctx context.Context, k key.Key) error {
219+
defer log.EventBegin(ctx, "provide", &k).Done()
220220

221221
// add self locally
222-
dht.providers.AddProvider(ctx, key, dht.self)
222+
dht.providers.AddProvider(ctx, k, dht.self)
223223

224-
peers, err := dht.GetClosestPeers(ctx, key)
224+
peers, err := dht.GetClosestPeers(ctx, k)
225225
if err != nil {
226226
return err
227227
}
@@ -231,8 +231,8 @@ func (dht *IpfsDHT) Provide(ctx context.Context, key key.Key) error {
231231
wg.Add(1)
232232
go func(p peer.ID) {
233233
defer wg.Done()
234-
log.Debugf("putProvider(%s, %s)", key, p)
235-
err := dht.putProvider(ctx, p, string(key))
234+
log.Debugf("putProvider(%s, %s)", k, p)
235+
err := dht.putProviders(ctx, p, []key.Key{k})
236236
if err != nil {
237237
log.Debug(err)
238238
}

‎routing/mock/centralized_client.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func (c *client) FindProvidersAsync(ctx context.Context, k key.Key, max int) <-c
9999
return out
100100
}
101101

102-
// Provide returns once the message is on the network. Value is not necessarily
102+
// provide returns once the message is on the network. value is not necessarily
103103
// visible yet.
104104
func (c *client) Provide(_ context.Context, key key.Key) error {
105105
info := peer.PeerInfo{
@@ -109,6 +109,20 @@ func (c *client) Provide(_ context.Context, key key.Key) error {
109109
return c.server.Announce(info, key)
110110
}
111111

112+
func (c *client) ProvideMany(_ context.Context, keys []key.Key) error {
113+
info := peer.PeerInfo{
114+
ID: c.peer.ID(),
115+
Addrs: []ma.Multiaddr{c.peer.Address()},
116+
}
117+
for _, k := range keys {
118+
err := c.server.Announce(info, k)
119+
if err != nil {
120+
return err
121+
}
122+
}
123+
return nil
124+
}
125+
112126
func (c *client) Ping(ctx context.Context, p peer.ID) (time.Duration, error) {
113127
return 0, nil
114128
}

‎routing/none/none_client.go

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ func (c *nilclient) Provide(_ context.Context, _ key.Key) error {
4343
return nil
4444
}
4545

46+
func (c *nilclient) ProvideMany(_ context.Context, _ []key.Key) error {
47+
return nil
48+
}
49+
4650
func (c *nilclient) Bootstrap(_ context.Context) error {
4751
return nil
4852
}

‎routing/offline/offline.go

+4
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ func (c *offlineRouting) Provide(_ context.Context, key key.Key) error {
106106
return ErrOffline
107107
}
108108

109+
func (c *offlineRouting) ProvideMany(_ context.Context, keys []key.Key) error {
110+
return ErrOffline
111+
}
112+
109113
func (c *offlineRouting) Ping(ctx context.Context, p peer.ID) (time.Duration, error) {
110114
return 0, ErrOffline
111115
}

‎routing/supernode/client.go

+26
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,32 @@ func (c *Client) Provide(ctx context.Context, k key.Key) error {
113113
return c.proxy.SendMessage(ctx, msg) // TODO wrap to hide remote
114114
}
115115

116+
func (c *Client) ProvideMany(ctx context.Context, ks []key.Key) error {
117+
defer log.EventBegin(ctx, "provideMany").Done()
118+
var strkeys []string
119+
for _, k := range ks {
120+
strkeys = append(strkeys, string(k))
121+
}
122+
123+
t := pb.Message_ADD_PROVIDER
124+
msg := &pb.Message{
125+
Type: &t,
126+
Keys: strkeys,
127+
}
128+
// FIXME how is connectedness defined for the local node
129+
pri := []pb.PeerRoutingInfo{
130+
{
131+
PeerInfo: peer.PeerInfo{
132+
ID: c.local,
133+
Addrs: c.peerhost.Addrs(),
134+
},
135+
},
136+
}
137+
msg.ProviderPeers = pb.PeerRoutingInfosToPBPeers(pri)
138+
139+
return c.proxy.SendMessage(ctx, msg) // TODO wrap to hide remote
140+
}
141+
116142
func (c *Client) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, error) {
117143
defer log.EventBegin(ctx, "findPeer", id).Done()
118144
request := pb.NewMessage(pb.Message_FIND_NODE, string(id), 0)

0 commit comments

Comments
 (0)
Please sign in to comment.