mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26:44 +00:00
* Merge qa to master (#750) * Added checks to RPC requests and introduced new flags to customise the parameters (#657) * added a check to reject rpc requests with batch size > the one set using a newly added flag (rpcbatchlimit) * added a check to reject rpc requests whose result size > the one set using a newly added flag (rpcreturndatalimit) * updated the config files and docs * chg : trieTimeout from 60 to 10 mins (#692) * chg : trieTimeout from 60 to 10 mins * chg : cache.timout to 10m from 1h in configs * internal/cli/server : fix : added triesInMemory in config (#691) * changed version from 0.3.0 to 0.3.4-beta (#693) * fix nil state-sync issue, increase grpc limit (#695) * Increase grpc message size limit in pprof * consensus/bor/bor.go : stateSyncs init fixed [Fix #686] * eth/filters: handle nil state-sync before notify * eth/filters: update check Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Daniil <daniil.melnik@chainstack.com> * core, tests/bor: add more tests for state-sync validation (#710) * core: add get state sync function for tests * tests/bor: add validation for state sync events post consensus * Arpit/temp bor sync (#701) * Increase grpc message size limit in pprof * ReadBorReceipts improvements * use internal function * fix tests * fetch geth upstread for ReadBorReceiptRLP * Only query bor receipt when the query index is equal to # tx in block body This change reduces the frequency of calling ReadBorReceipt and ReadBorTransaction, which are CPU and db intensive. * Revert "fetch geth upstread for ReadBorReceiptRLP" This reverts commit 2e838a6b1313d26674f3a8df4b044e35dcbf35a0. * Restore ReadBorReceiptRLP * fix bor receipts * remove unused * fix lints --------- Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Manav Darji <manavdarji.india@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> * Revert "chg : trieTimeout from 60 to 10 mins (#692)" (#720) This reverts commit241843c7e7. * Arpit/add execution pool 2 (#719) * initial * linters * linters * remove timeout * update pool * change pool size function * check nil * check nil * fix tests * Use execution pool from server in all handlers * simplify things * test fix * add support for cli, config * add to cli and config * merge base branch * debug statements * fix bug * atomic pointer timeout * add apis * update workerpool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * fix tests * mutex * refactor flag and value names * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * debug statements * fix bug * update workerpool * atomic pointer timeout * add apis * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * merge base branch * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * mutex * fix tests * Merge branch 'arpit/add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * Change default size of execution pool to 40 * refactor flag and value names * fix merge conflicts * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * fix linters * fix go.mod * change sec to ms * change default value for ep timeout * fix node api calls * comment setter for ep timeout --------- Co-authored-by: Evgeny Danienko <6655321@bk.ru> Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Manav Darji <manavdarji.india@gmail.com> * version change (#721) * Event based pprof (#732) * feature * Save pprof to /tmp --------- Co-authored-by: Jerry <jerrycgh@gmail.com> * Cherry-pick changes from develop (#738) * Check if block is nil to prevent panic (#736) * miner: use env for tracing instead of block object (#728) --------- Co-authored-by: Dmitry <46797839+dkeysil@users.noreply.github.com> * add max code init size check in txpool (#739) * Revert "Event based pprof" and update version (#742) * Revert "Event based pprof (#732)" This reverts commit22fa4033e8. * params: update version to 0.3.4-beta3 * packaging/templates: update bor version * params, packaging/templates: update bor version --------- Co-authored-by: SHIVAM SHARMA <shivam691999@gmail.com> Co-authored-by: Pratik Patil <pratikspatil024@gmail.com> Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Daniil <daniil.melnik@chainstack.com> Co-authored-by: Arpit Temani <temaniarpit27@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> Co-authored-by: Dmitry <46797839+dkeysil@users.noreply.github.com> * core, miner: add sub-spans for tracing (#753) * core, miner: add sub-spans for tracing * fix linters * core: add logs for debugging * core: add more logs to print tdd while reorg * fix linters * core: minor fix * core: remove debug logs * core: use different span for write block and set head * core: use internal context for sending traces (#755) * core: add : impossible reorg block dump (#754) * add : impossible reorg block dump * chg : 3 seperate files for impossoble reorg dump * add : use exportBlocks method and RLP blocks before writing * chg : small changes * bump : go version from 1.19 to 1.20.1 (#761) * Revert "bump : go version from 1.19 to 1.20.1 (#761)" This reverts commit4561012af9. * core/vm: use optimized bigint (#26021) * Add holiman/big * Fix linter * Bump version to v0.3.5 * fix lints from develop (few lints decided to appear from code that was untouched, weird) * upgrade crypto lib version (#770) * bump dep : github.com/Masterminds/goutils to v1.1.1 (#769) * mardizzone/pos-1313: bump crypto dependency (#772) * dev: chg: bumd net dependency * dev: chg: bump crypto dependency * dev: chg: bump crypto dependency * bump dep : golang.org/x/net to v0.8.0 (#771) * Verify validator set against local contract on receiving an end-of-sprint block (#768) * Verify validator set against local contract on receiving an end-of-sprint block * Fix tests * Respect error returned by ParseValidators * Keep going back until a parent block presents * core/txpool: implement DoS defenses from geth (#778) * Hotfixes and deps bump (#776) * dev: chg: bump deps * internal/cli/server, rpc: lower down http readtimeout to 10s * dev: chg: get p2p adapter * dev: chg: lower down jsonrpc readtimeout to 10s * cherry-pick txpool optimisation changes * add check for empty lists in txpool (#704) * add check * linters * core, miner: add empty instrumentation name for tracing --------- Co-authored-by: Raneet Debnath <raneetdebnath10@gmail.com> Co-authored-by: SHIVAM SHARMA <shivam691999@gmail.com> Co-authored-by: Evgeny Danilenko <6655321@bk.ru> Co-authored-by: Manav Darji <manavdarji.india@gmail.com> * packaging,params: bump to v0.3.6 (#782) * v0.3.6 fix (#787) * Fix get validator set in header verifier * chg : commit tx logs from info to debug (#673) * chg : commit tx logs from info to debug * fix : minor changes * chg : miner : commitTransactions-stats moved from info to debug * lint : fix linters * refactor logging * miner : chg : UnauthorizedSignerError to debug * lint : fix lint * fix : log.Logger interface compatibility --------- Co-authored-by: Evgeny Danienko <6655321@bk.ru> * Remove unnecessary sorting of valset from header in verification * dev: chg: version bump --------- Co-authored-by: SHIVAM SHARMA <shivam691999@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> Co-authored-by: marcello33 <marcelloardizzone@hotmail.it> * core: improve locks in txpool (#807) * added a write lock to the txs.filter method and a read lock to the txs.reheap method - both of which are called by Filter during reorg adjustments to txpool * txpool reorg locks * more locks * locks * linters * params, packaging: update version for v0.3.8-beta release * core: add logs in reheap --------- Co-authored-by: Alex <dalexwatts@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> * Merge qa to master (#808) * Added checks to RPC requests and introduced new flags to customise the parameters (#657) * added a check to reject rpc requests with batch size > the one set using a newly added flag (rpcbatchlimit) * added a check to reject rpc requests whose result size > the one set using a newly added flag (rpcreturndatalimit) * updated the config files and docs * chg : trieTimeout from 60 to 10 mins (#692) * chg : trieTimeout from 60 to 10 mins * chg : cache.timout to 10m from 1h in configs * internal/cli/server : fix : added triesInMemory in config (#691) * changed version from 0.3.0 to 0.3.4-beta (#693) * fix nil state-sync issue, increase grpc limit (#695) * Increase grpc message size limit in pprof * consensus/bor/bor.go : stateSyncs init fixed [Fix #686] * eth/filters: handle nil state-sync before notify * eth/filters: update check Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Daniil <daniil.melnik@chainstack.com> * core, tests/bor: add more tests for state-sync validation (#710) * core: add get state sync function for tests * tests/bor: add validation for state sync events post consensus * Arpit/temp bor sync (#701) * Increase grpc message size limit in pprof * ReadBorReceipts improvements * use internal function * fix tests * fetch geth upstread for ReadBorReceiptRLP * Only query bor receipt when the query index is equal to # tx in block body This change reduces the frequency of calling ReadBorReceipt and ReadBorTransaction, which are CPU and db intensive. * Revert "fetch geth upstread for ReadBorReceiptRLP" This reverts commit 2e838a6b1313d26674f3a8df4b044e35dcbf35a0. * Restore ReadBorReceiptRLP * fix bor receipts * remove unused * fix lints --------- Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Manav Darji <manavdarji.india@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> * Revert "chg : trieTimeout from 60 to 10 mins (#692)" (#720) This reverts commit241843c7e7. * Arpit/add execution pool 2 (#719) * initial * linters * linters * remove timeout * update pool * change pool size function * check nil * check nil * fix tests * Use execution pool from server in all handlers * simplify things * test fix * add support for cli, config * add to cli and config * merge base branch * debug statements * fix bug * atomic pointer timeout * add apis * update workerpool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * fix tests * mutex * refactor flag and value names * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * debug statements * fix bug * update workerpool * atomic pointer timeout * add apis * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * merge base branch * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * mutex * fix tests * Merge branch 'arpit/add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * Change default size of execution pool to 40 * refactor flag and value names * fix merge conflicts * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * fix linters * fix go.mod * change sec to ms * change default value for ep timeout * fix node api calls * comment setter for ep timeout --------- Co-authored-by: Evgeny Danienko <6655321@bk.ru> Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Manav Darji <manavdarji.india@gmail.com> * version change (#721) * Event based pprof (#732) * feature * Save pprof to /tmp --------- Co-authored-by: Jerry <jerrycgh@gmail.com> * Cherry-pick changes from develop (#738) * Check if block is nil to prevent panic (#736) * miner: use env for tracing instead of block object (#728) --------- Co-authored-by: Dmitry <46797839+dkeysil@users.noreply.github.com> * add max code init size check in txpool (#739) * Revert "Event based pprof" and update version (#742) * Revert "Event based pprof (#732)" This reverts commit22fa4033e8. * params: update version to 0.3.4-beta3 * packaging/templates: update bor version * internal/ethapi :: Fix : newRPCTransactionFromBlockIndex * fix: remove assignment for bor receipt --------- Co-authored-by: SHIVAM SHARMA <shivam691999@gmail.com> Co-authored-by: Pratik Patil <pratikspatil024@gmail.com> Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Daniil <daniil.melnik@chainstack.com> Co-authored-by: Arpit Temani <temaniarpit27@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> Co-authored-by: Dmitry <46797839+dkeysil@users.noreply.github.com> * Setting up bor to use hosted 18.04 runner as ubuntu provided 18.04 runner is end of life --------- Co-authored-by: SHIVAM SHARMA <shivam691999@gmail.com> Co-authored-by: Pratik Patil <pratikspatil024@gmail.com> Co-authored-by: Jerry <jerrycgh@gmail.com> Co-authored-by: Daniil <daniil.melnik@chainstack.com> Co-authored-by: Arpit Temani <temaniarpit27@gmail.com> Co-authored-by: Evgeny Danienko <6655321@bk.ru> Co-authored-by: Dmitry <46797839+dkeysil@users.noreply.github.com> Co-authored-by: Martin Holst Swende <martin@swende.se> Co-authored-by: marcello33 <marcelloardizzone@hotmail.it> Co-authored-by: Raneet Debnath <raneetdebnath10@gmail.com> Co-authored-by: Raneet Debnath <35629432+Raneet10@users.noreply.github.com> Co-authored-by: Alex <dalexwatts@gmail.com> Co-authored-by: Daniel Jones <djones@polygon.technology>
291 lines
6.3 KiB
Go
291 lines
6.3 KiB
Go
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/go-stack/stack"
|
|
)
|
|
|
|
const timeKey = "t"
|
|
const lvlKey = "lvl"
|
|
const msgKey = "msg"
|
|
const ctxKey = "ctx"
|
|
const errorKey = "LOG15_ERROR"
|
|
const skipLevel = 2
|
|
|
|
type Lvl int
|
|
|
|
const (
|
|
LvlDiscard Lvl = -1
|
|
LvlCrit Lvl = iota
|
|
LvlError
|
|
LvlWarn
|
|
LvlInfo
|
|
LvlDebug
|
|
LvlTrace
|
|
)
|
|
|
|
// AlignedString returns a 5-character string containing the name of a Lvl.
|
|
func (l Lvl) AlignedString() string {
|
|
switch l {
|
|
case LvlTrace:
|
|
return "TRACE"
|
|
case LvlDebug:
|
|
return "DEBUG"
|
|
case LvlInfo:
|
|
return "INFO "
|
|
case LvlWarn:
|
|
return "WARN "
|
|
case LvlError:
|
|
return "ERROR"
|
|
case LvlCrit:
|
|
return "CRIT "
|
|
default:
|
|
panic("bad level")
|
|
}
|
|
}
|
|
|
|
// Strings returns the name of a Lvl.
|
|
func (l Lvl) String() string {
|
|
switch l {
|
|
case LvlTrace:
|
|
return "trce"
|
|
case LvlDebug:
|
|
return "dbug"
|
|
case LvlInfo:
|
|
return "info"
|
|
case LvlWarn:
|
|
return "warn"
|
|
case LvlError:
|
|
return "eror"
|
|
case LvlCrit:
|
|
return "crit"
|
|
default:
|
|
panic("bad level")
|
|
}
|
|
}
|
|
|
|
// LvlFromString returns the appropriate Lvl from a string name.
|
|
// Useful for parsing command line args and configuration files.
|
|
func LvlFromString(lvlString string) (Lvl, error) {
|
|
switch lvlString {
|
|
case "trace", "trce":
|
|
return LvlTrace, nil
|
|
case "debug", "dbug":
|
|
return LvlDebug, nil
|
|
case "info":
|
|
return LvlInfo, nil
|
|
case "warn":
|
|
return LvlWarn, nil
|
|
case "error", "eror":
|
|
return LvlError, nil
|
|
case "crit":
|
|
return LvlCrit, nil
|
|
default:
|
|
return LvlDebug, fmt.Errorf("unknown level: %v", lvlString)
|
|
}
|
|
}
|
|
|
|
// A Record is what a Logger asks its handler to write
|
|
type Record struct {
|
|
Time time.Time
|
|
Lvl Lvl
|
|
Msg string
|
|
Ctx []interface{}
|
|
Call stack.Call
|
|
KeyNames RecordKeyNames
|
|
}
|
|
|
|
// RecordKeyNames gets stored in a Record when the write function is executed.
|
|
type RecordKeyNames struct {
|
|
Time string
|
|
Msg string
|
|
Lvl string
|
|
Ctx string
|
|
}
|
|
|
|
type Logging func(msg string, ctx ...interface{})
|
|
|
|
// A Logger writes key/value pairs to a Handler
|
|
type Logger interface {
|
|
// New returns a new Logger that has this logger's context plus the given context
|
|
New(ctx ...interface{}) Logger
|
|
|
|
// GetHandler gets the handler associated with the logger.
|
|
GetHandler() Handler
|
|
|
|
// SetHandler updates the logger to write records to the specified handler.
|
|
SetHandler(h Handler)
|
|
|
|
// Log a message at the given level with context key/value pairs
|
|
Trace(msg string, ctx ...interface{})
|
|
Debug(msg string, ctx ...interface{})
|
|
Info(msg string, ctx ...interface{})
|
|
Warn(msg string, ctx ...interface{})
|
|
Error(msg string, ctx ...interface{})
|
|
Crit(msg string, ctx ...interface{})
|
|
|
|
OnTrace(func(l Logging))
|
|
OnDebug(func(l Logging))
|
|
OnInfo(func(l Logging))
|
|
OnWarn(func(l Logging))
|
|
OnError(func(l Logging))
|
|
OnCrit(func(l Logging))
|
|
}
|
|
|
|
type logger struct {
|
|
ctx []interface{}
|
|
h *swapHandler
|
|
}
|
|
|
|
func (l *logger) write(msg string, lvl Lvl, ctx []interface{}, skip int) {
|
|
if l.h.Level() < lvl {
|
|
return
|
|
}
|
|
|
|
l.h.Log(&Record{
|
|
Time: time.Now(),
|
|
Lvl: lvl,
|
|
Msg: msg,
|
|
Ctx: newContext(l.ctx, ctx),
|
|
Call: stack.Caller(skip),
|
|
KeyNames: RecordKeyNames{
|
|
Time: timeKey,
|
|
Msg: msgKey,
|
|
Lvl: lvlKey,
|
|
Ctx: ctxKey,
|
|
},
|
|
})
|
|
}
|
|
|
|
func (l *logger) New(ctx ...interface{}) Logger {
|
|
child := &logger{newContext(l.ctx, ctx), new(swapHandler)}
|
|
child.SetHandler(l.h)
|
|
return child
|
|
}
|
|
|
|
func newContext(prefix []interface{}, suffix []interface{}) []interface{} {
|
|
normalizedSuffix := normalize(suffix)
|
|
newCtx := make([]interface{}, len(prefix)+len(normalizedSuffix))
|
|
n := copy(newCtx, prefix)
|
|
copy(newCtx[n:], normalizedSuffix)
|
|
return newCtx
|
|
}
|
|
|
|
func (l *logger) Trace(msg string, ctx ...interface{}) {
|
|
l.write(msg, LvlTrace, ctx, skipLevel)
|
|
}
|
|
|
|
func (l *logger) Debug(msg string, ctx ...interface{}) {
|
|
l.write(msg, LvlDebug, ctx, skipLevel)
|
|
}
|
|
|
|
func (l *logger) Info(msg string, ctx ...interface{}) {
|
|
l.write(msg, LvlInfo, ctx, skipLevel)
|
|
}
|
|
|
|
func (l *logger) Warn(msg string, ctx ...interface{}) {
|
|
l.write(msg, LvlWarn, ctx, skipLevel)
|
|
}
|
|
|
|
func (l *logger) Error(msg string, ctx ...interface{}) {
|
|
l.write(msg, LvlError, ctx, skipLevel)
|
|
}
|
|
|
|
func (l *logger) Crit(msg string, ctx ...interface{}) {
|
|
l.write(msg, LvlCrit, ctx, skipLevel)
|
|
os.Exit(1)
|
|
}
|
|
|
|
func (l *logger) GetHandler() Handler {
|
|
return l.h.Get()
|
|
}
|
|
|
|
func (l *logger) SetHandler(h Handler) {
|
|
l.h.Swap(h)
|
|
}
|
|
|
|
func (l *logger) OnTrace(fn func(l Logging)) {
|
|
if l.GetHandler().Level() >= LvlTrace {
|
|
fn(l.Trace)
|
|
}
|
|
}
|
|
|
|
func (l *logger) OnDebug(fn func(l Logging)) {
|
|
if l.GetHandler().Level() >= LvlDebug {
|
|
fn(l.Debug)
|
|
}
|
|
}
|
|
func (l *logger) OnInfo(fn func(l Logging)) {
|
|
if l.GetHandler().Level() >= LvlInfo {
|
|
fn(l.Info)
|
|
}
|
|
}
|
|
func (l *logger) OnWarn(fn func(l Logging)) {
|
|
if l.GetHandler().Level() >= LvlWarn {
|
|
fn(l.Warn)
|
|
}
|
|
}
|
|
func (l *logger) OnError(fn func(l Logging)) {
|
|
if l.GetHandler().Level() >= LvlError {
|
|
fn(l.Error)
|
|
}
|
|
}
|
|
func (l *logger) OnCrit(fn func(l Logging)) {
|
|
if l.GetHandler().Level() >= LvlCrit {
|
|
fn(l.Crit)
|
|
}
|
|
}
|
|
|
|
func normalize(ctx []interface{}) []interface{} {
|
|
// if the caller passed a Ctx object, then expand it
|
|
if len(ctx) == 1 {
|
|
if ctxMap, ok := ctx[0].(Ctx); ok {
|
|
ctx = ctxMap.toArray()
|
|
}
|
|
}
|
|
|
|
// ctx needs to be even because it's a series of key/value pairs
|
|
// no one wants to check for errors on logging functions,
|
|
// so instead of erroring on bad input, we'll just make sure
|
|
// that things are the right length and users can fix bugs
|
|
// when they see the output looks wrong
|
|
if len(ctx)%2 != 0 {
|
|
ctx = append(ctx, nil, errorKey, "Normalized odd number of arguments by adding nil")
|
|
}
|
|
|
|
return ctx
|
|
}
|
|
|
|
// Lazy allows you to defer calculation of a logged value that is expensive
|
|
// to compute until it is certain that it must be evaluated with the given filters.
|
|
//
|
|
// Lazy may also be used in conjunction with a Logger's New() function
|
|
// to generate a child logger which always reports the current value of changing
|
|
// state.
|
|
//
|
|
// You may wrap any function which takes no arguments to Lazy. It may return any
|
|
// number of values of any type.
|
|
type Lazy struct {
|
|
Fn interface{}
|
|
}
|
|
|
|
// Ctx is a map of key/value pairs to pass as context to a log function
|
|
// Use this only if you really need greater safety around the arguments you pass
|
|
// to the logging functions.
|
|
type Ctx map[string]interface{}
|
|
|
|
func (c Ctx) toArray() []interface{} {
|
|
arr := make([]interface{}, len(c)*2)
|
|
|
|
i := 0
|
|
for k, v := range c {
|
|
arr[i] = k
|
|
arr[i+1] = v
|
|
i += 2
|
|
}
|
|
|
|
return arr
|
|
}
|