ignore ErrAlreadyStarted when starting addrbook in PEXReactor

This commit is contained in:
Anton Kaliaev
2017-11-29 10:53:30 -06:00
parent c6b2334fa3
commit 691e266bef
3 changed files with 6 additions and 12 deletions

View File

@@ -70,7 +70,7 @@ func (r *PEXReactor) OnStart() error {
return err return err
} }
err := r.book.Start() err := r.book.Start()
if err != nil { if err != nil && err != cmn.ErrAlreadyStarted {
return err return err
} }
go r.ensurePeersRoutine() go r.ensurePeersRoutine()

View File

@@ -62,13 +62,11 @@ func TestPEXReactorAddRemovePeer(t *testing.T) {
} }
func TestPEXReactorRunning(t *testing.T) { func TestPEXReactorRunning(t *testing.T) {
require := require.New(t)
N := 3 N := 3
switches := make([]*Switch, N) switches := make([]*Switch, N)
dir, err := ioutil.TempDir("", "pex_reactor") dir, err := ioutil.TempDir("", "pex_reactor")
require.Nil(err) require.Nil(t, err)
defer os.RemoveAll(dir) // nolint: errcheck defer os.RemoveAll(dir) // nolint: errcheck
book := NewAddrBook(dir+"addrbook.json", false) book := NewAddrBook(dir+"addrbook.json", false)
book.SetLogger(log.TestingLogger()) book.SetLogger(log.TestingLogger())
@@ -96,7 +94,7 @@ func TestPEXReactorRunning(t *testing.T) {
// start switches // start switches
for _, s := range switches { for _, s := range switches {
err := s.Start() // start switch and reactors err := s.Start() // start switch and reactors
require.Nil(err) require.Nil(t, err)
} }
assertSomePeersWithTimeout(t, switches, 10*time.Millisecond, 10*time.Second) assertSomePeersWithTimeout(t, switches, 10*time.Millisecond, 10*time.Second)

View File

@@ -1,12 +1,13 @@
package p2p package p2p
import ( import (
"errors"
"fmt" "fmt"
"math/rand" "math/rand"
"net" "net"
"time" "time"
"github.com/pkg/errors"
crypto "github.com/tendermint/go-crypto" crypto "github.com/tendermint/go-crypto"
cfg "github.com/tendermint/tendermint/config" cfg "github.com/tendermint/tendermint/config"
cmn "github.com/tendermint/tmlibs/common" cmn "github.com/tendermint/tmlibs/common"
@@ -174,17 +175,13 @@ func (sw *Switch) SetNodePrivKey(nodePrivKey crypto.PrivKeyEd25519) {
// OnStart implements BaseService. It starts all the reactors, peers, and listeners. // OnStart implements BaseService. It starts all the reactors, peers, and listeners.
func (sw *Switch) OnStart() error { func (sw *Switch) OnStart() error {
if err := sw.BaseService.OnStart(); err != nil {
return err
}
// Start reactors // Start reactors
for _, reactor := range sw.reactors { for _, reactor := range sw.reactors {
err := reactor.Start() err := reactor.Start()
if err != nil { if err != nil {
return err return errors.Wrapf(err, "failed to start %v", reactor)
} }
} }
// Start listeners // Start listeners
for _, listener := range sw.listeners { for _, listener := range sw.listeners {
go sw.listenerRoutine(listener) go sw.listenerRoutine(listener)
@@ -194,7 +191,6 @@ func (sw *Switch) OnStart() error {
// OnStop implements BaseService. It stops all listeners, peers, and reactors. // OnStop implements BaseService. It stops all listeners, peers, and reactors.
func (sw *Switch) OnStop() { func (sw *Switch) OnStop() {
sw.BaseService.OnStop()
// Stop listeners // Stop listeners
for _, listener := range sw.listeners { for _, listener := range sw.listeners {
listener.Stop() listener.Stop()