mirror of
https://github.com/markqvist/LXMF.git
synced 2025-07-28 17:44:32 -04:00
Implemented auto unpeering unreachable nodes
This commit is contained in:
parent
d2bc7fc32e
commit
934a208965
2 changed files with 28 additions and 5 deletions
25
LXMF/LXMF.py
25
LXMF/LXMF.py
|
@ -569,6 +569,10 @@ class LXMPeer:
|
||||||
|
|
||||||
ERROR_NO_IDENTITY = 0xf0
|
ERROR_NO_IDENTITY = 0xf0
|
||||||
|
|
||||||
|
# Maximum amount of time a peer can
|
||||||
|
# be unreachable before it is removed
|
||||||
|
MAX_UNREACHABLE = 4*24*60*60
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_bytes(peer_bytes, router):
|
def from_bytes(peer_bytes, router):
|
||||||
dictionary = msgpack.unpackb(peer_bytes)
|
dictionary = msgpack.unpackb(peer_bytes)
|
||||||
|
@ -610,7 +614,7 @@ class LXMPeer:
|
||||||
|
|
||||||
def __init__(self, router, destination_hash):
|
def __init__(self, router, destination_hash):
|
||||||
self.alive = False
|
self.alive = False
|
||||||
self.last_heard = None
|
self.last_heard = 0
|
||||||
self.peering_timebase = 0
|
self.peering_timebase = 0
|
||||||
|
|
||||||
self.link = None
|
self.link = None
|
||||||
|
@ -648,6 +652,9 @@ class LXMPeer:
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if self.state == LXMPeer.LINK_READY:
|
if self.state == LXMPeer.LINK_READY:
|
||||||
|
self.alive = True
|
||||||
|
self.last_heard = time.time()
|
||||||
|
|
||||||
RNS.log("Sync link to peer "+RNS.prettyhexrep(self.destination_hash)+" established, preparing request...", RNS.LOG_DEBUG)
|
RNS.log("Sync link to peer "+RNS.prettyhexrep(self.destination_hash)+" established, preparing request...", RNS.LOG_DEBUG)
|
||||||
unhandled_ids = []
|
unhandled_ids = []
|
||||||
purged_ids = []
|
purged_ids = []
|
||||||
|
@ -756,6 +763,8 @@ class LXMPeer:
|
||||||
self.state = LXMPeer.IDLE
|
self.state = LXMPeer.IDLE
|
||||||
self.link.teardown()
|
self.link.teardown()
|
||||||
RNS.log("Sync to peer "+RNS.prettyhexrep(self.destination_hash)+" completed", RNS.LOG_DEBUG)
|
RNS.log("Sync to peer "+RNS.prettyhexrep(self.destination_hash)+" completed", RNS.LOG_DEBUG)
|
||||||
|
self.alive = True
|
||||||
|
self.last_heard = time.time()
|
||||||
else:
|
else:
|
||||||
RNS.log("Resource transfer for LXMF peer sync failed to "+str(self.destination), RNS.LOG_DEBUG)
|
RNS.log("Resource transfer for LXMF peer sync failed to "+str(self.destination), RNS.LOG_DEBUG)
|
||||||
if self.link != None:
|
if self.link != None:
|
||||||
|
@ -780,6 +789,12 @@ class LXMPeer:
|
||||||
RNS.log("The message "+RNS.prettyhexrep(transient_id)+" was added to distribution queue for "+RNS.prettyhexrep(self.destination_hash), RNS.LOG_EXTREME)
|
RNS.log("The message "+RNS.prettyhexrep(transient_id)+" was added to distribution queue for "+RNS.prettyhexrep(self.destination_hash), RNS.LOG_EXTREME)
|
||||||
self.unhandled_messages[transient_id] = self.router.propagation_entries[transient_id]
|
self.unhandled_messages[transient_id] = self.router.propagation_entries[transient_id]
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self.destination_hash:
|
||||||
|
return RNS.prettyhexrep(self.destination_hash)
|
||||||
|
else:
|
||||||
|
return "<Unknown>"
|
||||||
|
|
||||||
class LXMRouter:
|
class LXMRouter:
|
||||||
MAX_DELIVERY_ATTEMPTS = 3
|
MAX_DELIVERY_ATTEMPTS = 3
|
||||||
PROCESSING_INTERVAL = 5
|
PROCESSING_INTERVAL = 5
|
||||||
|
@ -1528,9 +1543,13 @@ class LXMRouter:
|
||||||
|
|
||||||
|
|
||||||
def sync_peers(self):
|
def sync_peers(self):
|
||||||
|
culled_peers = []
|
||||||
waiting_peers = []
|
waiting_peers = []
|
||||||
for peer_id in self.peers:
|
for peer_id in self.peers:
|
||||||
peer = self.peers[peer_id]
|
peer = self.peers[peer_id]
|
||||||
|
if time.time() > peer.last_heard + LXMPeer.MAX_UNREACHABLE:
|
||||||
|
culled_peers.append(peer_id)
|
||||||
|
else:
|
||||||
if peer.state == LXMPeer.IDLE and len(peer.unhandled_messages) > 0:
|
if peer.state == LXMPeer.IDLE and len(peer.unhandled_messages) > 0:
|
||||||
waiting_peers.append(peer)
|
waiting_peers.append(peer)
|
||||||
|
|
||||||
|
@ -1541,6 +1560,10 @@ class LXMRouter:
|
||||||
RNS.log("Selected waiting peer "+str(selected_index)+": "+RNS.prettyhexrep(selected_peer.destination.hash), RNS.LOG_DEBUG)
|
RNS.log("Selected waiting peer "+str(selected_index)+": "+RNS.prettyhexrep(selected_peer.destination.hash), RNS.LOG_DEBUG)
|
||||||
selected_peer.sync()
|
selected_peer.sync()
|
||||||
|
|
||||||
|
for peer in culled_peers:
|
||||||
|
RNS.log("Removing peer "+RNS.prettyhexrep(peer)+" due to excessive unreachability", RNS.LOG_WARNING)
|
||||||
|
self.peers.pop(peer_id)
|
||||||
|
|
||||||
|
|
||||||
def fail_message(self, lxmessage):
|
def fail_message(self, lxmessage):
|
||||||
RNS.log(str(lxmessage)+" failed to send", RNS.LOG_DEBUG)
|
RNS.log(str(lxmessage)+" failed to send", RNS.LOG_DEBUG)
|
||||||
|
|
4
setup.py
4
setup.py
|
@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="lxmf",
|
name="lxmf",
|
||||||
version="0.1.0",
|
version="0.1.1",
|
||||||
author="Mark Qvist",
|
author="Mark Qvist",
|
||||||
author_email="mark@unsigned.io",
|
author_email="mark@unsigned.io",
|
||||||
description="Lightweight Extensible Message Format for Reticulum",
|
description="Lightweight Extensible Message Format for Reticulum",
|
||||||
|
@ -18,6 +18,6 @@ setuptools.setup(
|
||||||
"License :: OSI Approved :: MIT License",
|
"License :: OSI Approved :: MIT License",
|
||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
],
|
],
|
||||||
install_requires=['rns>=0.2.4'],
|
install_requires=['rns>=0.2.8'],
|
||||||
python_requires='>=3.6',
|
python_requires='>=3.6',
|
||||||
)
|
)
|
Loading…
Add table
Add a link
Reference in a new issue