mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-28 07:36:44 +00:00
* 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>
160 lines
3.3 KiB
Go
160 lines
3.3 KiB
Go
package cli
|
|
|
|
// Based on https://github.com/hashicorp/nomad/blob/main/command/operator_debug.go
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"google.golang.org/grpc"
|
|
empty "google.golang.org/protobuf/types/known/emptypb"
|
|
|
|
"github.com/ethereum/go-ethereum/internal/cli/flagset"
|
|
"github.com/ethereum/go-ethereum/internal/cli/server/proto"
|
|
)
|
|
|
|
type DebugPprofCommand struct {
|
|
*Meta2
|
|
|
|
seconds uint64
|
|
output string
|
|
}
|
|
|
|
func (p *DebugPprofCommand) MarkDown() string {
|
|
items := []string{
|
|
"# Debug Pprof",
|
|
"The ```debug pprof <enode>``` command will create an archive containing bor pprof traces.",
|
|
p.Flags().MarkDown(),
|
|
}
|
|
|
|
return strings.Join(items, "\n\n")
|
|
}
|
|
|
|
// Help implements the cli.Command interface
|
|
func (d *DebugPprofCommand) Help() string {
|
|
return `Usage: bor debug
|
|
|
|
Build an archive containing Bor pprof traces
|
|
|
|
` + d.Flags().Help()
|
|
}
|
|
|
|
func (d *DebugPprofCommand) Flags() *flagset.Flagset {
|
|
flags := d.NewFlagSet("debug")
|
|
|
|
flags.Uint64Flag(&flagset.Uint64Flag{
|
|
Name: "seconds",
|
|
Usage: "seconds to trace",
|
|
Value: &d.seconds,
|
|
Default: 2,
|
|
})
|
|
flags.StringFlag(&flagset.StringFlag{
|
|
Name: "output",
|
|
Value: &d.output,
|
|
Usage: "Output directory",
|
|
})
|
|
|
|
return flags
|
|
}
|
|
|
|
// Synopsis implements the cli.Command interface
|
|
func (d *DebugPprofCommand) Synopsis() string {
|
|
return "Build an archive containing Bor pprof traces"
|
|
}
|
|
|
|
// Run implements the cli.Command interface
|
|
func (d *DebugPprofCommand) Run(args []string) int {
|
|
flags := d.Flags()
|
|
if err := flags.Parse(args); err != nil {
|
|
d.UI.Error(err.Error())
|
|
return 1
|
|
}
|
|
|
|
clt, err := d.BorConn()
|
|
if err != nil {
|
|
d.UI.Error(err.Error())
|
|
return 1
|
|
}
|
|
|
|
dEnv := &debugEnv{
|
|
output: d.output,
|
|
prefix: "bor-debug-",
|
|
}
|
|
if err := dEnv.init(); err != nil {
|
|
d.UI.Error(err.Error())
|
|
return 1
|
|
}
|
|
|
|
d.UI.Output("Starting debugger...")
|
|
d.UI.Output("")
|
|
|
|
pprofProfile := func(ctx context.Context, profile string, filename string) error {
|
|
req := &proto.DebugPprofRequest{
|
|
Seconds: int64(d.seconds),
|
|
}
|
|
|
|
switch profile {
|
|
case "cpu":
|
|
req.Type = proto.DebugPprofRequest_CPU
|
|
case "trace":
|
|
req.Type = proto.DebugPprofRequest_TRACE
|
|
default:
|
|
req.Type = proto.DebugPprofRequest_LOOKUP
|
|
req.Profile = profile
|
|
}
|
|
|
|
stream, err := clt.DebugPprof(ctx, req, grpc.MaxCallRecvMsgSize(1024*1024*1024))
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := dEnv.writeFromStream(filename+".prof", stream); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
ctx, cancelFn := context.WithCancel(context.Background())
|
|
trapSignal(cancelFn)
|
|
|
|
profiles := map[string]string{
|
|
"heap": "heap",
|
|
"cpu": "cpu",
|
|
"trace": "trace",
|
|
}
|
|
for profile, filename := range profiles {
|
|
if err := pprofProfile(ctx, profile, filename); err != nil {
|
|
d.UI.Error(fmt.Sprintf("Error creating profile '%s': %v", profile, err))
|
|
return 1
|
|
}
|
|
}
|
|
|
|
// append the status
|
|
{
|
|
statusResp, err := clt.Status(ctx, &empty.Empty{})
|
|
if err != nil {
|
|
d.UI.Output(fmt.Sprintf("Failed to get status: %v", err))
|
|
return 1
|
|
}
|
|
if err := dEnv.writeJSON("status.json", statusResp); err != nil {
|
|
d.UI.Error(err.Error())
|
|
return 1
|
|
}
|
|
}
|
|
|
|
if err := dEnv.finish(); err != nil {
|
|
d.UI.Error(err.Error())
|
|
return 1
|
|
}
|
|
|
|
if d.output != "" {
|
|
d.UI.Output(fmt.Sprintf("Created debug directory: %s", dEnv.dst))
|
|
} else {
|
|
d.UI.Output(fmt.Sprintf("Created debug archive: %s", dEnv.tarName()))
|
|
}
|
|
|
|
return 0
|
|
}
|