mirror of
https://github.com/logos-blockchain/logos-blockchain-specs.git
synced 2026-01-07 23:53:11 +00:00
handle PeeringDegreeReached properly
This commit is contained in:
parent
3067a5d6b4
commit
2065060cf3
@ -71,6 +71,12 @@ class Node:
|
|||||||
inbound_conn: SimplexConnection,
|
inbound_conn: SimplexConnection,
|
||||||
outbound_conn: SimplexConnection,
|
outbound_conn: SimplexConnection,
|
||||||
):
|
):
|
||||||
|
if (
|
||||||
|
not self.mixgossip_channel.can_accept_conn()
|
||||||
|
or not peer.mixgossip_channel.can_accept_conn()
|
||||||
|
):
|
||||||
|
raise PeeringDegreeReached
|
||||||
|
|
||||||
self.mixgossip_channel.add_conn(
|
self.mixgossip_channel.add_conn(
|
||||||
DuplexConnection(
|
DuplexConnection(
|
||||||
inbound_conn,
|
inbound_conn,
|
||||||
@ -122,10 +128,13 @@ class MixGossipChannel:
|
|||||||
# https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task
|
# https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task
|
||||||
self.tasks = set()
|
self.tasks = set()
|
||||||
|
|
||||||
|
def can_accept_conn(self) -> bool:
|
||||||
|
return len(self.conns) < self.peering_degree
|
||||||
|
|
||||||
def add_conn(self, conn: DuplexConnection):
|
def add_conn(self, conn: DuplexConnection):
|
||||||
if len(self.conns) >= self.peering_degree:
|
if not self.can_accept_conn():
|
||||||
# For simplicity of the spec, reject the connection if the peering degree is reached.
|
# For simplicity of the spec, reject the connection if the peering degree is reached.
|
||||||
raise ValueError("The peering degree is reached.")
|
raise PeeringDegreeReached()
|
||||||
|
|
||||||
self.conns.append(conn)
|
self.conns.append(conn)
|
||||||
task = self.framework.spawn(self.__process_inbound_conn(conn))
|
task = self.framework.spawn(self.__process_inbound_conn(conn))
|
||||||
@ -223,3 +232,7 @@ def parse_msg(data: bytes) -> tuple[MsgType, bytes]:
|
|||||||
|
|
||||||
def build_noise_packet() -> bytes:
|
def build_noise_packet() -> bytes:
|
||||||
return build_msg(MsgType.NOISE, bytes(DEFAULT_PAYLOAD_SIZE))
|
return build_msg(MsgType.NOISE, bytes(DEFAULT_PAYLOAD_SIZE))
|
||||||
|
|
||||||
|
|
||||||
|
class PeeringDegreeReached(Exception):
|
||||||
|
pass
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import usim
|
|||||||
import mixnet.framework.usim as usimfw
|
import mixnet.framework.usim as usimfw
|
||||||
from mixnet.config import GlobalConfig, MixMembership, NodeInfo
|
from mixnet.config import GlobalConfig, MixMembership, NodeInfo
|
||||||
from mixnet.framework.framework import Framework
|
from mixnet.framework.framework import Framework
|
||||||
from mixnet.node import Node
|
from mixnet.node import Node, PeeringDegreeReached
|
||||||
from mixnet.sim.config import Config
|
from mixnet.sim.config import Config
|
||||||
from mixnet.sim.connection import MeteredRemoteSimplexConnection
|
from mixnet.sim.connection import MeteredRemoteSimplexConnection
|
||||||
from mixnet.sim.stats import ConnectionStats
|
from mixnet.sim.stats import ConnectionStats
|
||||||
@ -54,7 +54,10 @@ class Simulation:
|
|||||||
self.create_conn(),
|
self.create_conn(),
|
||||||
)
|
)
|
||||||
peer = nodes[(i + 1) % len(nodes)]
|
peer = nodes[(i + 1) % len(nodes)]
|
||||||
node.connect(peer, inbound_conn, outbound_conn)
|
try:
|
||||||
|
node.connect(peer, inbound_conn, outbound_conn)
|
||||||
|
except PeeringDegreeReached:
|
||||||
|
continue
|
||||||
conn_stats.register(node, inbound_conn, outbound_conn)
|
conn_stats.register(node, inbound_conn, outbound_conn)
|
||||||
conn_stats.register(peer, outbound_conn, inbound_conn)
|
conn_stats.register(peer, outbound_conn, inbound_conn)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user