Accept only `--in-peers` many inbound full nodes in `SyncingEngine` (#14603)
* Accept only `--in-peers` many inbound full nodes in `SyncingEngine` Due to full and light nodes being stored in the same set, it's possible that `SyncingEngine` accepts more than `--in-peers` many inbound full nodes which leaves some of its outbound slots unoccupied. `ProtocolController` still tries to occupy these slots by opening outbound substreams. As these substreams are accepted by the remote peer, the connection is relayed to `SyncingEngine` which rejects the node because it's already full. This in turn results in the substream being inactive and the peer getting evicted. Fixing this properly would require relocating the light peer slot allocation away from `ProtocolController` or alternatively moving entire the substream validation there, both of which are epic refactorings and not necessarily in line with other goals. As a temporary measure, verify in `SyncingEngine` that it doesn't accept more than the specified amount of inbound full peers. * Fix tests * Apply review comments
parent
5b268d44
Please register or sign in to comment