From 7efeb4bd9647b6ab5376e171c1ff7cb516da5698 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 14 May 2015 01:43:30 +0200 Subject: p2p: bump maxAcceptConns and defaultDialTimout On the test network, we've seen that it becomes harder to connect if the queues are so short. --- p2p/server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'p2p') diff --git a/p2p/server.go b/p2p/server.go index 3c6fb5893..8f768bdff 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -18,12 +18,12 @@ import ( ) const ( - defaultDialTimeout = 10 * time.Second + defaultDialTimeout = 15 * time.Second refreshPeersInterval = 30 * time.Second staticPeerCheckInterval = 15 * time.Second // Maximum number of concurrently handshaking inbound connections. - maxAcceptConns = 10 + maxAcceptConns = 50 // Maximum number of concurrently dialing outbound connections. maxDialingConns = 10 -- cgit v1.2.3 From 691cb90284b9b63dc9c80bf0716ba35036ca78fe Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 14 May 2015 03:04:04 +0200 Subject: p2p: log remote reason when disconnect is requested The returned reason is currently not used except for the log message. This change makes the log messages a bit more useful. The handshake code also returns the remote reason. --- p2p/peer.go | 5 +++-- p2p/peer_test.go | 13 +++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'p2p') diff --git a/p2p/peer.go b/p2p/peer.go index ac691f2ce..c7ec08887 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -131,10 +131,11 @@ func (p *Peer) run() DiscReason { case err := <-p.protoErr: reason = discReasonForError(err) case reason = <-p.disc: + p.politeDisconnect(reason) + reason = DiscRequested } close(p.closed) - p.politeDisconnect(reason) p.wg.Wait() glog.V(logger.Debug).Infof("%v: Disconnected: %v\n", p, reason) return reason @@ -191,7 +192,7 @@ func (p *Peer) handle(msg Msg) error { // check errors because, the connection will be closed after it. rlp.Decode(msg.Payload, &reason) glog.V(logger.Debug).Infof("%v: Disconnect Requested: %v\n", p, reason[0]) - return DiscRequested + return reason[0] case msg.Code < baseProtocolLength: // ignore other base protocol messages return msg.Discard() diff --git a/p2p/peer_test.go b/p2p/peer_test.go index fb76818a0..7d17d447c 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -172,12 +172,13 @@ func TestPeerDisconnect(t *testing.T) { if err := SendItems(rw, discMsg, DiscQuitting); err != nil { t.Fatal(err) } - if err := ExpectMsg(rw, discMsg, []interface{}{DiscRequested}); err != nil { - t.Error(err) - } - closer() - if reason := <-disc; reason != DiscRequested { - t.Errorf("run returned wrong reason: got %v, want %v", reason, DiscRequested) + select { + case reason := <-disc: + if reason != DiscQuitting { + t.Errorf("run returned wrong reason: got %v, want %v", reason, DiscRequested) + } + case <-time.After(500 * time.Millisecond): + t.Error("peer did not return") } } -- cgit v1.2.3 From 7fa2607bd12290d7ae84d74b9dcc59b1777f8d58 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 14 May 2015 01:49:39 +0200 Subject: p2p/discover: bump maxBondingPingPongs to 16 This should increase the speed a bit because all findnode results (up to 16) can be verified at the same time. --- p2p/discover/table.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'p2p') diff --git a/p2p/discover/table.go b/p2p/discover/table.go index 2c9cb80d5..5e6dd8d0d 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -25,7 +25,7 @@ const ( hashBits = len(common.Hash{}) * 8 nBuckets = hashBits + 1 // Number of buckets - maxBondingPingPongs = 10 + maxBondingPingPongs = 16 ) type Table struct { -- cgit v1.2.3 From 206fe259718c015df43dd25b59a9dfd370428b53 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 14 May 2015 14:56:34 +0200 Subject: p2p: remove testlog --- p2p/peer_test.go | 11 ----------- p2p/server_test.go | 15 --------------- p2p/testlog_test.go | 25 ------------------------- 3 files changed, 51 deletions(-) delete mode 100644 p2p/testlog_test.go (limited to 'p2p') diff --git a/p2p/peer_test.go b/p2p/peer_test.go index 7d17d447c..59dcb7ba4 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -50,8 +50,6 @@ func testPeer(protos []Protocol) (func(), *conn, *Peer, <-chan DiscReason) { } func TestPeerProtoReadMsg(t *testing.T) { - defer testlog(t).detach() - done := make(chan struct{}) proto := Protocol{ Name: "a", @@ -88,8 +86,6 @@ func TestPeerProtoReadMsg(t *testing.T) { } func TestPeerProtoEncodeMsg(t *testing.T) { - defer testlog(t).detach() - proto := Protocol{ Name: "a", Length: 2, @@ -112,8 +108,6 @@ func TestPeerProtoEncodeMsg(t *testing.T) { } func TestPeerWriteForBroadcast(t *testing.T) { - defer testlog(t).detach() - closer, rw, peer, peerErr := testPeer([]Protocol{discard}) defer closer() @@ -152,8 +146,6 @@ func TestPeerWriteForBroadcast(t *testing.T) { } func TestPeerPing(t *testing.T) { - defer testlog(t).detach() - closer, rw, _, _ := testPeer(nil) defer closer() if err := SendItems(rw, pingMsg); err != nil { @@ -165,8 +157,6 @@ func TestPeerPing(t *testing.T) { } func TestPeerDisconnect(t *testing.T) { - defer testlog(t).detach() - closer, rw, _, disc := testPeer(nil) defer closer() if err := SendItems(rw, discMsg, DiscQuitting); err != nil { @@ -185,7 +175,6 @@ func TestPeerDisconnect(t *testing.T) { // This test is supposed to verify that Peer can reliably handle // multiple causes of disconnection occurring at the same time. func TestPeerDisconnectRace(t *testing.T) { - defer testlog(t).detach() maybe := func() bool { return rand.Intn(1) == 1 } for i := 0; i < 1000; i++ { diff --git a/p2p/server_test.go b/p2p/server_test.go index bf9df31ab..55fc81572 100644 --- a/p2p/server_test.go +++ b/p2p/server_test.go @@ -46,8 +46,6 @@ func startTestServer(t *testing.T, pf newPeerHook) *Server { } func TestServerListen(t *testing.T) { - defer testlog(t).detach() - // start the test server connected := make(chan *Peer) srv := startTestServer(t, func(p *Peer) { @@ -78,8 +76,6 @@ func TestServerListen(t *testing.T) { } func TestServerDial(t *testing.T) { - defer testlog(t).detach() - // run a one-shot TCP server to handle the connection. listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { @@ -126,8 +122,6 @@ func TestServerDial(t *testing.T) { } func TestServerBroadcast(t *testing.T) { - defer testlog(t).detach() - var connected sync.WaitGroup srv := startTestServer(t, func(p *Peer) { p.running = matchProtocols([]Protocol{discard}, []Cap{discard.cap()}, p.rw) @@ -172,8 +166,6 @@ func TestServerBroadcast(t *testing.T) { // // It also serves as a light-weight integration test. func TestServerDisconnectAtCap(t *testing.T) { - defer testlog(t).detach() - started := make(chan *Peer) srv := &Server{ ListenAddr: "127.0.0.1:0", @@ -224,8 +216,6 @@ func TestServerDisconnectAtCap(t *testing.T) { // Tests that static peers are (re)connected, and done so even above max peers. func TestServerStaticPeers(t *testing.T) { - defer testlog(t).detach() - // Create a test server with limited connection slots started := make(chan *Peer) server := &Server{ @@ -312,7 +302,6 @@ func TestServerStaticPeers(t *testing.T) { // Tests that trusted peers and can connect above max peer caps. func TestServerTrustedPeers(t *testing.T) { - defer testlog(t).detach() // Create a trusted peer to accept connections from key := newkey() @@ -374,8 +363,6 @@ func TestServerTrustedPeers(t *testing.T) { // Tests that a failed dial will temporarily throttle a peer. func TestServerMaxPendingDials(t *testing.T) { - defer testlog(t).detach() - // Start a simple test server server := &Server{ ListenAddr: "127.0.0.1:0", @@ -443,8 +430,6 @@ func TestServerMaxPendingDials(t *testing.T) { } func TestServerMaxPendingAccepts(t *testing.T) { - defer testlog(t).detach() - // Start a test server and a peer sink for synchronization started := make(chan *Peer) server := &Server{ diff --git a/p2p/testlog_test.go b/p2p/testlog_test.go deleted file mode 100644 index ac973bcf5..000000000 --- a/p2p/testlog_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package p2p - -import ( - "testing" - - "github.com/ethereum/go-ethereum/logger" -) - -type testLogger struct{ t *testing.T } - -func testlog(t *testing.T) testLogger { - logger.Reset() - l := testLogger{t} - logger.AddLogSystem(l) - return l -} - -func (l testLogger) LogPrint(msg logger.LogMsg) { - l.t.Logf("%s", msg.String()) -} - -func (testLogger) detach() { - logger.Flush() - logger.Reset() -} -- cgit v1.2.3 From d2f119cf9b30a7568b5ebe7c290c3be30dc0f2de Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 14 May 2015 15:01:13 +0200 Subject: p2p/discover: limit open files for node database --- p2p/discover/database.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'p2p') diff --git a/p2p/discover/database.go b/p2p/discover/database.go index dc0b97ddf..2b9da0423 100644 --- a/p2p/discover/database.go +++ b/p2p/discover/database.go @@ -17,6 +17,7 @@ import ( "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/iterator" + "github.com/syndtr/goleveldb/leveldb/opt" "github.com/syndtr/goleveldb/leveldb/storage" "github.com/syndtr/goleveldb/leveldb/util" ) @@ -72,8 +73,8 @@ func newMemoryNodeDB() (*nodeDB, error) { // newPersistentNodeDB creates/opens a leveldb backed persistent node database, // also flushing its contents in case of a version mismatch. func newPersistentNodeDB(path string, version int) (*nodeDB, error) { - // Try to open the cache, recovering any corruption - db, err := leveldb.OpenFile(path, nil) + opts := &opt.Options{OpenFilesCacheCapacity: 5} + db, err := leveldb.OpenFile(path, opts) if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted { db, err = leveldb.RecoverFile(path, nil) } -- cgit v1.2.3