Skip to content

Commit 47b0636

Browse files
authored
feat(gossipsub): default MaxCountSubscriptionFilter with 100 topics
Pull-Request: #6527.
1 parent cb1450d commit 47b0636

4 files changed

Lines changed: 26 additions & 3 deletions

File tree

protocols/gossipsub/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
## 0.50.0
2+
- Change default `TopicSubscriptionFilter` from `AllowAllSubscriptionFilter` to `MaxCountSubscriptionFilter<AllowAllSubscriptionFilter>`
3+
with default limits of `100` for both `max_subscribed_topics` and `max_subscriptions_per_request`,
4+
providing built-in protection against excessive subscription requests.
5+
See [PR 6527](https://github.com/libp2p/rust-libp2p/pull/6527).
6+
27
- Account for forwarded messages in `topic_mesg_sent_*` metrics.
38
See [PR 6502](https://github.com/libp2p/rust-libp2p/pull/6502)
49

protocols/gossipsub/src/behaviour.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ use web_time::{Instant, SystemTime};
5757
#[cfg(feature = "metrics")]
5858
use crate::metrics::{Churn, Config as MetricsConfig, Inclusion, Metrics, Penalty};
5959
use crate::{
60-
FailedMessages, PublishError, SubscriptionError, TopicScoreParams, ValidationError,
60+
FailedMessages, MaxCountSubscriptionFilter, PublishError, SubscriptionError, TopicScoreParams,
61+
ValidationError,
6162
backoff::BackoffStorage,
6263
config::{Config, ValidationMode},
6364
gossip_promises::GossipPromises,
@@ -292,7 +293,10 @@ impl From<MessageAuthenticity> for PublishConfig {
292293
///
293294
/// The TopicSubscriptionFilter allows applications to implement specific filters on topics to
294295
/// prevent unwanted messages being propagated and evaluated.
295-
pub struct Behaviour<D = IdentityTransform, F = AllowAllSubscriptionFilter> {
296+
pub struct Behaviour<
297+
D = IdentityTransform,
298+
F = MaxCountSubscriptionFilter<AllowAllSubscriptionFilter>,
299+
> {
296300
/// Configuration providing gossipsub performance parameters.
297301
config: Config,
298302

protocols/gossipsub/src/behaviour/tests/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ use crate::{
5959

6060
/// Convenience alias for [`BehaviourTestBuilder`] with default transform and subscription filter.
6161
pub(super) type DefaultBehaviourTestBuilder =
62-
BehaviourTestBuilder<IdentityTransform, AllowAllSubscriptionFilter>;
62+
BehaviourTestBuilder<IdentityTransform, MaxCountSubscriptionFilter<AllowAllSubscriptionFilter>>;
6363

6464
/// A builder for creating test gossipsub networks with configurable peers and topics.
6565
///

protocols/gossipsub/src/subscription_filter.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ impl TopicSubscriptionFilter for WhitelistSubscriptionFilter {
105105
}
106106

107107
/// Adds a max count to a given subscription filter
108+
#[derive(Debug, Clone)]
108109
pub struct MaxCountSubscriptionFilter<T: TopicSubscriptionFilter> {
109110
pub filter: T,
110111
pub max_subscribed_topics: usize,
@@ -158,6 +159,19 @@ impl<T: TopicSubscriptionFilter> TopicSubscriptionFilter for MaxCountSubscriptio
158159
}
159160
}
160161

162+
impl<T> Default for MaxCountSubscriptionFilter<T>
163+
where
164+
T: TopicSubscriptionFilter + Default,
165+
{
166+
fn default() -> Self {
167+
Self {
168+
filter: Default::default(),
169+
max_subscribed_topics: 100,
170+
max_subscriptions_per_request: 100,
171+
}
172+
}
173+
}
174+
161175
/// Combines two subscription filters
162176
pub struct CombinedSubscriptionFilters<T: TopicSubscriptionFilter, S: TopicSubscriptionFilter> {
163177
pub filter1: T,

0 commit comments

Comments
 (0)