Merge branch 'develop' of github.com:ethereum/go-ethereum into develop

This commit is contained in:
Péter Szilágyi 2015-06-19 18:14:37 +03:00
commit 2105807a32
2 changed files with 69 additions and 4 deletions

View file

@ -3,6 +3,7 @@ package fetcher
import (
"errors"
"fmt"
"math/rand"
"time"
@ -15,9 +16,10 @@ import (
const (
arriveTimeout = 500 * time.Millisecond // Time allowance before an announced block is explicitly requested
gatherSlack = 100 * time.Millisecond // Interval used to collate almost-expired announces with fetches
fetchTimeout = 5 * time.Second // Maximum alloted time to return an explicitly requested block
maxUncleDist = 7 // Maximum allowed backward distance from the chain head
maxQueueDist = 256 // Maximum allowed distance from the chain head to queue
maxQueueDist = 32 // Maximum allowed distance from the chain head to queue
)
var (
@ -239,7 +241,7 @@ func (f *Fetcher) loop() {
request := make(map[string][]common.Hash)
for hash, announces := range f.announced {
if time.Since(announces[0].time) > arriveTimeout {
if time.Since(announces[0].time) > arriveTimeout-gatherSlack {
announce := announces[rand.Intn(len(announces))]
if f.getBlock(hash) == nil {
request[announce.origin] = append(request[announce.origin], hash)
@ -249,7 +251,16 @@ func (f *Fetcher) loop() {
}
}
// Send out all block requests
for _, hashes := range request {
for peer, hashes := range request {
if glog.V(logger.Detail) && len(hashes) > 0 {
list := "["
for _, hash := range hashes {
list += fmt.Sprintf("%x, ", hash[:4])
}
list = list[:len(list)-2] + "]"
glog.V(logger.Detail).Infof("Peer %s: fetching %s", peer, list)
}
go f.fetching[hashes[0]].fetch(hashes)
}
// Schedule the next fetch if blocks are still pending
@ -319,7 +330,7 @@ func (f *Fetcher) enqueue(peer string, block *types.Block) {
// Discard any past or too distant blocks
if dist := int64(block.NumberU64()) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist {
glog.V(logger.Detail).Infof("Peer %s: discarded block #%d [%x], distance %d", peer, block.NumberU64(), hash.Bytes()[:4], dist)
glog.V(logger.Debug).Infof("Peer %s: discarded block #%d [%x], distance %d", peer, block.NumberU64(), hash.Bytes()[:4], dist)
return
}
// Schedule the block for future importing

View file

@ -2577,3 +2577,57 @@ func TestSigArgsEmpty(t *testing.T) {
t.Error(str)
}
}
func TestDataArgs(t *testing.T) {
input := `["0x0123"]`
expected := new(NewDataArgs)
expected.Data = "0x0123"
args := new(NewDataArgs)
if err := json.Unmarshal([]byte(input), &args); err != nil {
t.Error(err)
}
if expected.Data != args.Data {
t.Errorf("Data should be %v but is %v", expected.Data, args.Data)
}
}
func TestDataArgsEmptyData(t *testing.T) {
input := `[""]`
args := new(NewDataArgs)
str := ExpectValidationError(json.Unmarshal([]byte(input), args))
if len(str) > 0 {
t.Error(str)
}
}
func TestDataArgsDataType(t *testing.T) {
input := `[13]`
args := new(NewDataArgs)
str := ExpectInvalidTypeError(json.Unmarshal([]byte(input), args))
if len(str) > 0 {
t.Error(str)
}
}
func TestDataArgsEmpty(t *testing.T) {
input := `[]`
args := new(NewDataArgs)
str := ExpectInsufficientParamsError(json.Unmarshal([]byte(input), args))
if len(str) > 0 {
t.Error(str)
}
}
func TestDataArgsInvalid(t *testing.T) {
input := `{}`
args := new(NewDataArgs)
str := ExpectDecodeParamError(json.Unmarshal([]byte(input), args))
if len(str) > 0 {
t.Error(str)
}
}