mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 18:32:23 +00:00
RequestFromPeers does not use peers marked as lightnode
This commit is contained in:
parent
cdf5982cfc
commit
305c39e2e9
2 changed files with 68 additions and 1 deletions
|
|
@ -234,7 +234,10 @@ func (d *Delivery) RequestFromPeers(ctx context.Context, req *network.Request) (
|
||||||
} else {
|
} else {
|
||||||
d.kad.EachConn(req.Addr[:], 255, func(p *network.Peer, po int, nn bool) bool {
|
d.kad.EachConn(req.Addr[:], 255, func(p *network.Peer, po int, nn bool) bool {
|
||||||
id := p.ID()
|
id := p.ID()
|
||||||
// TODO: skip light nodes that do not accept retrieve requests
|
if p.LightNode {
|
||||||
|
log.Trace("Delivery.RequestFromPeers: skip lightnode peer", "peer id", id)
|
||||||
|
return true
|
||||||
|
}
|
||||||
if req.SkipPeer(id.String()) {
|
if req.SkipPeer(id.String()) {
|
||||||
log.Trace("Delivery.RequestFromPeers: skip peer", "peer id", id)
|
log.Trace("Delivery.RequestFromPeers: skip peer", "peer id", id)
|
||||||
return true
|
return true
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,9 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
|
"github.com/ethereum/go-ethereum/p2p/protocols"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
"github.com/ethereum/go-ethereum/p2p"
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
|
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
|
||||||
|
|
@ -224,6 +227,67 @@ func TestStreamerUpstreamRetrieveRequestMsgExchange(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRequestFromPeers(t *testing.T) {
|
||||||
|
dummyPeerId := enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8")
|
||||||
|
|
||||||
|
addr := network.RandomAddr()
|
||||||
|
to := network.NewKademlia(addr.OAddr, network.NewKadParams())
|
||||||
|
delivery := NewDelivery(to, nil)
|
||||||
|
protocolsPeer := protocols.NewPeer(p2p.NewPeer(dummyPeerId, "dummy", nil), nil, nil)
|
||||||
|
peer := network.NewPeer(&network.BzzPeer{
|
||||||
|
BzzAddr: network.RandomAddr(),
|
||||||
|
LightNode: false,
|
||||||
|
Peer: protocolsPeer,
|
||||||
|
}, to)
|
||||||
|
to.On(peer)
|
||||||
|
r := NewRegistry(addr.ID(), delivery, nil, nil, nil)
|
||||||
|
r.setPeer(NewPeer(protocolsPeer, r))
|
||||||
|
ctx := context.Background()
|
||||||
|
req := network.NewRequest(
|
||||||
|
storage.Address(hash0[:]),
|
||||||
|
true,
|
||||||
|
&sync.Map{},
|
||||||
|
)
|
||||||
|
|
||||||
|
id, _, err := delivery.RequestFromPeers(ctx, req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if *id != dummyPeerId {
|
||||||
|
t.Fatalf("Expected an id, got %v", id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRequestFromPeersWithLightNode(t *testing.T) {
|
||||||
|
dummyPeerId := enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8")
|
||||||
|
|
||||||
|
addr := network.RandomAddr()
|
||||||
|
to := network.NewKademlia(addr.OAddr, network.NewKadParams())
|
||||||
|
delivery := NewDelivery(to, nil)
|
||||||
|
protocolsPeer := protocols.NewPeer(p2p.NewPeer(dummyPeerId, "dummy", nil), nil, nil)
|
||||||
|
peer := network.NewPeer(&network.BzzPeer{
|
||||||
|
BzzAddr: network.RandomAddr(),
|
||||||
|
LightNode: true,
|
||||||
|
Peer: protocolsPeer,
|
||||||
|
}, to)
|
||||||
|
to.On(peer)
|
||||||
|
r := NewRegistry(addr.ID(), delivery, nil, nil, nil)
|
||||||
|
r.setPeer(NewPeer(protocolsPeer, r))
|
||||||
|
ctx := context.Background()
|
||||||
|
req := network.NewRequest(
|
||||||
|
storage.Address(hash0[:]),
|
||||||
|
true,
|
||||||
|
&sync.Map{},
|
||||||
|
)
|
||||||
|
|
||||||
|
_, _, err := delivery.RequestFromPeers(ctx, req)
|
||||||
|
|
||||||
|
expectedError := "no peer found"
|
||||||
|
if err.Error() != expectedError {
|
||||||
|
t.Fatalf("expected '%v', got %v", expectedError, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
func TestStreamerDownstreamChunkDeliveryMsgExchange(t *testing.T) {
|
func TestStreamerDownstreamChunkDeliveryMsgExchange(t *testing.T) {
|
||||||
tester, streamer, localStore, teardown, err := newStreamerTester(t, &RegistryOptions{
|
tester, streamer, localStore, teardown, err := newStreamerTester(t, &RegistryOptions{
|
||||||
DoServeRetrieve: true,
|
DoServeRetrieve: true,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue