* Stop sending messages on legacy substream altogether
* Ensure that handshake is sent back even in case of back-pressure
* Update client/network/src/protocol/generic_proto/handler/group.rs
Co-authored-by: Max Inden <mail@max-inden.de>
* Also process OpenRequest and Closed
* Also process OpenRequest and Closed
* Fix bad merge
* God I'm so lost with all these merges
* Immediately return Closed
* Add warning for sending on non-registered protocol
* Register GrandPa protocol in tests
* Update client/network/src/protocol/generic_proto/handler/group.rs
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: Max Inden <mail@max-inden.de>
* Ensure that handshake is sent back even in case of back-pressure
* Update client/network/src/protocol/generic_proto/handler/group.rs
Co-authored-by: Max Inden <mail@max-inden.de>
* Also process OpenRequest and Closed
* Fix bad merge
* God I'm so lost with all these merges
* Immediately return Closed
Co-authored-by: Max Inden <mail@max-inden.de>
* client/*: Treat protocol name as str and not [u8]
Notification protocol names are in practice always valid utf8 strings.
Instead of treating them as such in the type system, thus far they were
casted to a [u8] at creation time.
With this commit protocol names are instead treated as valid utf8
strings throughout the codebase and passed as `Cow<'static, str>`
instead of `Cow<'static, [u8]>`. Among other things this eliminates the
need for string casting when logging.
* client/network: Don't allocate when protocol name is borrowed
* Implement request-responses protocols
* Add tests
* Fix sc-cli
* Apply suggestions from code review
Co-authored-by: Max Inden <mail@max-inden.de>
* Fix naming
* Fix other issues
* Other naming fix
* Fix error logging
* Max sizes to u64
* Don't kill connections on refusal to process
* Adjust comment
Co-authored-by: Max Inden <mail@max-inden.de>
* Wait for all notifications protocols to be open before reporting opening
* Update client/network/src/protocol/generic_proto/handler/notif_out.rs
Co-authored-by: Max Inden <mail@max-inden.de>
* Concern
* Fix attempt
* Another fix attempt
* Update client/network/src/protocol/generic_proto/handler/group.rs
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: parity-processbot <>
Co-authored-by: Max Inden <mail@max-inden.de>
* *: Update to next libp2p version (likely v0.24.0)
* Revert "*: Update to next libp2p version (likely v0.24.0)"
This reverts commit ffe1545aba6c2557a2843579de331f3fc1c60743.
* */Cargo.toml: Update to libp2p v0.24.0
* client/network/src/service: Handle ConnectionClosed returning Option
* Cargo.*: Test kad usize conversion
* Revert "Cargo.*: Test kad usize conversion"
This reverts commit ad317879782f982cb4a4c76029a72b5b97e82bec.
* Cargo.lock: Update to libp2p-kad v0.22.1
* client/cli/Cargo.toml: Update to libp2p 0.24.0
* Add support for sourced metrics.
A sourced metric is a metric that obtains its values
from an existing source, rather than the values being
independently recorded. It thus allows collecting
metrics from existing counters or gauges without
having to duplicate them in a dedicated prometheus
counter or gauge (and hence another atomic value).
The first use-case is to feed the bandwidth counters
from libp2p directly into prometheus.
* Tabs, not spaces.
* Tweak bandwidth counter registration.
* Add debug assertion for variable labels and values.
* Document monotonicity requirement for sourced counters.
* CI
* Update client/network/src/service.rs
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: Max Inden <mail@max-inden.de>
* Update to libp2p-0.23.
Thereby incorporate bandwidth measurement along the
lines previously done by libp2p itself.
* Tweak dependencies for wasm32 compilation.
For wasm32 we need to enable unstable features to
make `task::Builder::local` available.
* Simplify dependencies.
* Simplify.
Leave the calculation of bytes sent/received per second
to the outer layers of the code, subject to their own
individual update intervals.
* Cleanup
* Re-add lost dev dependency.
* Avoid division by zero.
* Remove redundant metric.
* Enable sending of noise legacy handshakes.
* Add comment about monotonic gauge.
* CI
* Add a warning if users pass --sentry or --sentry-nodes
* Apply suggestions from code review
Co-authored-by: Max Inden <mail@max-inden.de>
* Fix text
Co-authored-by: parity-processbot <>
Co-authored-by: Max Inden <mail@max-inden.de>
* refactor globals snapshot
* ignore test
* update pwasm-utils ref
* line width
* add doc comment for internal struct
* add explanation for iteration
* Demote rustdoc to a comment
* use 0.14
Co-authored-by: Sergei Shulepov <sergei@parity.io>
* client/network/src/discovery: Adjust to Kademlia API changes
* client/network: Add peers to DHT only if protocols match
With https://github.com/libp2p/rust-libp2p/pull/1628 rust-libp2p allows
manually controlling which peers are inserted into the routing table.
Instead of adding each peer to the routing table automatically, insert
them only if they support the local nodes protocol id (e.g. `dot`)
retrieved via the `identify` behaviour.
For now this works around
https://github.com/libp2p/rust-libp2p/issues/1611. In the future one
might add more requirements. For example one might try to exclude
light-clients.
* Cargo.toml: Remove crates.io patch for libp2p
* client/network/src/behaviour: Adjust to PeerInfo name change
* client/network/src/discovery: Rework Kademlia event matching
* client/network/discovery: Add trace on adding peer to DHT
* client/network/discovery: Retrieve protocol name from kad behaviour
* client/network/discovery: Fix formatting
* client/network: Change DiscoveryBehaviour::add_self_reported signature
* client/network: Document manual insertion strategy
* client/network/discovery: Remove TODO for ignoring DHT address
Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
* Add NetworkService::send_notifications
* Doc
* Doc
* API adjustment
* Address concerns
* Make it compile
* Start implementation
* Progress in the implementation
* Change implementation strategy again
* More work before weekend
* Finish changes
* Minor doc fix
* Revert some minor changes
* Apply suggestions from code review
* GroupError -> NotifsHandlerError
* Apply suggestions from code review
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
* state_transition_waker -> close_waker
* Apply suggestions from code review
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
* Finish renames in service.rs
* More renames
* More review suggestsions applied
* More review addressing
* Final change
* 512 -> 2048
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
* Move the legacy protocol handshake to the legacy substream
* Fix tests
* Remove line that wasn't supposed to be committed
* Remove hack
* Rework how it's done
* Some little changes
* update_chain wasn't doing its thing
* Fix service tests not calling update_chain
* Update client/network/src/protocol/generic_proto/behaviour.rs
Co-authored-by: Max Inden <mail@max-inden.de>
* [WIP]
* Revert "[WIP]"
This reverts commit 2b892e6a7637c0b1297e6ecdbb919321c9098ff5.
* Update client/network/src/protocol.rs
Co-authored-by: Max Inden <mail@max-inden.de>
* Fix received message not being handshake
* Update client/network/src/protocol/generic_proto/behaviour.rs
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: Max Inden <mail@max-inden.de>
* Improve transaction submission
Before this pr the transaction pool validated each transaction, even if
the transaction was already known to the pool. This pr changes the
behavior to first check if we are already aware of a transaction and
thus, to only validate them if we don't know them yet. However, there is
still the possibility that a given transaction is validated multiple
times. This can happen if the transaction is added the first time, but
is not yet validated and added to the validated pool.
Besides that, this pr fixes the wrong metrics of gossiped transactions
in the network. It also moves some metrics to the transaction pool api,
to better track when a transaction actually is scheduled for validation.
* Make sure we don't submit the same transaction twice from the network concurrently
* Remove added listener call
* Feedback
* Ignore banned on resubmit
Information retrieved via `DebugInfoBehaviour` is not only used for
debugging purposes, e.g. disconnecting from nodes not responding to
pings, using external addresses retrieved via indentify, ...
In order for the name to reflect the usage of the module this commit
renames it.
* Initial commit
Forked at: 82bdf1a891
No parent branch.
* Ensure the listen addresses are consistent with the transport
* Update client/network/src/error.rs
* Update client/network/src/service.rs
* Better implementation
* Fix bad previous impl
* add boot_nodes
* reserved nodes
* test boot nodes
* reserved nodes tests
* add public_addresses and make specific error type
* Update client/network/src/error.rs
Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
* client/network/service: Add primary dimension to connection metrics
Two nodes can be interconnected via one or more connections. The first
of those connections is called the primary connection.
This commit adds another dimension to the
`sub_libp2p_connections_{closed,opened}_total` metrics to differentiate
primary and non-primary connections being opened / closed.
By intuition more than one connection between two nodes is rare.
Tracking the fact whether a connection is primary or not will help prove
or disprove this intuition.
* .maintain/monitoring: Ensure to sum over all connections_closed variants
* client/network/service: Rename is_primary to is_first
* client/network/service: Split by metric name with two additional metrics
* Revert ".maintain/monitoring: Ensure to sum over all connections_closed variants"
This reverts commit 2d2f93e414440b9fc9e8f7fae6fe48bd95af6b8f.
* client/network/service: Remove labels from distinct metrics
Before we only updated the chain info of sync when we have imported
something using the import queue. However, if you import your own
blocks, this is not done using the import queue and so sync is not
updated. If we don't do this, it can lead to sync switching to "major
sync" mode because sync is not informed about new blocks. This
especially happens on Cumulus, where a collator is selected multiple
times to include its block into the relay chain and thus, sync switches
to major sync mode while the node is still building blocks.