ソースを参照

downloader: don't remove peers. keep them around

obscuren 10 年 前
コミット
50e096e627
3 ファイル変更17 行追加17 行削除
  1. 3 2
      eth/downloader/downloader.go
  2. 11 0
      eth/handler.go
  3. 3 15
      eth/protocol_test.go

+ 3 - 2
eth/downloader/downloader.go

@@ -176,6 +176,7 @@ out:
 			var peer *peer = sync.peer
 			err := d.getFromPeer(peer, sync.hash, sync.ignoreInitial)
 			if err != nil {
+				glog.V(logger.Detail).Infoln(err)
 				break
 			}
 
@@ -301,7 +302,7 @@ out:
 					d.queue.reset()
 					d.peers.reset()
 
-					return errPeersUnavailable
+					return fmt.Errorf("%v avaialable = %d. total = %d", errPeersUnavailable, len(availablePeers), len(d.peers))
 				}
 
 			} else if len(d.queue.fetching) == 0 {
@@ -321,7 +322,7 @@ out:
 					if time.Since(chunk.itime) > blockTtl {
 						badPeers = append(badPeers, pid)
 						// remove peer as good peer from peer list
-						d.UnregisterPeer(pid)
+						//d.UnregisterPeer(pid)
 					}
 				}
 				d.queue.mu.Unlock()

+ 11 - 0
eth/handler.go

@@ -185,7 +185,16 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
 		if request.Amount > maxHashes {
 			request.Amount = maxHashes
 		}
+
 		hashes := self.chainman.GetBlockHashesFromHash(request.Hash, request.Amount)
+
+		if glog.V(logger.Debug) {
+			if len(hashes) == 0 {
+				glog.Infof("invalid block hash %x", request.Hash.Bytes()[:4])
+			}
+		}
+
+		// returns either requested hashes or nothing (i.e. not found)
 		return p.sendBlockHashes(hashes)
 	case BlockHashesMsg:
 		msgStream := rlp.NewStream(msg.Payload)
@@ -282,6 +291,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
 				return nil
 			}
 			self.BroadcastBlock(hash, request.Block)
+			fmt.Println(request.Block.Hash().Hex(), "our calculated TD =", request.Block.Td, "their TD =", request.TD)
 		} else {
 			// adding blocks is synchronous
 			go func() {
@@ -291,6 +301,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
 					return
 				}
 				self.BroadcastBlock(hash, request.Block)
+				fmt.Println(request.Block.Hash().Hex(), "our calculated TD =", request.Block.Td, "their TD =", request.TD)
 			}()
 		}
 	default:

+ 3 - 15
eth/protocol_test.go

@@ -1,20 +1,7 @@
 package eth
 
-import (
-	"log"
-	"math/big"
-	"os"
-	"testing"
-	"time"
-
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/core/types"
-	"github.com/ethereum/go-ethereum/crypto"
-	"github.com/ethereum/go-ethereum/errs"
-	ethlogger "github.com/ethereum/go-ethereum/logger"
-	"github.com/ethereum/go-ethereum/p2p"
-	"github.com/ethereum/go-ethereum/p2p/discover"
-)
+/*
+TODO All of these tests need to be re-written
 
 var logsys = ethlogger.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlogger.LogLevel(ethlogger.DebugDetailLevel))
 
@@ -398,3 +385,4 @@ func TestTransactionsMsg(t *testing.T) {
 	eth.checkError(ErrDecode, delay)
 
 }
+*/