aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorlhendre <lhendre2@gmail.com>2019-01-30 15:40:36 +0800
committerMartin Holst Swende <martin@swende.se>2019-01-30 15:40:36 +0800
commitd88441025fe58de094a89947cb17b54c36f5487b (patch)
tree32465e420687f377caad9acac883a85774edba60 /cmd
parentf4094d09cd3bf4c1420f358d77b803d5d84d0994 (diff)
downloadgo-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.go29
-rw-r--r--cmd/geth/usage.go1
-rw-r--r--cmd/utils/flags.go5
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",