Skip to content

Commit b5d9932

Browse files
authored
feat: memory based connection limits
Implements memory-based connection limits where the user can specify an absolute or a relative limit of the process' memory usage in relation to the available system memory. Related: #4252. Pull-Request: #4281.
1 parent 188b70e commit b5d9932

11 files changed

Lines changed: 633 additions & 0 deletions

File tree

Cargo.lock

Lines changed: 53 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ members = [
1818
"misc/allow-block-list",
1919
"misc/connection-limits",
2020
"misc/keygen",
21+
"misc/memory-connection-limits",
2122
"misc/metrics",
2223
"misc/multistream-select",
2324
"misc/quick-protobuf-codec",
@@ -75,6 +76,7 @@ libp2p-identify = { version = "0.43.0", path = "protocols/identify" }
7576
libp2p-identity = { version = "0.2.2" }
7677
libp2p-kad = { version = "0.44.4", path = "protocols/kad" }
7778
libp2p-mdns = { version = "0.44.0", path = "protocols/mdns" }
79+
libp2p-memory-connection-limits = { version = "0.1.0", path = "misc/memory-connection-limits" }
7880
libp2p-metrics = { version = "0.13.1", path = "misc/metrics" }
7981
libp2p-mplex = { version = "0.40.0", path = "muxers/mplex" }
8082
libp2p-muxer-test-harness = { path = "muxers/test-harness" }

libp2p/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@
66
- Add `json` feature which exposes `request_response::json`.
77
See [PR 4188].
88

9+
- Add `libp2p-memory-connection-limits` providing memory usage based connection limit configurations.
10+
See [PR 4281].
11+
912
[PR 4188]: https://github.com/libp2p/rust-libp2p/pull/4188
1013
[PR 4217]: https://github.com/libp2p/rust-libp2p/pull/4217
14+
[PR 4281]: https://github.com/libp2p/rust-libp2p/pull/4281
1115

1216
## 0.52.1
1317

libp2p/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ full = [
2727
"kad",
2828
"macros",
2929
"mdns",
30+
"memory-connection-limits",
3031
"metrics",
3132
"noise",
3233
"ping",
@@ -65,6 +66,7 @@ json = ["libp2p-request-response?/json"]
6566
kad = ["dep:libp2p-kad", "libp2p-metrics?/kad"]
6667
macros = ["libp2p-swarm/macros"]
6768
mdns = ["dep:libp2p-mdns"]
69+
memory-connection-limits = ["dep:libp2p-memory-connection-limits"]
6870
metrics = ["dep:libp2p-metrics"]
6971
noise = ["dep:libp2p-noise"]
7072
ping = ["dep:libp2p-ping", "libp2p-metrics?/ping"]
@@ -124,6 +126,7 @@ pin-project = "1.0.0"
124126
libp2p-deflate = { workspace = true, optional = true }
125127
libp2p-dns = { workspace = true, optional = true }
126128
libp2p-mdns = { workspace = true, optional = true }
129+
libp2p-memory-connection-limits = { workspace = true, optional = true }
127130
libp2p-tcp = { workspace = true, optional = true }
128131
libp2p-tls = { workspace = true, optional = true }
129132
libp2p-uds = { workspace = true, optional = true }

libp2p/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ pub use libp2p_kad as kad;
7878
#[cfg_attr(docsrs, doc(cfg(feature = "mdns")))]
7979
#[doc(inline)]
8080
pub use libp2p_mdns as mdns;
81+
#[cfg(feature = "memory-connection-limits")]
82+
#[cfg(not(target_arch = "wasm32"))]
83+
#[cfg_attr(docsrs, doc(cfg(feature = "memory-connection-limits")))]
84+
#[doc(inline)]
85+
pub use libp2p_memory_connection_limits as memory_connection_limits;
8186
#[cfg(feature = "metrics")]
8287
#[doc(inline)]
8388
pub use libp2p_metrics as metrics;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## 0.1.0 - unreleased
2+
3+
- Initial release.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[package]
2+
name = "libp2p-memory-connection-limits"
3+
edition = "2021"
4+
rust-version = { workspace = true }
5+
description = "Memory usage based connection limits for libp2p."
6+
version = "0.1.0"
7+
license = "MIT"
8+
repository = "https://github.com/libp2p/rust-libp2p"
9+
keywords = ["peer-to-peer", "libp2p", "networking"]
10+
categories = ["network-programming", "asynchronous"]
11+
12+
[dependencies]
13+
memory-stats = { version = "1", features = ["always_use_statm"] }
14+
libp2p-core = { workspace = true }
15+
libp2p-swarm = { workspace = true }
16+
libp2p-identity = { workspace = true, features = ["peerid"] }
17+
log = "0.4"
18+
sysinfo = "0.29"
19+
void = "1"
20+
21+
[dev-dependencies]
22+
async-std = { version = "1.12.0", features = ["attributes"] }
23+
libp2p-identify = { workspace = true }
24+
libp2p-swarm-derive = { path = "../../swarm-derive" }
25+
libp2p-swarm-test = { path = "../../swarm-test" }
26+
rand = "0.8.5"

0 commit comments

Comments
 (0)