diff options
author | lhendre <lhendre2@gmail.com> | 2019-01-30 15:40:36 +0800 |
---|---|---|
committer | Martin Holst Swende <martin@swende.se> | 2019-01-30 15:40:36 +0800 |
commit | d88441025fe58de094a89947cb17b54c36f5487b (patch) | |
tree | 32465e420687f377caad9acac883a85774edba60 /cmd | |
parent | f4094d09cd3bf4c1420f358d77b803d5d84d0994 (diff) | |
download | go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.tar go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.tar.gz go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.tar.bz2 go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.tar.lz go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.tar.xz go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.tar.zst go-tangerine-d88441025fe58de094a89947cb17b54c36f5487b.zip |
cmd,eth: 16400 Add an option to stop geth once in sync. WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/geth/main.go | 29 | ||||
-rw-r--r-- | cmd/geth/usage.go | 1 | ||||
-rw-r--r-- | cmd/utils/flags.go | 5 |
3 files changed, 34 insertions, 1 deletions
diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 77c04ff36..0d9f733de 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -31,8 +31,10 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/console" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/internal/debug" "github.com/ethereum/go-ethereum/log" @@ -87,6 +89,7 @@ var ( utils.ULCTrustedNodesFlag, utils.ULCMinTrustedFractionFlag, utils.SyncModeFlag, + utils.ExitWhenSyncedFlag, utils.GCModeFlag, utils.LightServFlag, utils.LightPeersFlag, @@ -339,6 +342,32 @@ func startNode(ctx *cli.Context, stack *node.Node) { } } }() + + // Spawn a standalone goroutine for status synchronization monitoring, + // close the node when synchronization is complete if user required. + if ctx.GlobalBool(utils.ExitWhenSyncedFlag.Name) { + go func() { + sub := stack.EventMux().Subscribe(downloader.DoneEvent{}) + defer sub.Unsubscribe() + for { + event := <-sub.Chan() + if event == nil { + continue + } + done, ok := event.Data.(downloader.DoneEvent) + if !ok { + continue + } + if timestamp := time.Unix(done.Latest.Time.Int64(), 0); time.Since(timestamp) < 10*time.Minute { + log.Info("Synchronisation completed", "latestnum", done.Latest.Number, "latesthash", done.Latest.Hash(), + "age", common.PrettyAge(timestamp)) + stack.Stop() + } + + } + }() + } + // Start auxiliary services if enabled if ctx.GlobalBool(utils.MiningEnabledFlag.Name) || ctx.GlobalBool(utils.DeveloperFlag.Name) { // Mining only makes sense if a full Ethereum node is running diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index de2a3d073..a19ad1094 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -75,6 +75,7 @@ var AppHelpFlagGroups = []flagGroup{ utils.TestnetFlag, utils.RinkebyFlag, utils.SyncModeFlag, + utils.ExitWhenSyncedFlag, utils.GCModeFlag, utils.EthStatsURLFlag, utils.IdentityFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 3109bf962..1d8c7f378 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -162,6 +162,10 @@ var ( Usage: "Document Root for HTTPClient file scheme", Value: DirectoryString{homeDir()}, } + ExitWhenSyncedFlag = cli.BoolFlag{ + Name: "exitwhensynced", + Usage: "Exists syncing after block synchronisation", + } ULCModeConfigFlag = cli.StringFlag{ Name: "ulc.config", Usage: "Config file to use for ultra light client mode", @@ -178,7 +182,6 @@ var ( Name: "ulc.trusted", Usage: "List of trusted ULC servers", } - defaultSyncMode = eth.DefaultConfig.SyncMode SyncModeFlag = TextMarshalerFlag{ Name: "syncmode", |