mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26: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>
210 lines
5.2 KiB
Go
210 lines
5.2 KiB
Go
// Copyright 2019 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 rpc
|
|
|
|
import (
|
|
"context"
|
|
"encoding/binary"
|
|
"errors"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
func newTestServer() *Server {
|
|
server := NewServer(0, 0)
|
|
server.idgen = sequentialIDGenerator()
|
|
if err := server.RegisterName("test", new(testService)); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := server.RegisterName("nftest", new(notificationTestService)); err != nil {
|
|
panic(err)
|
|
}
|
|
return server
|
|
}
|
|
|
|
func sequentialIDGenerator() func() ID {
|
|
var (
|
|
mu sync.Mutex
|
|
counter uint64
|
|
)
|
|
return func() ID {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
counter++
|
|
id := make([]byte, 8)
|
|
binary.BigEndian.PutUint64(id, counter)
|
|
return encodeID(id)
|
|
}
|
|
}
|
|
|
|
type testService struct{}
|
|
|
|
type echoArgs struct {
|
|
S string
|
|
}
|
|
|
|
type echoResult struct {
|
|
String string
|
|
Int int
|
|
Args *echoArgs
|
|
}
|
|
|
|
type testError struct{}
|
|
|
|
func (testError) Error() string { return "testError" }
|
|
func (testError) ErrorCode() int { return 444 }
|
|
func (testError) ErrorData() interface{} { return "testError data" }
|
|
|
|
func (s *testService) NoArgsRets() {}
|
|
|
|
func (s *testService) Echo(str string, i int, args *echoArgs) echoResult {
|
|
return echoResult{str, i, args}
|
|
}
|
|
|
|
func (s *testService) EchoWithCtx(ctx context.Context, str string, i int, args *echoArgs) echoResult {
|
|
return echoResult{str, i, args}
|
|
}
|
|
|
|
func (s *testService) PeerInfo(ctx context.Context) PeerInfo {
|
|
return PeerInfoFromContext(ctx)
|
|
}
|
|
|
|
func (s *testService) Sleep(ctx context.Context, duration time.Duration) {
|
|
time.Sleep(duration)
|
|
}
|
|
|
|
func (s *testService) Block(ctx context.Context) error {
|
|
<-ctx.Done()
|
|
return errors.New("context canceled in testservice_block")
|
|
}
|
|
|
|
func (s *testService) Rets() (string, error) {
|
|
return "", nil
|
|
}
|
|
|
|
//lint:ignore ST1008 returns error first on purpose.
|
|
func (s *testService) InvalidRets1() (error, string) {
|
|
return nil, ""
|
|
}
|
|
|
|
func (s *testService) InvalidRets2() (string, string) {
|
|
return "", ""
|
|
}
|
|
|
|
func (s *testService) InvalidRets3() (string, string, error) {
|
|
return "", "", nil
|
|
}
|
|
|
|
func (s *testService) ReturnError() error {
|
|
return testError{}
|
|
}
|
|
|
|
func (s *testService) CallMeBack(ctx context.Context, method string, args []interface{}) (interface{}, error) {
|
|
c, ok := ClientFromContext(ctx)
|
|
if !ok {
|
|
return nil, errors.New("no client")
|
|
}
|
|
var result interface{}
|
|
err := c.Call(&result, method, args...)
|
|
return result, err
|
|
}
|
|
|
|
func (s *testService) CallMeBackLater(ctx context.Context, method string, args []interface{}) error {
|
|
c, ok := ClientFromContext(ctx)
|
|
if !ok {
|
|
return errors.New("no client")
|
|
}
|
|
go func() {
|
|
<-ctx.Done()
|
|
var result interface{}
|
|
c.Call(&result, method, args...)
|
|
}()
|
|
return nil
|
|
}
|
|
|
|
func (s *testService) Subscription(ctx context.Context) (*Subscription, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
type notificationTestService struct {
|
|
unsubscribed chan string
|
|
gotHangSubscriptionReq chan struct{}
|
|
unblockHangSubscription chan struct{}
|
|
}
|
|
|
|
func (s *notificationTestService) Echo(i int) int {
|
|
return i
|
|
}
|
|
|
|
func (s *notificationTestService) Unsubscribe(subid string) {
|
|
if s.unsubscribed != nil {
|
|
s.unsubscribed <- subid
|
|
}
|
|
}
|
|
|
|
func (s *notificationTestService) SomeSubscription(ctx context.Context, n, val int) (*Subscription, error) {
|
|
notifier, supported := NotifierFromContext(ctx)
|
|
if !supported {
|
|
return nil, ErrNotificationsUnsupported
|
|
}
|
|
|
|
// By explicitly creating an subscription we make sure that the subscription id is send
|
|
// back to the client before the first subscription.Notify is called. Otherwise the
|
|
// events might be send before the response for the *_subscribe method.
|
|
subscription := notifier.CreateSubscription()
|
|
go func() {
|
|
for i := 0; i < n; i++ {
|
|
if err := notifier.Notify(subscription.ID, val+i); err != nil {
|
|
return
|
|
}
|
|
}
|
|
select {
|
|
case <-notifier.Closed():
|
|
case <-subscription.Err():
|
|
}
|
|
if s.unsubscribed != nil {
|
|
s.unsubscribed <- string(subscription.ID)
|
|
}
|
|
}()
|
|
return subscription, nil
|
|
}
|
|
|
|
// HangSubscription blocks on s.unblockHangSubscription before sending anything.
|
|
func (s *notificationTestService) HangSubscription(ctx context.Context, val int) (*Subscription, error) {
|
|
notifier, supported := NotifierFromContext(ctx)
|
|
if !supported {
|
|
return nil, ErrNotificationsUnsupported
|
|
}
|
|
s.gotHangSubscriptionReq <- struct{}{}
|
|
<-s.unblockHangSubscription
|
|
subscription := notifier.CreateSubscription()
|
|
|
|
go func() {
|
|
notifier.Notify(subscription.ID, val)
|
|
}()
|
|
return subscription, nil
|
|
}
|
|
|
|
// largeRespService generates arbitrary-size JSON responses.
|
|
type largeRespService struct {
|
|
length int
|
|
}
|
|
|
|
func (x largeRespService) LargeResp() string {
|
|
return strings.Repeat("x", x.length)
|
|
}
|