diff options
author | zelig <viktor.tron@gmail.com> | 2015-09-22 16:34:58 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2015-10-22 06:22:39 +0800 |
commit | 8b81ad1fc40080af441c0c6df94f0b2ea46e320b (patch) | |
tree | 7d8817ec84be38b911f967f1ecd5618d02e4caa9 /eth/backend.go | |
parent | 58d0752fdd1c7363fb1a127cd7e0a86d7602be02 (diff) | |
download | go-tangerine-8b81ad1fc40080af441c0c6df94f0b2ea46e320b.tar.gz go-tangerine-8b81ad1fc40080af441c0c6df94f0b2ea46e320b.tar.zst go-tangerine-8b81ad1fc40080af441c0c6df94f0b2ea46e320b.zip |
console:
* lines with leading space are ommitted from history
* exit processed even with whitespace around
* all whitespace lines (not only empty ones) are ignored
add 7 missing commands to admin api autocomplete
registrar: methods now return proper error if reg addresses are not set. fixes #1457
rpc/console: fix personal.newAccount() regression. Now all comms accept interactive password
registrar: add registrar tests for errors
crypto: catch AES decryption error on presale wallet import + fix error msg format. fixes #1580
CLI: improve error message when starting a second instance of geth. fixes #1564
cli/accounts: unlock multiple accounts. fixes #1785
* make unlocking multiple accounts work with inline <() fd
* passwdfile now correctly read only once
* improve logs
* fix CLI help text for unlocking
fix regression with docRoot / admin API
* docRoot/jspath passed to rpc/api ParseApis, which passes onto adminApi
* docRoot field for JS console in order to pass when RPC is (re)started
* improve flag desc for jspath
common/docserver: catch http errors from response
fix rpc/api tests
common/natspec: fix end to end test (skipped because takes 8s)
registrar: fix major regression:
* deploy registrars on frontier
* register HashsReg and UrlHint in GlobalRegistrar.
* set all 3 contract addresses in code
* zero out addresses first in tests
Diffstat (limited to 'eth/backend.go')
-rw-r--r-- | eth/backend.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/eth/backend.go b/eth/backend.go index a4f656ecd..6ce0d0eb0 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -26,7 +26,9 @@ import ( "math/big" "os" "path/filepath" + "regexp" "strings" + "syscall" "time" "github.com/ethereum/ethash" @@ -62,6 +64,9 @@ const ( var ( jsonlogger = logger.NewJsonLogger() + datadirInUseErrNos = []uint{11, 32, 35} + portInUseErrRE = regexp.MustCompile("address already in use") + defaultBootNodes = []*discover.Node{ // ETH/DEV Go Bootnodes discover.MustParseNode("enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303"), // IE @@ -282,6 +287,17 @@ func New(config *Config) (*Ethereum, error) { // Open the chain database and perform any upgrades needed chainDb, err := newdb(filepath.Join(config.DataDir, "chaindata")) if err != nil { + var ok bool + errno := uint(err.(syscall.Errno)) + for _, no := range datadirInUseErrNos { + if errno == no { + ok = true + break + } + } + if ok { + err = fmt.Errorf("%v (check if another instance of geth is already running with the same data directory '%s')", err, config.DataDir) + } return nil, fmt.Errorf("blockchain db err: %v", err) } if db, ok := chainDb.(*ethdb.LDBDatabase); ok { @@ -296,6 +312,16 @@ func New(config *Config) (*Ethereum, error) { dappDb, err := newdb(filepath.Join(config.DataDir, "dapp")) if err != nil { + var ok bool + for _, no := range datadirInUseErrNos { + if uint(err.(syscall.Errno)) == no { + ok = true + break + } + } + if ok { + err = fmt.Errorf("%v (check if another instance of geth is already running with the same data directory '%s')", err, config.DataDir) + } return nil, fmt.Errorf("dapp db err: %v", err) } if db, ok := dappDb.(*ethdb.LDBDatabase); ok { @@ -553,6 +579,9 @@ func (s *Ethereum) Start() error { }) err := s.net.Start() if err != nil { + if portInUseErrRE.MatchString(err.Error()) { + err = fmt.Errorf("%v (possibly another instance of geth is using the same port)", err) + } return err } |