Add Flag For Minimum Handshakes (#4280)

* add flag
* jim and preston's review
* check max peers
* gaz
* Merge branch 'master' of https://github.com/prysmaticlabs/geth-sharding into minStatusCount
* remove space
* add references
* add warning log
* change log
* gaz
This commit is contained in:
Nishant Das
2019-12-13 23:12:49 +08:00
committed by prylabs-bulldozer[bot]
parent a5881f924f
commit c5dcf49ded
7 changed files with 33 additions and 4 deletions

View File

@@ -10,5 +10,9 @@ go_library(
],
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/flags",
visibility = ["//beacon-chain:__subpackages__"],
deps = ["@com_github_urfave_cli//:go_default_library"],
deps = [
"//shared/cmd:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_urfave_cli//:go_default_library",
],
)

View File

@@ -48,4 +48,12 @@ var (
Name: "grpc-gateway-port",
Usage: "Enable gRPC gateway for JSON requests",
}
// MinSyncPeers specifies the required number of successful peer handshakes in order
// to start syncing with external peers.
MinSyncPeers = cli.IntFlag{
Name: "min-sync-peers",
Usage: "The required number of valid peers to connect with before syncing.",
Value: 3,
}
)

View File

@@ -1,6 +1,8 @@
package flags
import (
"github.com/prysmaticlabs/prysm/shared/cmd"
log "github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
@@ -11,6 +13,7 @@ type GlobalFlags struct {
EnableArchivedValidatorSetChanges bool
EnableArchivedBlocks bool
EnableArchivedAttestations bool
MinimumSyncPeers int
}
var globalConfig *GlobalFlags
@@ -44,5 +47,16 @@ func ConfigureGlobalFlags(ctx *cli.Context) {
if ctx.GlobalBool(ArchiveAttestationsFlag.Name) {
cfg.EnableArchivedAttestations = true
}
configureMinimumPeers(ctx, cfg)
Init(cfg)
}
func configureMinimumPeers(ctx *cli.Context, cfg *GlobalFlags) {
cfg.MinimumSyncPeers = ctx.GlobalInt(MinSyncPeers.Name)
maxPeers := int(ctx.GlobalInt64(cmd.P2PMaxPeers.Name))
if cfg.MinimumSyncPeers > maxPeers {
log.Warnf("Changing Minimum Sync Peers to %d", maxPeers)
cfg.MinimumSyncPeers = maxPeers
}
}

View File

@@ -32,6 +32,7 @@ var appFlags = []cli.Flag{
flags.CertFlag,
flags.KeyFlag,
flags.GRPCGatewayPort,
flags.MinSyncPeers,
flags.InteropMockEth1DataVotesFlag,
flags.InteropGenesisStateFlag,
flags.InteropNumValidatorsFlag,

View File

@@ -15,6 +15,7 @@ go_library(
"//beacon-chain/core/feed/state:go_default_library",
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/db:go_default_library",
"//beacon-chain/flags:go_default_library",
"//beacon-chain/p2p:go_default_library",
"//beacon-chain/sync:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",

View File

@@ -11,6 +11,7 @@ import (
statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/db"
"github.com/prysmaticlabs/prysm/beacon-chain/flags"
"github.com/prysmaticlabs/prysm/beacon-chain/p2p"
"github.com/prysmaticlabs/prysm/shared"
"github.com/prysmaticlabs/prysm/shared/params"
@@ -25,7 +26,6 @@ type blockchainService interface {
}
const (
minStatusCount = 3 // TODO(3147): Set this to more than 3, maybe configure from flag?
handshakePollingInterval = 5 * time.Second // Polling interval for checking the number of received handshakes.
)
@@ -118,12 +118,12 @@ func (s *InitialSync) Start() {
// Every 5 sec, report handshake count.
for {
count := len(s.p2p.Peers().Connected())
if count >= minStatusCount {
if count >= flags.Get().MinimumSyncPeers {
break
}
log.WithField(
"handshakes",
fmt.Sprintf("%d/%d", count, minStatusCount),
fmt.Sprintf("%d/%d", count, flags.Get().MinimumSyncPeers),
).Info("Waiting for enough peer handshakes before syncing")
time.Sleep(handshakePollingInterval)
}

View File

@@ -98,6 +98,7 @@ var appHelpFlagGroups = []flagGroup{
cmd.StaticPeers,
cmd.EnableUPnPFlag,
cmd.P2PEncoding,
flags.MinSyncPeers,
},
},
{