Address review comments

This commit is contained in:
Fridrik Asmundsson 2023-05-10 17:36:15 -04:00
parent 4b0ca30daf
commit b563a36a99

View File

@ -33,7 +33,7 @@ This benchmark has the following features:
To use this benchmark you must specify the rpc methods you want to test using the --method options, the format of it is: To use this benchmark you must specify the rpc methods you want to test using the --method options, the format of it is:
--method=NAME[:CONCURRENCY][:QPS][:PARAMS] where only METHOD is required. --method=NAME[:CONCURRENCY][:QPS][:PARAMS] where only NAME is required.
Here are some real examples: Here are some real examples:
lotus-bench rpc --method='eth_chainId' // run eth_chainId with default concurrency and qps lotus-bench rpc --method='eth_chainId' // run eth_chainId with default concurrency and qps
@ -86,7 +86,7 @@ Here are some real examples:
var rpcMethods []*RPCMethod var rpcMethods []*RPCMethod
for _, str := range cctx.StringSlice("method") { for _, str := range cctx.StringSlice("method") {
entries := strings.Split(str, ":") entries := strings.SplitN(str, ":", 4)
if len(entries) == 0 { if len(entries) == 0 {
return errors.New("invalid method format") return errors.New("invalid method format")
} }
@ -118,25 +118,7 @@ Here are some real examples:
// check if params was specified // check if params was specified
params := "[]" params := "[]"
if len(entries) > 3 { if len(entries) > 3 {
// the params are everything after the 3rd ':' character in str. Since params can itself params = entries[3]
// contain the ':' characters we can't just split on ':', so instead we need to locate the
// index of the 3rd ':' character and then take everything after that
occur := 0
idx := -1
for i := 0; i < len(str); i++ {
if str[i] == ':' {
occur++
if occur == 3 {
idx = i
break
}
}
}
if idx == -1 {
log.Fatalf("could not parse the params from method %s", entries[0])
}
params = str[idx+1:]
} }
rpcMethods = append(rpcMethods, &RPCMethod{ rpcMethods = append(rpcMethods, &RPCMethod{
@ -175,19 +157,19 @@ Here are some real examples:
for _, e := range rpcMethods { for _, e := range rpcMethods {
go func(e *RPCMethod) { go func(e *RPCMethod) {
defer wg.Done()
err := e.Run() err := e.Run()
if err != nil { if err != nil {
fmt.Printf("error running rpc method: %v\n", err) fmt.Printf("error running rpc method: %v\n", err)
} }
wg.Done()
}(e) }(e)
} }
// if watch is set then print a report every N seconds // if watch is set then print a report every N seconds
var progressCh chan bool var progressCh chan struct{}
if cctx.Duration("watch") > 0 { if cctx.Duration("watch") > 0 {
progressCh = make(chan bool, 1) progressCh = make(chan struct{}, 1)
go func(progressCh chan bool) { go func(progressCh chan struct{}) {
ticker := time.NewTicker(cctx.Duration("watch")) ticker := time.NewTicker(cctx.Duration("watch"))
for { for {
clearAndPrintReport := func() { clearAndPrintReport := func() {
@ -216,7 +198,7 @@ Here are some real examples:
if progressCh != nil { if progressCh != nil {
// wait for the watch go routine to return // wait for the watch go routine to return
progressCh <- true progressCh <- struct{}{}
// no need to print the report again // no need to print the report again
return nil return nil