mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 01:43:47 +00:00
swarm/network/stream: fix sync tests (#297)
This commit is contained in:
parent
a3c93ca4c4
commit
ad1ff36aaf
5 changed files with 79 additions and 69 deletions
|
|
@ -32,6 +32,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
|
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
|
||||||
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
|
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
|
||||||
|
|
@ -78,13 +79,14 @@ func NewStreamerService(ctx *adapters.ServiceContext) (node.Service, error) {
|
||||||
db := storage.NewDBAPI(netStore)
|
db := storage.NewDBAPI(netStore)
|
||||||
delivery := NewDelivery(kad, db)
|
delivery := NewDelivery(kad, db)
|
||||||
deliveries[id] = delivery
|
deliveries[id] = delivery
|
||||||
r := NewRegistry(addr, delivery, netStore, state.NewMemStore(), defaultSkipCheck)
|
r := NewRegistry(addr, delivery, db, state.NewMemStore(), defaultSkipCheck, false)
|
||||||
RegisterSwarmSyncerServer(r, db)
|
RegisterSwarmSyncerServer(r, db)
|
||||||
RegisterSwarmSyncerClient(r, db)
|
RegisterSwarmSyncerClient(r, db)
|
||||||
go func() {
|
go func() {
|
||||||
waitPeerErrC <- waitForPeers(r, 1*time.Second, peerCount(id))
|
waitPeerErrC <- waitForPeers(r, 1*time.Second, peerCount(id))
|
||||||
}()
|
}()
|
||||||
return &TestRegistry{Registry: r}, nil
|
dpa := storage.NewDPA(storage.NewNetStore(store, nil), storage.NewChunkerParams())
|
||||||
|
return &TestRegistry{Registry: r, dpa: dpa}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newStreamerTester(t *testing.T) (*p2ptest.ProtocolTester, *Registry, *storage.LocalStore, func(), error) {
|
func newStreamerTester(t *testing.T) (*p2ptest.ProtocolTester, *Registry, *storage.LocalStore, func(), error) {
|
||||||
|
|
@ -110,7 +112,7 @@ func newStreamerTester(t *testing.T) (*p2ptest.ProtocolTester, *Registry, *stora
|
||||||
db := storage.NewDBAPI(netStore)
|
db := storage.NewDBAPI(netStore)
|
||||||
|
|
||||||
delivery := NewDelivery(to, db)
|
delivery := NewDelivery(to, db)
|
||||||
streamer := NewRegistry(addr, delivery, localStore, state.NewMemStore(), defaultSkipCheck)
|
streamer := NewRegistry(addr, delivery, db, state.NewMemStore(), defaultSkipCheck, false)
|
||||||
teardown := func() {
|
teardown := func() {
|
||||||
streamer.Close()
|
streamer.Close()
|
||||||
removeDataDir()
|
removeDataDir()
|
||||||
|
|
@ -169,6 +171,7 @@ func (rrs *roundRobinStore) Close() {
|
||||||
|
|
||||||
type TestRegistry struct {
|
type TestRegistry struct {
|
||||||
*Registry
|
*Registry
|
||||||
|
dpa *storage.DPA
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *TestRegistry) APIs() []rpc.API {
|
func (r *TestRegistry) APIs() []rpc.API {
|
||||||
|
|
@ -199,7 +202,17 @@ func readAll(dpa *storage.DPA, hash []byte) (int64, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *TestRegistry) ReadAll(hash common.Hash) (int64, error) {
|
func (r *TestRegistry) ReadAll(hash common.Hash) (int64, error) {
|
||||||
return readAll(r.api.dpa, hash[:])
|
return readAll(r.dpa, hash[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *TestRegistry) Start(server *p2p.Server) error {
|
||||||
|
r.dpa.Start()
|
||||||
|
return r.Registry.Start(server)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *TestRegistry) Stop() error {
|
||||||
|
r.dpa.Stop()
|
||||||
|
return r.Registry.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
type TestExternalRegistry struct {
|
type TestExternalRegistry struct {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ func newIntervalsStreamerService(ctx *adapters.ServiceContext) (node.Service, er
|
||||||
db := storage.NewDBAPI(netStore)
|
db := storage.NewDBAPI(netStore)
|
||||||
delivery := NewDelivery(kad, db)
|
delivery := NewDelivery(kad, db)
|
||||||
deliveries[id] = delivery
|
deliveries[id] = delivery
|
||||||
r := NewRegistry(addr, delivery, netStore, state.NewMemStore(), defaultSkipCheck)
|
r := NewRegistry(addr, delivery, db, state.NewMemStore(), defaultSkipCheck, false)
|
||||||
|
|
||||||
r.RegisterClientFunc(externalStreamName, func(p *Peer, t []byte, live bool) (Client, error) {
|
r.RegisterClientFunc(externalStreamName, func(p *Peer, t []byte, live bool) (Client, error) {
|
||||||
return newTestExternalClient(t, db), nil
|
return newTestExternalClient(t, db), nil
|
||||||
|
|
|
||||||
|
|
@ -56,23 +56,23 @@ type Registry struct {
|
||||||
clientFuncs map[string]func(*Peer, []byte, bool) (Client, error)
|
clientFuncs map[string]func(*Peer, []byte, bool) (Client, error)
|
||||||
peers map[discover.NodeID]*Peer
|
peers map[discover.NodeID]*Peer
|
||||||
delivery *Delivery
|
delivery *Delivery
|
||||||
store storage.ChunkStore
|
|
||||||
intervalsStore state.Store
|
intervalsStore state.Store
|
||||||
|
doSync bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRegistry is Streamer constructor
|
// NewRegistry is Streamer constructor
|
||||||
func NewRegistry(addr *network.BzzAddr, delivery *Delivery, store storage.ChunkStore, intervalsStore state.Store, skipCheck bool) *Registry {
|
func NewRegistry(addr *network.BzzAddr, delivery *Delivery, db *storage.DBAPI, intervalsStore state.Store, skipCheck, doSync bool) *Registry {
|
||||||
streamer := &Registry{
|
streamer := &Registry{
|
||||||
addr: addr,
|
addr: addr,
|
||||||
skipCheck: skipCheck,
|
skipCheck: skipCheck,
|
||||||
store: store,
|
|
||||||
serverFuncs: make(map[string]func(*Peer, []byte, bool) (Server, error)),
|
serverFuncs: make(map[string]func(*Peer, []byte, bool) (Server, error)),
|
||||||
clientFuncs: make(map[string]func(*Peer, []byte, bool) (Client, error)),
|
clientFuncs: make(map[string]func(*Peer, []byte, bool) (Client, error)),
|
||||||
peers: make(map[discover.NodeID]*Peer),
|
peers: make(map[discover.NodeID]*Peer),
|
||||||
delivery: delivery,
|
delivery: delivery,
|
||||||
intervalsStore: intervalsStore,
|
intervalsStore: intervalsStore,
|
||||||
|
doSync: doSync,
|
||||||
}
|
}
|
||||||
streamer.api = NewAPI(streamer, streamer.store)
|
streamer.api = NewAPI(streamer)
|
||||||
delivery.getPeer = streamer.getPeer
|
delivery.getPeer = streamer.getPeer
|
||||||
streamer.RegisterServerFunc(swarmChunkServerStreamName, func(_ *Peer, _ []byte, _ bool) (Server, error) {
|
streamer.RegisterServerFunc(swarmChunkServerStreamName, func(_ *Peer, _ []byte, _ bool) (Server, error) {
|
||||||
return NewSwarmChunkServer(delivery.db), nil
|
return NewSwarmChunkServer(delivery.db), nil
|
||||||
|
|
@ -80,6 +80,8 @@ func NewRegistry(addr *network.BzzAddr, delivery *Delivery, store storage.ChunkS
|
||||||
streamer.RegisterClientFunc(swarmChunkServerStreamName, func(p *Peer, _ []byte, _ bool) (Client, error) {
|
streamer.RegisterClientFunc(swarmChunkServerStreamName, func(p *Peer, _ []byte, _ bool) (Client, error) {
|
||||||
return NewSwarmSyncerClient(p, delivery.db, nil)
|
return NewSwarmSyncerClient(p, delivery.db, nil)
|
||||||
})
|
})
|
||||||
|
RegisterSwarmSyncerServer(streamer, db)
|
||||||
|
RegisterSwarmSyncerClient(streamer, db)
|
||||||
return streamer
|
return streamer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -214,7 +216,6 @@ func (r *Registry) PeerInfo(id discover.NodeID) interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Registry) Close() error {
|
func (r *Registry) Close() error {
|
||||||
r.store.Close()
|
|
||||||
return r.intervalsStore.Close()
|
return r.intervalsStore.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,6 +253,7 @@ func (r *Registry) Run(p *network.BzzPeer) error {
|
||||||
defer close(sp.quit)
|
defer close(sp.quit)
|
||||||
defer sp.close()
|
defer sp.close()
|
||||||
|
|
||||||
|
if r.doSync {
|
||||||
var kadDepth int
|
var kadDepth int
|
||||||
|
|
||||||
r.delivery.overlay.EachConn(nil, 256, func(addr network.OverlayConn, po int, nn bool) bool {
|
r.delivery.overlay.EachConn(nil, 256, func(addr network.OverlayConn, po int, nn bool) bool {
|
||||||
|
|
@ -309,6 +311,7 @@ func (r *Registry) Run(p *network.BzzPeer) error {
|
||||||
i++
|
i++
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return sp.Run(sp.HandleMsg)
|
return sp.Run(sp.HandleMsg)
|
||||||
}
|
}
|
||||||
|
|
@ -539,13 +542,11 @@ func (r *Registry) APIs() []rpc.API {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Registry) Start(server *p2p.Server) error {
|
func (r *Registry) Start(server *p2p.Server) error {
|
||||||
r.api.dpa.Start()
|
|
||||||
log.Info("Streamer started")
|
log.Info("Streamer started")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Registry) Stop() error {
|
func (r *Registry) Stop() error {
|
||||||
r.api.dpa.Stop()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -566,14 +567,11 @@ func getHistoryStream(s Stream) Stream {
|
||||||
|
|
||||||
type API struct {
|
type API struct {
|
||||||
streamer *Registry
|
streamer *Registry
|
||||||
dpa *storage.DPA
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAPI(r *Registry, store storage.ChunkStore) *API {
|
func NewAPI(r *Registry) *API {
|
||||||
dpa := storage.NewDPA(store, storage.NewChunkerParams())
|
|
||||||
return &API{
|
return &API{
|
||||||
streamer: r,
|
streamer: r,
|
||||||
dpa: dpa,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,7 @@ func testSyncBetweenNodes(t *testing.T, nodes, conns, chunkCount int, skipCheck
|
||||||
// start syncing, i.e., subscribe to upstream peers po 1 bin
|
// start syncing, i.e., subscribe to upstream peers po 1 bin
|
||||||
sid := sim.IDs[j+1]
|
sid := sim.IDs[j+1]
|
||||||
return client.CallContext(ctx, nil, "stream_subscribeStream", sid, NewStream("SYNC", []byte{1}, false), &Range{From: 0, To: 0}, Top)
|
return client.CallContext(ctx, nil, "stream_subscribeStream", sid, NewStream("SYNC", []byte{1}, false), &Range{From: 0, To: 0}, Top)
|
||||||
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -156,9 +156,7 @@ func NewSwarm(ctx *node.ServiceContext, backend chequebook.Backend, config *api.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.streamer = stream.NewRegistry(addr, delivery, self.lstore, stateStore, false)
|
self.streamer = stream.NewRegistry(addr, delivery, db, stateStore, false, true)
|
||||||
stream.RegisterSwarmSyncerServer(self.streamer, db)
|
|
||||||
stream.RegisterSwarmSyncerClient(self.streamer, db)
|
|
||||||
|
|
||||||
self.bzz = network.NewBzz(bzzconfig, to, stateStore, stream.Spec, self.streamer.Run)
|
self.bzz = network.NewBzz(bzzconfig, to, stateStore, stream.Spec, self.streamer.Run)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue