Consistency in handling of self.interface
switch_to_interface() becomes the common place where self.interface is set; therefore self.interface is not None precisely when self.default_server is connected. Previously some places required it to be connected and some didn't. Also an interface change now sends the 'updated' notification consistently - previously some did and some didn't. Have network_start() call start_interfaces() - this also means network restarts now do this. Fix apparent off-by-one in start_interfaces()
This commit is contained in:
parent
c918e74039
commit
86626d8080
|
@ -278,12 +278,10 @@ class Network(util.DaemonThread):
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def start_interface(self, server):
|
def start_interface(self, server):
|
||||||
if server in self.interfaces.keys():
|
if not server in self.interfaces.keys():
|
||||||
return
|
i = interface.Interface(server, self.queue, self.config)
|
||||||
i = interface.Interface(server, self.queue, self.config)
|
self.pending_servers.add(server)
|
||||||
self.pending_servers.add(server)
|
i.start()
|
||||||
i.start()
|
|
||||||
return i
|
|
||||||
|
|
||||||
def start_random_interface(self):
|
def start_random_interface(self):
|
||||||
server = self.random_server()
|
server = self.random_server()
|
||||||
|
@ -291,13 +289,12 @@ class Network(util.DaemonThread):
|
||||||
self.start_interface(server)
|
self.start_interface(server)
|
||||||
|
|
||||||
def start_interfaces(self):
|
def start_interfaces(self):
|
||||||
self.interface = self.start_interface(self.default_server)
|
self.start_interface(self.default_server)
|
||||||
for i in range(self.num_server):
|
for i in range(self.num_server - 1):
|
||||||
self.start_random_interface()
|
self.start_random_interface()
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.running = True
|
self.running = True
|
||||||
self.start_interfaces()
|
|
||||||
self.blockchain.start()
|
self.blockchain.start()
|
||||||
util.DaemonThread.start(self)
|
util.DaemonThread.start(self)
|
||||||
|
|
||||||
|
@ -320,6 +317,7 @@ class Network(util.DaemonThread):
|
||||||
self.disconnected_servers = set([])
|
self.disconnected_servers = set([])
|
||||||
self.protocol = protocol
|
self.protocol = protocol
|
||||||
self.set_proxy(proxy)
|
self.set_proxy(proxy)
|
||||||
|
self.start_interfaces()
|
||||||
|
|
||||||
def stop_network(self):
|
def stop_network(self):
|
||||||
# FIXME: this forgets to handle pending servers...
|
# FIXME: this forgets to handle pending servers...
|
||||||
|
@ -351,15 +349,16 @@ class Network(util.DaemonThread):
|
||||||
while self.interfaces:
|
while self.interfaces:
|
||||||
i = random.choice(self.interfaces.values())
|
i = random.choice(self.interfaces.values())
|
||||||
if i.is_connected():
|
if i.is_connected():
|
||||||
self.switch_to_interface(i)
|
self.switch_to_interface(i.server)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.remove_interface(i)
|
self.remove_interface(i)
|
||||||
|
|
||||||
def switch_to_interface(self, interface):
|
def switch_to_interface(self, server):
|
||||||
server = interface.server
|
'''Switch to server as our interface, it must be in self.interfaces'''
|
||||||
|
assert server in self.interfaces
|
||||||
self.print_error("switching to", server)
|
self.print_error("switching to", server)
|
||||||
self.interface = interface
|
self.interface = self.interfaces[server]
|
||||||
self.default_server = server
|
self.default_server = server
|
||||||
self.send_subscriptions()
|
self.send_subscriptions()
|
||||||
self.set_status('connected')
|
self.set_status('connected')
|
||||||
|
@ -368,7 +367,7 @@ class Network(util.DaemonThread):
|
||||||
|
|
||||||
def stop_interface(self):
|
def stop_interface(self):
|
||||||
self.interface.stop()
|
self.interface.stop()
|
||||||
|
self.interface = None
|
||||||
|
|
||||||
def set_server(self, server):
|
def set_server(self, server):
|
||||||
if self.default_server == server and self.is_connected():
|
if self.default_server == server and self.is_connected():
|
||||||
|
@ -387,9 +386,9 @@ class Network(util.DaemonThread):
|
||||||
self.default_server = server
|
self.default_server = server
|
||||||
|
|
||||||
if server in self.interfaces.keys():
|
if server in self.interfaces.keys():
|
||||||
self.switch_to_interface( self.interfaces[server] )
|
self.switch_to_interface(server)
|
||||||
else:
|
else:
|
||||||
self.interface = self.start_interface(server)
|
self.start_interface(server)
|
||||||
|
|
||||||
|
|
||||||
def add_recent_server(self, i):
|
def add_recent_server(self, i):
|
||||||
|
@ -425,9 +424,8 @@ class Network(util.DaemonThread):
|
||||||
self.add_interface(i)
|
self.add_interface(i)
|
||||||
self.add_recent_server(i)
|
self.add_recent_server(i)
|
||||||
i.send_request({'method':'blockchain.headers.subscribe','params':[]})
|
i.send_request({'method':'blockchain.headers.subscribe','params':[]})
|
||||||
if i == self.interface:
|
if i.server == self.default_server:
|
||||||
self.send_subscriptions()
|
self.switch_to_interface(i.server)
|
||||||
self.set_status('connected')
|
|
||||||
else:
|
else:
|
||||||
if i.server in self.interfaces:
|
if i.server in self.interfaces:
|
||||||
self.remove_interface(i)
|
self.remove_interface(i)
|
||||||
|
@ -509,7 +507,7 @@ class Network(util.DaemonThread):
|
||||||
self.switch_to_random_interface()
|
self.switch_to_random_interface()
|
||||||
else:
|
else:
|
||||||
if self.default_server in self.interfaces.keys():
|
if self.default_server in self.interfaces.keys():
|
||||||
self.switch_to_interface(self.interfaces[self.default_server])
|
self.switch_to_interface(self.default_server)
|
||||||
else:
|
else:
|
||||||
if self.default_server in self.disconnected_servers:
|
if self.default_server in self.disconnected_servers:
|
||||||
if now - self.server_retry_time > SERVER_RETRY_INTERVAL:
|
if now - self.server_retry_time > SERVER_RETRY_INTERVAL:
|
||||||
|
@ -518,7 +516,7 @@ class Network(util.DaemonThread):
|
||||||
else:
|
else:
|
||||||
if self.default_server not in self.pending_servers:
|
if self.default_server not in self.pending_servers:
|
||||||
self.print_error("forcing reconnection")
|
self.print_error("forcing reconnection")
|
||||||
self.interface = self.start_interface(self.default_server)
|
self.start_interface(self.default_server)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while self.is_running():
|
while self.is_running():
|
||||||
|
|
Loading…
Reference in New Issue