torrent: add --webseeds cli arg (#8176)

This commit is contained in:
Alex Sharov 2023-09-12 12:18:47 +07:00 committed by GitHub
parent 13f782cef7
commit 3cea1b9b9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 87 additions and 86 deletions

View File

@ -19,6 +19,7 @@ package main
import (
"encoding/json"
"fmt"
"github.com/ledgerwatch/erigon-lib/common"
"io"
"os"
"path/filepath"
@ -180,7 +181,7 @@ func abigen(c *cli.Context) error {
} else {
// Generate the list of types to exclude from binding
exclude := make(map[string]bool)
for _, kind := range utils.SplitAndTrim(c.String(excFlag.Name)) {
for _, kind := range common.CliString2Array(c.String(excFlag.Name)) {
exclude[strings.ToLower(kind)] = true
}
var err error

View File

@ -1,12 +1,13 @@
package downloadernat
import (
"github.com/ledgerwatch/erigon-lib/downloader/downloadercfg"
"github.com/anacrolix/torrent"
"github.com/ledgerwatch/erigon/p2p/nat"
"github.com/ledgerwatch/log/v3"
)
func DoNat(natif nat.Interface, cfg *downloadercfg.Cfg, logger log.Logger) {
// DoNat can mutate `cfg` parameter
func DoNat(natif nat.Interface, cfg *torrent.ClientConfig, logger log.Logger) {
switch natif.(type) {
case nil:
// No NAT interface, do nothing.

View File

@ -4,6 +4,8 @@ import (
"context"
"errors"
"fmt"
"github.com/ledgerwatch/log/v3"
"github.com/pelletier/go-toml"
"net"
"os"
"path/filepath"
@ -25,8 +27,6 @@ import (
"github.com/ledgerwatch/erigon/params"
"github.com/ledgerwatch/erigon/turbo/debug"
"github.com/ledgerwatch/erigon/turbo/logging"
"github.com/ledgerwatch/log/v3"
"github.com/pelletier/go-toml/v2"
"github.com/spf13/cobra"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
@ -37,7 +37,9 @@ import (
)
var (
webseeds string
datadirCli string
filePath string
forceRebuild bool
forceVerify bool
downloaderApiAddr string
@ -58,7 +60,7 @@ func init() {
utils.CobraFlags(rootCmd, debug.Flags, utils.MetricFlags, logging.Flags)
withDataDir(rootCmd)
rootCmd.Flags().StringVar(&webseeds, utils.WebSeedsFlag.Name, utils.WebSeedsFlag.Value, utils.WebSeedsFlag.Usage)
rootCmd.Flags().StringVar(&natSetting, "nat", utils.NATFlag.Value, utils.NATFlag.Usage)
rootCmd.Flags().StringVar(&downloaderApiAddr, "downloader.api.addr", "127.0.0.1:9093", "external downloader api network address, for example: 127.0.0.1:9093 serves remote downloader interface")
rootCmd.Flags().StringVar(&downloadRateStr, "torrent.download.rate", utils.TorrentDownloadRateFlag.Value, utils.TorrentDownloadRateFlag.Usage)
@ -73,6 +75,9 @@ func init() {
rootCmd.Flags().BoolVar(&disableIPV4, "downloader.disable.ipv4", utils.DisableIPV4.Value, utils.DisableIPV6.Usage)
rootCmd.PersistentFlags().BoolVar(&forceVerify, "verify", false, "Force verify data files if have .torrent files")
withDataDir(createTorrent)
withFile(createTorrent)
withDataDir(printTorrentHashes)
printTorrentHashes.PersistentFlags().BoolVar(&forceRebuild, "rebuild", false, "Force re-create .torrent files")
printTorrentHashes.Flags().StringVar(&targetFile, "targetfile", "", "write output to file")
@ -80,6 +85,7 @@ func init() {
panic(err)
}
rootCmd.AddCommand(createTorrent)
rootCmd.AddCommand(printTorrentHashes)
}
@ -89,6 +95,12 @@ func withDataDir(cmd *cobra.Command) {
panic(err)
}
}
func withFile(cmd *cobra.Command) {
cmd.Flags().StringVar(&filePath, "file", "", "")
if err := cmd.MarkFlagFilename(utils.DataDirFlag.Name); err != nil {
panic(err)
}
}
func main() {
ctx, cancel := common.RootContext()
@ -138,10 +150,10 @@ func Downloader(ctx context.Context, logger log.Logger) error {
if err != nil {
return fmt.Errorf("invalid nat option %s: %w", natSetting, err)
}
staticPeers := utils.SplitAndTrim(staticPeersStr)
staticPeers := common.CliString2Array(staticPeersStr)
version := "erigon: " + params.VersionWithCommit(params.GitCommit)
cfg, err := downloadercfg2.New(dirs.Snap, version, torrentLogLevel, downloadRate, uploadRate, torrentPort, torrentConnsPerFile, torrentDownloadSlots, staticPeers)
cfg, err := downloadercfg2.New(dirs, version, torrentLogLevel, downloadRate, uploadRate, torrentPort, torrentConnsPerFile, torrentDownloadSlots, staticPeers, webseeds)
if err != nil {
return err
}
@ -149,7 +161,7 @@ func Downloader(ctx context.Context, logger log.Logger) error {
cfg.ClientConfig.DisableIPv6 = disableIPV6
cfg.ClientConfig.DisableIPv4 = disableIPV4
downloadernat.DoNat(natif, cfg, logger)
downloadernat.DoNat(natif, cfg.ClientConfig, logger)
d, err := downloader.New(ctx, cfg)
if err != nil {
@ -181,6 +193,30 @@ func Downloader(ctx context.Context, logger log.Logger) error {
return nil
}
var createTorrent = &cobra.Command{
Use: "torrent_create",
Example: "go run ./cmd/downloader torrent_create --datadir=<your_datadir> --file=<file_path>",
RunE: func(cmd *cobra.Command, args []string) error {
//logger := debug.SetupCobra(cmd, "integration")
//dirs := datadir.New(datadirCli)
//ctx := cmd.Context()
fileDir, fileName := filepath.Split(filePath)
info := &metainfo.Info{PieceLength: downloadercfg2.DefaultPieceSize, Name: fileName}
if err := info.BuildFromFilePath(filePath); err != nil {
return err
}
mi, err := downloader.CreateMetaInfo(info, nil)
if err != nil {
return err
}
if err := downloader.CreateTorrentFromMetaInfo(fileDir, info, mi); err != nil {
return err
}
return nil
},
}
var printTorrentHashes = &cobra.Command{
Use: "torrent_hashes",
Example: "go run ./cmd/downloader torrent_hashes --datadir <your_datadir>",
@ -250,15 +286,6 @@ var printTorrentHashes = &cobra.Command{
},
}
// nolint
func removePieceCompletionStorage(snapDir string) {
_ = os.RemoveAll(filepath.Join(snapDir, "db"))
_ = os.RemoveAll(filepath.Join(snapDir, ".torrent.db"))
_ = os.RemoveAll(filepath.Join(snapDir, ".torrent.bolt.db"))
_ = os.RemoveAll(filepath.Join(snapDir, ".torrent.db-shm"))
_ = os.RemoveAll(filepath.Join(snapDir, ".torrent.db-wal"))
}
func StartGrpc(snServer *downloader.GrpcServer, addr string, creds *credentials.TransportCredentials, logger log.Logger) (*grpc.Server, error) {
lis, err := net.Listen("tcp", addr)
if err != nil {

View File

@ -5,11 +5,11 @@ import (
"database/sql"
"errors"
"fmt"
"github.com/ledgerwatch/erigon-lib/common"
"net"
"strings"
"time"
"github.com/ledgerwatch/erigon/cmd/utils"
_ "modernc.org/sqlite"
)
@ -709,7 +709,7 @@ func (db *DBSQLite) FindNeighborBucketKeys(ctx context.Context, id NodeID) ([]st
if !keysStr.Valid {
return nil, nil
}
return utils.SplitAndTrim(keysStr.String), nil
return common.CliString2Array(keysStr.String), nil
}
func (db *DBSQLite) UpdateSentryCandidatesLastEventTime(ctx context.Context, value time.Time) error {

View File

@ -39,12 +39,12 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/ledgerwatch/erigon-lib/common"
"io"
"os"
"strings"
"text/tabwriter"
"github.com/ledgerwatch/erigon/cmd/utils"
"github.com/ledgerwatch/erigon/turbo/logging"
"github.com/urfave/cli/v2"
@ -292,7 +292,7 @@ func createNode(ctx *cli.Context) error {
config.PrivateKey = privKey
}
if services := ctx.String("services"); services != "" {
config.Lifecycles = utils.SplitAndTrim(services)
config.Lifecycles = common.CliString2Array(services)
}
node, err := client.CreateNode(config)
if err != nil {

View File

@ -3,6 +3,7 @@ package cli
import (
"errors"
"fmt"
common2 "github.com/ledgerwatch/erigon-lib/common"
"os"
"strings"
"time"
@ -132,10 +133,10 @@ func SetupConsensusClientCfg(ctx *cli.Context) (*ConsensusClientCliCfg, error) {
cfg.BeaconDataCfg = rawdb.BeaconDataConfigurations[ctx.String(flags.BeaconDBModeFlag.Name)]
// Process bootnodes
if ctx.String(flags.BootnodesFlag.Name) != "" {
cfg.NetworkCfg.BootNodes = utils.SplitAndTrim(ctx.String(flags.BootnodesFlag.Name))
cfg.NetworkCfg.BootNodes = common2.CliString2Array(ctx.String(flags.BootnodesFlag.Name))
}
if ctx.String(flags.SentinelStaticPeersFlag.Name) != "" {
cfg.NetworkCfg.StaticPeers = utils.SplitAndTrim(ctx.String(flags.SentinelStaticPeersFlag.Name))
cfg.NetworkCfg.StaticPeers = common2.CliString2Array(ctx.String(flags.SentinelStaticPeersFlag.Name))
fmt.Println(cfg.NetworkCfg.StaticPeers)
}
cfg.TransitionChain = ctx.Bool(flags.TransitionChainFlag.Name)

View File

@ -736,6 +736,11 @@ var (
Usage: "URL of Heimdall service",
Value: "http://localhost:1317",
}
WebSeedsFlag = cli.StringFlag{
Name: "webseeds",
Usage: "comma-separated URL's, holding metadata about network-support infrastructure (like S3 buckets with snapshots, bootnodes, etc...)",
Value: "",
}
// WithoutHeimdallFlag no heimdall (for testing purpose)
WithoutHeimdallFlag = cli.BoolFlag{
@ -861,7 +866,7 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) {
func GetBootnodesFromFlags(urlsStr, chain string) ([]*enode.Node, error) {
var urls []string
if urlsStr != "" {
urls = SplitAndTrim(urlsStr)
urls = libcommon.CliString2Array(urlsStr)
} else {
urls = params.BootnodeURLsOfChain(chain)
}
@ -871,7 +876,7 @@ func GetBootnodesFromFlags(urlsStr, chain string) ([]*enode.Node, error) {
func setStaticPeers(ctx *cli.Context, cfg *p2p.Config) {
var urls []string
if ctx.IsSet(StaticPeersFlag.Name) {
urls = SplitAndTrim(ctx.String(StaticPeersFlag.Name))
urls = libcommon.CliString2Array(ctx.String(StaticPeersFlag.Name))
} else {
chain := ctx.String(ChainFlag.Name)
urls = params.StaticPeerURLsOfChain(chain)
@ -890,7 +895,7 @@ func setTrustedPeers(ctx *cli.Context, cfg *p2p.Config) {
return
}
urls := SplitAndTrim(ctx.String(TrustedPeersFlag.Name))
urls := libcommon.CliString2Array(ctx.String(TrustedPeersFlag.Name))
trustedNodes, err := ParseNodesFromURLs(urls)
if err != nil {
Fatalf("Option %s: %v", TrustedPeersFlag.Name, err)
@ -1005,7 +1010,7 @@ func setListenAddress(ctx *cli.Context, cfg *p2p.Config) {
cfg.ProtocolVersion = ctx.UintSlice(P2pProtocolVersionFlag.Name)
}
if ctx.IsSet(SentryAddrFlag.Name) {
cfg.SentryAddr = SplitAndTrim(ctx.String(SentryAddrFlag.Name))
cfg.SentryAddr = libcommon.CliString2Array(ctx.String(SentryAddrFlag.Name))
}
// TODO cli lib doesn't store defaults for UintSlice properly so we have to get value directly
cfg.AllowedPorts = P2pProtocolAllowedPorts.Value.Value()
@ -1040,18 +1045,6 @@ func setNAT(ctx *cli.Context, cfg *p2p.Config) {
}
}
// SplitAndTrim splits input separated by a comma
// and trims excessive white space from the substrings.
func SplitAndTrim(input string) (ret []string) {
l := strings.Split(input, ",")
for _, r := range l {
if r = strings.TrimSpace(r); r != "" {
ret = append(ret, r)
}
}
return ret
}
// setEtherbase retrieves the etherbase from the directly specified
// command line flags.
func setEtherbase(ctx *cli.Context, cfg *ethconfig.Config) {
@ -1232,7 +1225,7 @@ func setTxPool(ctx *cli.Context, fullCfg *ethconfig.Config) {
cfg.Disable = true
}
if ctx.IsSet(TxPoolLocalsFlag.Name) {
locals := SplitAndTrim(ctx.String(TxPoolLocalsFlag.Name))
locals := libcommon.CliString2Array(ctx.String(TxPoolLocalsFlag.Name))
for _, account := range locals {
if !libcommon.IsHexAddress(account) {
Fatalf("Invalid account in --txpool.locals: %s", account)
@ -1270,7 +1263,7 @@ func setTxPool(ctx *cli.Context, fullCfg *ethconfig.Config) {
}
if ctx.IsSet(TxPoolTraceSendersFlag.Name) {
// Parse the command separated flag
senderHexes := SplitAndTrim(ctx.String(TxPoolTraceSendersFlag.Name))
senderHexes := libcommon.CliString2Array(ctx.String(TxPoolTraceSendersFlag.Name))
cfg.TracedSenders = make([]string, len(senderHexes))
for i, senderHex := range senderHexes {
sender := libcommon.HexToAddress(senderHex)
@ -1379,7 +1372,7 @@ func setMiner(ctx *cli.Context, cfg *params.MiningConfig) {
panic(fmt.Sprintf("Erigon supports only remote miners. Flag --%s or --%s is required", MinerNotifyFlag.Name, MinerSigningKeyFileFlag.Name))
}
if ctx.IsSet(MinerNotifyFlag.Name) {
cfg.Notify = SplitAndTrim(ctx.String(MinerNotifyFlag.Name))
cfg.Notify = libcommon.CliString2Array(ctx.String(MinerNotifyFlag.Name))
}
if ctx.IsSet(MinerExtraDataFlag.Name) {
cfg.ExtraData = []byte(ctx.String(MinerExtraDataFlag.Name))
@ -1404,7 +1397,7 @@ func setWhitelist(ctx *cli.Context, cfg *ethconfig.Config) {
return
}
cfg.Whitelist = make(map[uint64]libcommon.Hash)
for _, entry := range SplitAndTrim(whitelist) {
for _, entry := range libcommon.CliString2Array(whitelist) {
parts := strings.Split(entry, "=")
if len(parts) != 2 {
Fatalf("Invalid whitelist entry: %s", entry)
@ -1498,11 +1491,11 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C
}
logger.Info("torrent verbosity", "level", lvl.LogString())
version := "erigon: " + params.VersionWithCommit(params.GitCommit)
cfg.Downloader, err = downloadercfg2.New(cfg.Dirs.Snap, version, lvl, downloadRate, uploadRate, ctx.Int(TorrentPortFlag.Name), ctx.Int(TorrentConnsPerFileFlag.Name), ctx.Int(TorrentDownloadSlotsFlag.Name), ctx.StringSlice(TorrentDownloadSlotsFlag.Name))
cfg.Downloader, err = downloadercfg2.New(cfg.Dirs, version, lvl, downloadRate, uploadRate, ctx.Int(TorrentPortFlag.Name), ctx.Int(TorrentConnsPerFileFlag.Name), ctx.Int(TorrentDownloadSlotsFlag.Name), ctx.StringSlice(TorrentDownloadSlotsFlag.Name), ctx.String(WebSeedsFlag.Name))
if err != nil {
panic(err)
}
downloadernat.DoNat(nodeConfig.P2P.NAT, cfg.Downloader, logger)
downloadernat.DoNat(nodeConfig.P2P.NAT, cfg.Downloader.ClientConfig, logger)
}
nodeConfig.Http.Snap = cfg.Snapshot
@ -1549,7 +1542,7 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C
if urls == "" {
cfg.EthDiscoveryURLs = []string{}
} else {
cfg.EthDiscoveryURLs = SplitAndTrim(urls)
cfg.EthDiscoveryURLs = libcommon.CliString2Array(urls)
}
}
// Override any default configs for hard coded networks.
@ -1619,7 +1612,7 @@ func SetDNSDiscoveryDefaults(cfg *ethconfig.Config, genesis libcommon.Hash) {
}
func SplitTagsFlag(tagsFlag string) map[string]string {
tags := SplitAndTrim(tagsFlag)
tags := libcommon.CliString2Array(tagsFlag)
tagsMap := map[string]string{}
for _, t := range tags {
@ -1635,17 +1628,6 @@ func SplitTagsFlag(tagsFlag string) map[string]string {
return tagsMap
}
// MakeConsolePreloads retrieves the absolute paths for the console JavaScript
// scripts to preload before starting.
func MakeConsolePreloads(ctx *cli.Context) []string {
// Skip preloading if there's nothing to preload
if ctx.String(PreloadJSFlag.Name) == "" {
return nil
}
// Otherwise resolve absolute paths and return them
return SplitAndTrim(ctx.String(PreloadJSFlag.Name))
}
func CobraFlags(cmd *cobra.Command, urfaveCliFlagsLists ...[]cli.Flag) {
flags := cmd.PersistentFlags()
for _, urfaveCliFlags := range urfaveCliFlagsLists {

2
go.mod
View File

@ -4,7 +4,7 @@ go 1.19
require (
github.com/erigontech/mdbx-go v0.27.14
github.com/ledgerwatch/erigon-lib v0.0.0-20230911023914-a17786143476
github.com/ledgerwatch/erigon-lib v0.0.0-20230912051720-c36f222fd6d0
github.com/ledgerwatch/erigon-snapshot v1.2.1-0.20230911054727-4e865b051314
github.com/ledgerwatch/log/v3 v3.9.0
github.com/ledgerwatch/secp256k1 v1.0.0

4
go.sum
View File

@ -499,8 +499,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3PYPwICLl+/9oulQauOuETfgFvhBDffs0=
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
github.com/ledgerwatch/erigon-lib v0.0.0-20230911023914-a17786143476 h1:fKbEGitRmRmI0H02MaEmnlqQLj3n7TlE6Beasma77yE=
github.com/ledgerwatch/erigon-lib v0.0.0-20230911023914-a17786143476/go.mod h1:Iy7Gah8RFSvAutIr3Unph+ttp/7TMXmXOByXk9sXE6A=
github.com/ledgerwatch/erigon-lib v0.0.0-20230912051720-c36f222fd6d0 h1:i7d9yBkUr0FxmvFqupc/wYNrs11mEwqowivqIFxUkxM=
github.com/ledgerwatch/erigon-lib v0.0.0-20230912051720-c36f222fd6d0/go.mod h1:DRy/PNMCuzakVJFE42OR9F3SARTLxlfK7R4JwP5u/5k=
github.com/ledgerwatch/erigon-snapshot v1.2.1-0.20230911054727-4e865b051314 h1:TeQoOW2o0rL5jF4ava+SlB8l0mhzM8ISnq81okJ790c=
github.com/ledgerwatch/erigon-snapshot v1.2.1-0.20230911054727-4e865b051314/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo=
github.com/ledgerwatch/log/v3 v3.9.0 h1:iDwrXe0PVwBC68Dd94YSsHbMgQ3ufsgjzXtFNFVZFRk=

View File

@ -19,6 +19,7 @@ package node
import (
"bytes"
"fmt"
"github.com/ledgerwatch/erigon-lib/common"
"io"
"net/http"
"net/url"
@ -86,20 +87,6 @@ type originTest struct {
expFail []string
}
// splitAndTrim splits input separated by a comma
// and trims excessive white space from the substrings.
// Copied over from flags.go
func splitAndTrim(input string) (ret []string) {
l := strings.Split(input, ",")
for _, r := range l {
r = strings.TrimSpace(r)
if len(r) > 0 {
ret = append(ret, r)
}
}
return ret
}
// TestWebsocketOrigins makes sure the websocket origins are properly handled on the websocket server.
func TestWebsocketOrigins(t *testing.T) {
tests := []originTest{
@ -165,7 +152,7 @@ func TestWebsocketOrigins(t *testing.T) {
},
}
for _, tc := range tests {
srv := createAndStartServer(t, &httpConfig{}, true, &wsConfig{Origins: splitAndTrim(tc.spec)})
srv := createAndStartServer(t, &httpConfig{}, true, &wsConfig{Origins: common.CliString2Array(tc.spec)})
url := fmt.Sprintf("ws://%v", srv.listenAddr())
for _, origin := range tc.expOk {
if err := wsRequest(t, url, origin); err != nil {

View File

@ -112,7 +112,7 @@ func InitMiner(genesis *types.Genesis, privKey *ecdsa.PrivateKey, withoutHeimdal
return nil, nil, err
}
downloaderConfig, err := downloadercfg.New(datadir.New(ddir).Snap, nodeCfg.Version, torrentLogLevel, downloadRate, uploadRate, utils.TorrentPortFlag.Value, utils.TorrentConnsPerFileFlag.Value, utils.TorrentDownloadSlotsFlag.Value, []string{})
downloaderConfig, err := downloadercfg.New(datadir.New(ddir), nodeCfg.Version, torrentLogLevel, downloadRate, uploadRate, utils.TorrentPortFlag.Value, utils.TorrentConnsPerFileFlag.Value, utils.TorrentDownloadSlotsFlag.Value, []string{}, "")
if err != nil {
return nil, nil, err
}
@ -147,7 +147,7 @@ func InitMiner(genesis *types.Genesis, privKey *ecdsa.PrivateKey, withoutHeimdal
ethCfg.TxPool.DBDir = nodeCfg.Dirs.TxPool
ethCfg.DeprecatedTxPool.CommitEvery = 15 * time.Second
ethCfg.DeprecatedTxPool.StartOnInit = true
ethCfg.Downloader.ListenPort = utils.TorrentPortFlag.Value + minerID
ethCfg.Downloader.ClientConfig.ListenPort = utils.TorrentPortFlag.Value + minerID
ethCfg.TxPool.AccountSlots = 1000000
ethCfg.DeprecatedTxPool.AccountSlots = 1000000
ethCfg.DeprecatedTxPool.GlobalSlots = 1000000

View File

@ -2,6 +2,7 @@ package app
import (
"fmt"
"github.com/ledgerwatch/erigon-lib/common"
"os"
"path/filepath"
@ -94,14 +95,14 @@ func doBackup(cliCtx *cli.Context) error {
var lables = []kv.Label{kv.ChainDB, kv.TxPoolDB, kv.DownloaderDB}
if cliCtx.IsSet(BackupToPageSizeFlag.Name) {
lables = lables[:0]
for _, l := range utils.SplitAndTrim(cliCtx.String(BackupLabelsFlag.Name)) {
for _, l := range common.CliString2Array(cliCtx.String(BackupLabelsFlag.Name)) {
lables = append(lables, kv.UnmarshalLabel(l))
}
}
var tables []string
if cliCtx.IsSet(BackupTablesFlag.Name) {
tables = utils.SplitAndTrim(cliCtx.String(BackupTablesFlag.Name))
tables = common.CliString2Array(cliCtx.String(BackupTablesFlag.Name))
}
readAheadThreads := backup.ReadAheadThreads

View File

@ -142,6 +142,7 @@ var DefaultFlags = []cli.Flag{
&utils.DownloaderVerifyFlag,
&HealthCheckFlag,
&utils.HeimdallURLFlag,
&utils.WebSeedsFlag,
&utils.WithoutHeimdallFlag,
&utils.HeimdallgRPCAddressFlag,
&utils.BorBlockPeriodFlag,

View File

@ -215,7 +215,7 @@ func ApplyFlagsForEthConfig(ctx *cli.Context, cfg *ethconfig.Config, logger log.
ctx.Uint64(PruneReceiptBeforeFlag.Name),
ctx.Uint64(PruneTxIndexBeforeFlag.Name),
ctx.Uint64(PruneCallTracesBeforeFlag.Name),
utils.SplitAndTrim(ctx.String(ExperimentsFlag.Name)),
libcommon.CliString2Array(ctx.String(ExperimentsFlag.Name)),
)
if err != nil {
utils.Fatalf(fmt.Sprintf("error while parsing mode: %v", err))
@ -370,10 +370,10 @@ func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *nodecfg.Config, logger log.Logg
AuthRpcPort: ctx.Int(utils.AuthRpcPort.Name),
JWTSecretPath: jwtSecretPath,
TraceRequests: ctx.Bool(utils.HTTPTraceFlag.Name),
HttpCORSDomain: utils.SplitAndTrim(ctx.String(utils.HTTPCORSDomainFlag.Name)),
HttpVirtualHost: utils.SplitAndTrim(ctx.String(utils.HTTPVirtualHostsFlag.Name)),
AuthRpcVirtualHost: utils.SplitAndTrim(ctx.String(utils.AuthRpcVirtualHostsFlag.Name)),
API: utils.SplitAndTrim(apis),
HttpCORSDomain: libcommon.CliString2Array(ctx.String(utils.HTTPCORSDomainFlag.Name)),
HttpVirtualHost: libcommon.CliString2Array(ctx.String(utils.HTTPVirtualHostsFlag.Name)),
AuthRpcVirtualHost: libcommon.CliString2Array(ctx.String(utils.AuthRpcVirtualHostsFlag.Name)),
API: libcommon.CliString2Array(apis),
HTTPTimeouts: rpccfg.HTTPTimeouts{
ReadTimeout: ctx.Duration(HTTPReadTimeoutFlag.Name),
WriteTimeout: ctx.Duration(HTTPWriteTimeoutFlag.Name),