Enhance PEER_DISCOVERY environment variable
It is now tri-state - ON, OFF or SELF. Fixes #287
This commit is contained in:
parent
585e7be004
commit
81947d796b
@ -270,9 +270,15 @@ some of this.
|
|||||||
|
|
||||||
* **PEER_DISCOVERY**
|
* **PEER_DISCOVERY**
|
||||||
|
|
||||||
If not defined, or non-empty, ElectrumX will occasionally connect to
|
This environment variable is case-insensitive and defaults to `on`.
|
||||||
and verify its network of peer servers. Set to empty to disable
|
|
||||||
peer discovery.
|
If `on`, ElectrumX will occasionally connect to and verify its
|
||||||
|
network of peer servers.
|
||||||
|
|
||||||
|
If `off`, peer discovery is disabled and a hard-coded default list
|
||||||
|
of servers will be read in and served. If set to `self` then peer
|
||||||
|
discovery is disabled and the server will only return itself in the
|
||||||
|
peers list.
|
||||||
|
|
||||||
* **PEER_ANNOUNCE**
|
* **PEER_ANNOUNCE**
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,9 @@ NetIdentity = namedtuple('NetIdentity', 'host tcp_port ssl_port nick_suffix')
|
|||||||
class Env(EnvBase):
|
class Env(EnvBase):
|
||||||
'''Wraps environment configuration.'''
|
'''Wraps environment configuration.'''
|
||||||
|
|
||||||
|
# Peer discovery
|
||||||
|
PD_OFF, PD_SELF, PD_ON = range(3)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.obsolete(['UTXO_MB', 'HIST_MB', 'NETWORK'])
|
self.obsolete(['UTXO_MB', 'HIST_MB', 'NETWORK'])
|
||||||
@ -49,7 +52,7 @@ class Env(EnvBase):
|
|||||||
self.anon_logs = self.boolean('ANON_LOGS', False)
|
self.anon_logs = self.boolean('ANON_LOGS', False)
|
||||||
self.log_sessions = self.integer('LOG_SESSIONS', 3600)
|
self.log_sessions = self.integer('LOG_SESSIONS', 3600)
|
||||||
# Peer discovery
|
# Peer discovery
|
||||||
self.peer_discovery = self.boolean('PEER_DISCOVERY', True)
|
self.peer_discovery = self.peer_discovery_enum()
|
||||||
self.peer_announce = self.boolean('PEER_ANNOUNCE', True)
|
self.peer_announce = self.boolean('PEER_ANNOUNCE', True)
|
||||||
self.force_proxy = self.boolean('FORCE_PROXY', False)
|
self.force_proxy = self.boolean('FORCE_PROXY', False)
|
||||||
self.tor_proxy_host = self.default('TOR_PROXY_HOST', 'localhost')
|
self.tor_proxy_host = self.default('TOR_PROXY_HOST', 'localhost')
|
||||||
@ -143,3 +146,12 @@ class Env(EnvBase):
|
|||||||
ssl_port,
|
ssl_port,
|
||||||
'_tor',
|
'_tor',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def peer_discovery_enum(self):
|
||||||
|
pd = self.default('PEER_DISCOVERY', 'on').strip().lower()
|
||||||
|
if pd in ('off', ''):
|
||||||
|
return self.PD_OFF
|
||||||
|
elif pd == 'self':
|
||||||
|
return self.PD_SELF
|
||||||
|
else:
|
||||||
|
return self.PD_ON
|
||||||
|
|||||||
@ -424,12 +424,13 @@ class PeerManager(util.LoggedClass):
|
|||||||
def import_peers(self):
|
def import_peers(self):
|
||||||
'''Import hard-coded peers from a file or the coin defaults.'''
|
'''Import hard-coded peers from a file or the coin defaults.'''
|
||||||
self.add_peers(self.myselves)
|
self.add_peers(self.myselves)
|
||||||
coin_peers = self.env.coin.PEERS
|
|
||||||
|
|
||||||
# Add the hard-coded ones
|
# Add the hard-coded ones unless only returning self
|
||||||
peers = [Peer.from_real_name(real_name, 'coins.py')
|
if self.env.peer_discovery != self.env.PD_SELF:
|
||||||
for real_name in coin_peers]
|
coin_peers = self.env.coin.PEERS
|
||||||
self.add_peers(peers, limit=None)
|
peers = [Peer.from_real_name(real_name, 'coins.py')
|
||||||
|
for real_name in coin_peers]
|
||||||
|
self.add_peers(peers, limit=None)
|
||||||
|
|
||||||
def connect_to_irc(self):
|
def connect_to_irc(self):
|
||||||
'''Connect to IRC if not disabled.'''
|
'''Connect to IRC if not disabled.'''
|
||||||
@ -459,7 +460,7 @@ class PeerManager(util.LoggedClass):
|
|||||||
3) Retrying old peers at regular intervals.
|
3) Retrying old peers at regular intervals.
|
||||||
'''
|
'''
|
||||||
self.connect_to_irc()
|
self.connect_to_irc()
|
||||||
if not self.env.peer_discovery:
|
if self.env.peer_discovery != self.env.PD_ON:
|
||||||
self.logger.info('peer discovery is disabled')
|
self.logger.info('peer discovery is disabled')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@ -199,7 +199,17 @@ def test_ANON_LOGS():
|
|||||||
assert_boolean('ANON_LOGS', 'anon_logs', False)
|
assert_boolean('ANON_LOGS', 'anon_logs', False)
|
||||||
|
|
||||||
def test_PEER_DISCOVERY():
|
def test_PEER_DISCOVERY():
|
||||||
assert_boolean('PEER_DISCOVERY', 'peer_discovery', True)
|
e = Env()
|
||||||
|
assert e.peer_discovery == Env.PD_ON
|
||||||
|
os.environ['PEER_DISCOVERY'] = ' '
|
||||||
|
e = Env()
|
||||||
|
assert e.peer_discovery == Env.PD_OFF
|
||||||
|
os.environ['PEER_DISCOVERY'] = 'ON'
|
||||||
|
e = Env()
|
||||||
|
assert e.peer_discovery == Env.PD_ON
|
||||||
|
os.environ['PEER_DISCOVERY'] = 'self'
|
||||||
|
e = Env()
|
||||||
|
assert e.peer_discovery == Env.PD_SELF
|
||||||
|
|
||||||
def test_PEER_ANNOUNCE():
|
def test_PEER_ANNOUNCE():
|
||||||
assert_boolean('PEER_ANNOUNCE', 'peer_announce', True)
|
assert_boolean('PEER_ANNOUNCE', 'peer_announce', True)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user