Commit Graph

1978 Commits

Author SHA1 Message Date
6e76435b80 core/: Help the compiler disambiguate usize inference (#2310)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-10-27 18:49:51 +02:00
185b763803 protocols/identify: Disable address cache by default (#2312)
See https://github.com/libp2p/rust-libp2p/issues/2302 for details.
2021-10-27 18:25:37 +02:00
4ef57383a6 swarm/src/lib: Continue polling network when behaviour is blocked (#2304)
With https://github.com/libp2p/rust-libp2p/pull/2248 a connection task
`await`s sending an event to the behaviour before polling for new events
from the behaviour [1].

When `Swarm::poll` is unable to deliver an event to a connection task it
returns `Poll::Pending` even though (a) polling `Swarm::network` might be
able to make progress (`network_not_ready` being `false`) and (b) it
does not register a waker to be woken up [2].

In combination this can lead to a deadlock where a connection task waits
to send an event to the behaviour and `Swarm::poll` returns
`Poll::Pending` failing to send an event to the connection task, not
registering a waiker in order to be polled again.

With this commit `Swarm::poll` will only return `Poll::Pending`, when
failing to deliver an event to a connection task, if the network is
unable to make progress (i.e. `network_not_ready` being `true`).

In the long-run `Swarm::poll` should likely be redesigned, prioritizing
the behaviour over the network, given the former is the control plane
and the latter potentially yields new work from the outside.

[1]: ca1b7cf043/core/src/connection/pool/task.rs (L224-L232)
[2]: ca1b7cf043/swarm/src/lib.rs (L756-L783)
2021-10-26 22:23:55 +02:00
97509519c5 core/: Update libsecp256k1 from 0.6 to 0.7 (#2306)
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
2021-10-22 12:09:02 +02:00
cd2588e182 core/tests/connection_limit: Fix flake in max_established_incoming (#2295)
The test `max_established_incoming` starts two networks with a
configured connection limit, spawns up to `limit + 1` connections and
expects the last connection to be closed due to being over the limit.

The previous test implementation depended on both networks to handle
each connection in sequence, which is not always the case.

E.g. while network 2 might expect the last connection to close, network
1 might finish upgrading the last connection before the second to last
  connection, thus expecting the second to last connection to close.

This commit drives network 1 and 2 in sequence and ensures both networks
are finished upgrading a connection before starting a new connection. In
addition it upgrade the test to use `quickcheck`.
2021-10-20 20:22:53 +02:00
ca1b7cf043 build(deps): Bump actions/checkout from 2.3.4 to 2.3.5 (#2300)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.4...v2.3.5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-18 18:12:30 +02:00
a430e6bffc protocols/kad: Export KademliaBucketInserts (#2294) 2021-10-15 15:30:16 +02:00
2d13f99d30 Cargo.toml: Fix version typo (#2292) 2021-10-15 11:55:44 +02:00
a905665b8b *: Prepare v0.40.0-rc.1 release (#2290) 2021-10-15 11:15:05 +02:00
40c5335e3b core/: Concurrent dial attempts (#2248)
Concurrently dial address candidates within a single dial attempt.

Main motivation for this feature is to increase success rate on hole punching
(see https://github.com/libp2p/rust-libp2p/issues/1896#issuecomment-885894496
for details). Though, as a nice side effect, as one would expect, it does
improve connection establishment time.

Cleanups and fixes done along the way:

- Merge `pool.rs` and `manager.rs`.

- Instead of manually implementing state machines in `task.rs` use
  `async/await`.

- Fix bug where `NetworkBehaviour::inject_connection_closed` is called without a
  previous `NetworkBehaviour::inject_connection_established` (see
  https://github.com/libp2p/rust-libp2p/issues/2242).

- Return handler to behaviour on incoming connection limit error. Missed in
  https://github.com/libp2p/rust-libp2p/issues/2242.
2021-10-14 18:05:07 +02:00
c0d7d4a9eb build(deps): Update prost-build requirement from 0.8 to 0.9 (#2288)
Updates the requirements on [prost-build](https://github.com/tokio-rs/prost) to permit the latest version.
- [Release notes](https://github.com/tokio-rs/prost/releases)
- [Commits](https://github.com/tokio-rs/prost/compare/v0.8.0...v0.9.0)

---
updated-dependencies:
- dependency-name: prost-build
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-14 14:44:34 +02:00
3cc102da91 build(deps): Update prost requirement from 0.8 to 0.9 (#2287)
Updates the requirements on [prost](https://github.com/tokio-rs/prost) to permit the latest version.
- [Release notes](https://github.com/tokio-rs/prost/releases)
- [Commits](https://github.com/tokio-rs/prost/compare/v0.8.0...v0.9.0)

---
updated-dependencies:
- dependency-name: prost
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-14 14:16:54 +02:00
6d3ab8a3de protocols/identify: Assist in peer discovery based on reported listen addresses from other peers (#2232)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-10-13 21:46:34 +02:00
7718d1de38 core/connection/listeners: Create event on remove_listener (#2261)
Create a `ListenersEvent::Closed` when a listener is removed via
`Swarm::remove_listener`. This makes it more consistent with `Swarm::listen_on`,
and also informs the Swarm about the associated expired addresses.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-10-11 22:38:55 +02:00
3eb0344832 protocols/kad: Remove outdated TODO (#2282)
Signed-off-by: supercmmetry <vishaals2000@gmail.com>
2021-10-10 13:43:58 +02:00
57f34f6f26 core/src/connections: Avoid call to contains twice (#2279) 2021-10-08 10:18:34 +02:00
5ef430b8d8 misc/metrics/examples: Set openmetrics-text content-type (#2278)
Set "openmetrics-text" content type on HTTP GET response. Makes sure
Prometheus server parses returned metrics via OpenMetrics format instead
of legacy Prometheus format.
2021-10-07 14:07:25 +02:00
937b59de89 build(deps): Update lru requirement from 0.6 to 0.7 (#2267)
Updates the requirements on [lru](https://github.com/jeromefroe/lru-rs) to permit the latest version.
- [Release notes](https://github.com/jeromefroe/lru-rs/releases)
- [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jeromefroe/lru-rs/compare/0.6.0...0.7.0)

---
updated-dependencies:
- dependency-name: lru
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-05 23:26:13 +02:00
d60a6d55dc transports/websocket/: Update to soketto v0.7.0 #2271
Co-authored-by: James Wilson <james@jsdw.me>
2021-10-05 23:10:28 +02:00
e9ac6d2a6a .github/workflows/ci: Improve cache effectiveness (#2260)
To have caches operate at its maximum usefulness, we need to have a
1-to-1 mapping between build-comamnd and cache key. Otherwise rustc
has to rebuild certain artifacts because they were not in the cache.

By using matrices, we make github parallelise some of our jobs. This
has a double positive impact on CI runtime. Not only are our caches
more effective now, several jobs are now run in parallel.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-10-05 09:46:08 +02:00
c7abb6f70c transports/noise: Fix compilation with additional generic-array features (#2264)
For crate that depends on `generic-array = { version = "0.14.3", features =
["serde", "more_lengths"] }` It's seems that `as_ref()` is ambiguous.
2021-10-04 20:14:50 +02:00
5cbd4735dd README: Add Thomas as maintainer (#2257)
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2021-10-02 10:07:42 +10:00
9f331e517f protocols/rendezvous: Export Cookie (#2256)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-10-01 18:45:19 +02:00
decfeadc0d protocols/gossipsub: Implement std::error::Error for error types (#2254)
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2021-10-01 18:23:08 +02:00
c13f03354b protocols/kad: Check local store on get_providers (#2221) 2021-09-27 18:22:10 +02:00
d93a5ab11c protocols/gossipsub: Handle unsupported peers (#2241)
Previously, peers that did not support gossipsub were removed from the
connection-id mappings.

This can cause the connection_id mappings to go out of sync with those managed
by the swarm. This PR corrects this and adds an extra event that can inform the
user that a peer that does not support the protocol has connected. The user can
then optionally handle peers that don't support the protocol.
2021-09-27 09:21:37 +02:00
c860f5a3a7 README: Add starcoin to rust-libp2p users (#2246)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-26 16:14:27 +02:00
303490103b protocols/rendezvous: Improve examples (#2229)
* Add support for the `Identify` protocol to the server, such that the
  `register_with_identify` example works as intended
* Add discovery loop to the `discovery` example and demonstrate cookie
  usage
* Drop explicit dependency on async_std

Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-25 18:39:49 +02:00
f030b15be0 protocols/request-response: Remove throttled module (#2236)
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-25 18:18:06 +02:00
3c0f5c7848 src/tutorial.rs: Display ping events (#2234)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-25 15:58:04 +02:00
6f7a19e753 .github/workflows/ci.yml: Use swatinem/rust-cache (#2228) 2021-09-25 15:22:33 +02:00
e83e1b3d0b swarm-derive/: Make event_process = false the default (#2214)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-14 15:28:08 +02:00
b79fd02f0b *: Fix clippy warnings (#2227) 2021-09-14 15:00:05 +02:00
5f68c74177 protocols/rendezvous: Update prost (#2226)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-14 12:53:59 +02:00
2a6a1cc0d3 .github/workflows/ci.yml: Use clang 11 (#2233) 2021-09-14 12:21:11 +02:00
fcb2f62752 misc/metrics/src/swarm: Expose role on connections_closed (#2220)
Expose whether closed connection was a Dialer or Listener.
2021-09-09 15:35:45 +02:00
9b1f405012 misc/metrics/src/kad: Set query_duration lowest bucket to 0.1 sec (#2219)
Probability for a Kademlia query to return in less than 100 milliseconds
is low, thus increasing the lower bucket to improve accuracy within the
higher ranges.
2021-09-08 18:44:03 +02:00
67722c534d protocols/mdns: Do not fire all timers at the same time. (#2212)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-07 19:04:57 +02:00
733a0b6ce4 core/src/network/event.rs: Fix typo (#2218) 2021-09-07 17:08:45 +02:00
adcfdc0750 protocols/rendezvous: Implement protocol (#2107)
Implement the libp2p rendezvous protocol.

> A lightweight mechanism for generalized peer discovery. It can be used for
bootstrap purposes, real time peer discovery, application specific routing, and
so on.

Co-authored-by: rishflab <rishflab@hotmail.com>
Co-authored-by: Daniel Karzel <daniel@comit.network>
2021-09-07 16:36:52 +02:00
c1ae8a046c protocols/ping: Revise naming of symbols (#2215)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-06 16:10:48 +02:00
6924e5ef7a core/: Remove deprecated read/write functions (#2213)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-09-06 08:04:30 +02:00
c161acfb50 *: Dial with handler and return handler on error and closed (#2191)
Require `NetworkBehaviourAction::{DialPeer,DialAddress}` to contain a
`ProtocolsHandler`. This allows a behaviour to attach custom state to its
handler. The behaviour would no longer need to track this state separately
during connection establishment, thus reducing state required in a behaviour.
E.g. in the case of `libp2p-kad` the behaviour can include a `GetRecord` request
in its handler, or e.g. in the case of `libp2p-request-response` the behaviour
can include the first request in the handler.

Return `ProtocolsHandler` on connection error and close. This allows a behaviour
to extract its custom state previously included in the handler on connection
failure and connection closing. E.g. in the case of `libp2p-kad` the behaviour
could extract the attached `GetRecord` from the handler of the failed connection
and then start another connection attempt with a new handler with the same
`GetRecord` or bubble up an error to the user.

Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2021-08-31 17:00:51 +02:00
b55ee69645 build(deps): Update salsa20 requirement from 0.8 to 0.9 (#2206)
* build(deps): Update salsa20 requirement from 0.8 to 0.9

Updates the requirements on [salsa20](https://github.com/RustCrypto/stream-ciphers) to permit the latest version.
- [Release notes](https://github.com/RustCrypto/stream-ciphers/releases)
- [Commits](https://github.com/RustCrypto/stream-ciphers/compare/ctr-v0.8.0...salsa20-v0.9.0)

---
updated-dependencies:
- dependency-name: salsa20
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* *: Bump pnet to v0.22

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-08-30 12:53:09 +02:00
d617105233 build(deps): Update minicbor requirement from 0.10 to 0.11 (#2200)
Updates the requirements on [minicbor](https://gitlab.com/twittner/minicbor) to permit the latest version.
- [Release notes](https://gitlab.com/twittner/minicbor/tags)
- [Changelog](https://gitlab.com/twittner/minicbor/blob/master/CHANGELOG.md)
- [Commits](https://gitlab.com/twittner/minicbor/compare/minicbor-v0.10.0...minicbor-v0.11.0)

---
updated-dependencies:
- dependency-name: minicbor
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-26 17:11:08 +02:00
25004c4697 protocols/gossipsub: Use ed25519 in tests (#2197)
With f2905c07f1 the secp256k1 feature is
disabled by default. Instead of enabling it in the dev-dependency,
simply use ed25519.
2021-08-19 21:03:11 +02:00
1e9fcf90ea core/: Remove DisconnectedPeer::set_connected and Pool::add (#2195)
This logic seems to be a leftover of
https://github.com/libp2p/rust-libp2p/pull/889 and unused today.
2021-08-19 20:17:18 +02:00
f2905c07f1 *: Make libp2p-core default features optional (#2181)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-08-18 12:08:45 +02:00
49acf2eb5b swarm/src/protocols_handler: Impl ProtocolsHandler on either::Either (#2192)
Implement ProtocolsHandler on either::Either representing either of two
ProtocolsHandler implementations.

Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2021-08-17 18:02:06 +02:00
c58f697ef0 protocols/kad: Enable filtering of (provider) records (#2163)
Introduce `KademliaStoreInserts` option, which allows to filter records.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-08-17 16:20:50 +02:00