Merge remote-tracking branch 'origin/fix-logs' into simulation-new-comment

This commit is contained in:
Janos Guljas 2018-11-23 11:04:57 +01:00
commit ea620760d2
7 changed files with 27 additions and 126 deletions

View file

@ -18,7 +18,7 @@ For prerequisites and detailed build instructions please read the
[Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum) [Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum)
on the wiki. on the wiki.
Building geth requires both a Go (version 1.7 or later) and a C compiler. Building geth requires both a Go (version 1.9 or later) and a C compiler.
You can install them using your favourite package manager. You can install them using your favourite package manager.
Once the dependencies are installed, run Once the dependencies are installed, run

View file

@ -825,7 +825,7 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local bool) []error {
// addTxsLocked attempts to queue a batch of transactions if they are valid, // addTxsLocked attempts to queue a batch of transactions if they are valid,
// whilst assuming the transaction pool lock is already held. // whilst assuming the transaction pool lock is already held.
func (pool *TxPool) addTxsLocked(txs []*types.Transaction, local bool) []error { func (pool *TxPool) addTxsLocked(txs []*types.Transaction, local bool) []error {
// Add the batch of transaction, tracking the accepted ones // Add the batch of transactions, tracking the accepted ones
dirty := make(map[common.Address]struct{}) dirty := make(map[common.Address]struct{})
errs := make([]error, len(txs)) errs := make([]error, len(txs))

View file

@ -64,12 +64,12 @@ func init() {
type Simulation struct { type Simulation struct {
mtx sync.Mutex mtx sync.Mutex
stores map[enode.ID]*state.InmemoryStore stores map[enode.ID]state.Store
} }
func NewSimulation() *Simulation { func NewSimulation() *Simulation {
return &Simulation{ return &Simulation{
stores: make(map[enode.ID]*state.InmemoryStore), stores: make(map[enode.ID]state.Store),
} }
} }

View file

@ -169,7 +169,7 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *
go func() { go func() {
chunk, err := d.chunkStore.Get(ctx, req.Addr) chunk, err := d.chunkStore.Get(ctx, req.Addr)
if err != nil { if err != nil {
log.Warn("ChunkStore.Get can not retrieve chunk", "err", err) log.Warn("ChunkStore.Get can not retrieve chunk", "peer", sp.ID().String(), "addr", req.Addr, "hopcount", req.HopCount, "err", err)
return return
} }
if req.SkipCheck { if req.SkipCheck {
@ -255,7 +255,7 @@ func (d *Delivery) RequestFromPeers(ctx context.Context, req *network.Request) (
} }
sp = d.getPeer(id) sp = d.getPeer(id)
if sp == nil { if sp == nil {
log.Warn("Delivery.RequestFromPeers: peer not found", "id", id) //log.Warn("Delivery.RequestFromPeers: peer not found", "id", id)
return true return true
} }
spID = &id spID = &id

View file

@ -22,6 +22,7 @@ import (
"errors" "errors"
"github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/storage"
) )
// ErrNotFound is returned when no results are returned from the database // ErrNotFound is returned when no results are returned from the database
@ -30,6 +31,15 @@ var ErrNotFound = errors.New("ErrorNotFound")
// ErrInvalidArgument is returned when the argument type does not match the expected type // ErrInvalidArgument is returned when the argument type does not match the expected type
var ErrInvalidArgument = errors.New("ErrorInvalidArgument") var ErrInvalidArgument = errors.New("ErrorInvalidArgument")
// Store defines methods required to get, set, delete values for different keys
// and close the underlying resources.
type Store interface {
Get(key string, i interface{}) (err error)
Put(key string, i interface{}) (err error)
Delete(key string) (err error)
Close() error
}
// DBStore uses LevelDB to store values. // DBStore uses LevelDB to store values.
type DBStore struct { type DBStore struct {
db *leveldb.DB db *leveldb.DB
@ -46,6 +56,17 @@ func NewDBStore(path string) (s *DBStore, err error) {
}, nil }, nil
} }
// NewInmemoryStore returns a new instance of DBStore. To be used only in tests and simulations.
func NewInmemoryStore() *DBStore {
db, err := leveldb.Open(storage.NewMemStorage(), nil)
if err != nil {
panic(err)
}
return &DBStore{
db: db,
}
}
// Get retrieves a persisted value for a specific key. If there is no results // Get retrieves a persisted value for a specific key. If there is no results
// ErrNotFound is returned. The provided parameter should be either a byte slice or // ErrNotFound is returned. The provided parameter should be either a byte slice or
// a struct that implements the encoding.BinaryUnmarshaler interface // a struct that implements the encoding.BinaryUnmarshaler interface

View file

@ -1,94 +0,0 @@
// Copyright 2018 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package state
import (
"encoding"
"encoding/json"
"sync"
)
// InmemoryStore is the reference implementation of Store interface that is supposed
// to be used in tests.
type InmemoryStore struct {
db map[string][]byte
mu sync.RWMutex
}
// NewInmemoryStore returns a new instance of InmemoryStore.
func NewInmemoryStore() *InmemoryStore {
return &InmemoryStore{
db: make(map[string][]byte),
}
}
// Get retrieves a value stored for a specific key. If there is no value found,
// ErrNotFound is returned.
func (s *InmemoryStore) Get(key string, i interface{}) (err error) {
s.mu.RLock()
defer s.mu.RUnlock()
bytes, ok := s.db[key]
if !ok {
return ErrNotFound
}
unmarshaler, ok := i.(encoding.BinaryUnmarshaler)
if !ok {
return json.Unmarshal(bytes, i)
}
return unmarshaler.UnmarshalBinary(bytes)
}
// Put stores a value for a specific key.
func (s *InmemoryStore) Put(key string, i interface{}) (err error) {
s.mu.Lock()
defer s.mu.Unlock()
var bytes []byte
marshaler, ok := i.(encoding.BinaryMarshaler)
if !ok {
if bytes, err = json.Marshal(i); err != nil {
return err
}
} else {
if bytes, err = marshaler.MarshalBinary(); err != nil {
return err
}
}
s.db[key] = bytes
return nil
}
// Delete removes value stored under a specific key.
func (s *InmemoryStore) Delete(key string) (err error) {
s.mu.Lock()
defer s.mu.Unlock()
if _, ok := s.db[key]; !ok {
return ErrNotFound
}
delete(s.db, key)
return nil
}
// Close does not do anything.
func (s *InmemoryStore) Close() error {
return nil
}

View file

@ -1,26 +0,0 @@
// Copyright 2018 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package state
// Store defines methods required to get, set, delete values for different keys
// and close the underlying resources.
type Store interface {
Get(key string, i interface{}) (err error)
Put(key string, i interface{}) (err error)
Delete(key string) (err error)
Close() error
}