Skip to content

Commit

Permalink
feat(gossipsub): make gossipsub modules private
Browse files Browse the repository at this point in the history
Resolves #3494.

Pull-Request: #3777.
  • Loading branch information
tcoratger authored Apr 23, 2023
1 parent e6f9d49 commit 270d204
Show file tree
Hide file tree
Showing 13 changed files with 95 additions and 64 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions protocols/gossipsub/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 0.44.4 - unreleased

- Deprecate `metrics`, `protocol`, `subscription_filter`, `time_cache` modules to make them private. See [PR 3777].

[PR 3777]: https://github.com/libp2p/rust-libp2p/pull/3777

## 0.44.3

- Fix erroneously duplicate message IDs. See [PR 3716].
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "libp2p-gossipsub"
edition = "2021"
rust-version = "1.62.0"
description = "Gossipsub protocol for libp2p"
version = "0.44.3"
version = "0.44.4"
authors = ["Age Manning <[email protected]>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand Down
10 changes: 5 additions & 5 deletions protocols/gossipsub/src/behaviour.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ use crate::config::{Config, ValidationMode};
use crate::gossip_promises::GossipPromises;
use crate::handler::{Handler, HandlerEvent, HandlerIn};
use crate::mcache::MessageCache;
use crate::metrics::{Churn, Config as MetricsConfig, Inclusion, Metrics, Penalty};
use crate::metrics_priv::{Churn, Config as MetricsConfig, Inclusion, Metrics, Penalty};
use crate::peer_score::{PeerScore, PeerScoreParams, PeerScoreThresholds, RejectReason};
use crate::protocol::{ProtocolConfig, SIGNING_PREFIX};
use crate::subscription_filter::{AllowAllSubscriptionFilter, TopicSubscriptionFilter};
use crate::time_cache::{DuplicateCache, TimeCache};
use crate::protocol_priv::{ProtocolConfig, SIGNING_PREFIX};
use crate::subscription_filter_priv::{AllowAllSubscriptionFilter, TopicSubscriptionFilter};
use crate::time_cache_priv::{DuplicateCache, TimeCache};
use crate::topic::{Hasher, Topic, TopicHash};
use crate::transform::{DataTransform, IdentityTransform};
use crate::types::{
Expand Down Expand Up @@ -3824,7 +3824,7 @@ mod local_test {
let mut length_codec = unsigned_varint::codec::UviBytes::default();
length_codec.set_max_len(max_transmit_size);
let mut codec =
crate::protocol::GossipsubCodec::new(length_codec, ValidationMode::Permissive);
crate::protocol_priv::GossipsubCodec::new(length_codec, ValidationMode::Permissive);

let rpc_proto = rpc.into_protobuf();
let fragmented_messages = gs
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/src/behaviour/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
// Collection of tests for the gossipsub network behaviour

use super::*;
use crate::subscription_filter::WhitelistSubscriptionFilter;
use crate::subscription_filter_priv::WhitelistSubscriptionFilter;
use crate::transform::{DataTransform, IdentityTransform};
use crate::types::FastMessageId;
use crate::ValidationError;
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,7 @@ impl std::fmt::Debug for Config {
#[cfg(test)]
mod test {
use super::*;
use crate::protocol::ProtocolConfig;
use crate::protocol_priv::ProtocolConfig;
use crate::topic::IdentityHash;
use crate::types::PeerKind;
use crate::Topic;
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/src/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.

use crate::protocol::{GossipsubCodec, ProtocolConfig};
use crate::protocol_priv::{GossipsubCodec, ProtocolConfig};
use crate::rpc_proto::proto;
use crate::types::{PeerKind, RawMessage, Rpc};
use crate::ValidationError;
Expand Down
46 changes: 42 additions & 4 deletions protocols/gossipsub/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,42 @@
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]

pub mod error;
pub mod metrics;
pub mod protocol;
pub mod subscription_filter;
pub mod time_cache;

mod metrics_priv;
#[deprecated(
note = "The `metrics` module will be made private in the future and should not be depended on."
)]
pub mod metrics {
pub use super::metrics_priv::*;
}

mod protocol_priv;
#[deprecated(
note = "The `protocol` module will be made private in the future and should not be depended on."
)]
pub mod protocol {
pub use super::protocol_priv::*;
}

mod subscription_filter_priv;
#[deprecated(
note = "The `subscription_filter` module will be made private in the future, import the types from the crate root instead."
)]
pub mod subscription_filter {
pub use super::subscription_filter_priv::*;

pub mod regex {
pub use crate::subscription_filter_priv::RegexSubscriptionFilter;
}
}

mod time_cache_priv;
#[deprecated(
note = "The `time_cache` module will be made private in the future and should not be depended on."
)]
pub mod time_cache {
pub use super::time_cache_priv::*;
}

mod backoff;
mod behaviour;
Expand All @@ -164,10 +196,16 @@ pub type HandlerError = error_priv::HandlerError;
pub use self::behaviour::{Behaviour, Event, MessageAuthenticity};
pub use self::config::{Config, ConfigBuilder, ValidationMode, Version};
pub use self::error_priv::{PublishError, SubscriptionError, ValidationError};
pub use self::metrics_priv::Config as MetricsConfig;
pub use self::peer_score::{
score_parameter_decay, score_parameter_decay_with_base, PeerScoreParams, PeerScoreThresholds,
TopicScoreParams,
};
pub use self::subscription_filter_priv::{
AllowAllSubscriptionFilter, CallbackSubscriptionFilter, CombinedSubscriptionFilters,
MaxCountSubscriptionFilter, RegexSubscriptionFilter, TopicSubscriptionFilter,
WhitelistSubscriptionFilter,
};
pub use self::topic::{Hasher, Topic, TopicHash};
pub use self::transform::{DataTransform, IdentityTransform};
pub use self::types::{FastMessageId, Message, MessageAcceptance, MessageId, RawMessage, Rpc};
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions protocols/gossipsub/src/peer_score.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
//!
//! Manages and stores the Scoring logic of a particular peer on the gossipsub behaviour.
use crate::metrics::{Metrics, Penalty};
use crate::time_cache::TimeCache;
use crate::metrics_priv::{Metrics, Penalty};
use crate::time_cache_priv::TimeCache;
use crate::{MessageId, TopicHash};
use libp2p_identity::PeerId;
use log::{debug, trace, warn};
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -200,55 +200,12 @@ where
}
}

pub mod regex {
use super::TopicSubscriptionFilter;
use crate::TopicHash;
use regex::Regex;
///A subscription filter that filters topics based on a regular expression.
pub struct RegexSubscriptionFilter(pub regex::Regex);

///A subscription filter that filters topics based on a regular expression.
pub struct RegexSubscriptionFilter(pub Regex);

impl TopicSubscriptionFilter for RegexSubscriptionFilter {
fn can_subscribe(&mut self, topic_hash: &TopicHash) -> bool {
self.0.is_match(topic_hash.as_str())
}
}

#[cfg(test)]
mod test {
use super::*;
use crate::types::Subscription;
use crate::types::SubscriptionAction::*;

#[test]
fn test_regex_subscription_filter() {
let t1 = TopicHash::from_raw("tt");
let t2 = TopicHash::from_raw("et3t3te");
let t3 = TopicHash::from_raw("abcdefghijklmnopqrsuvwxyz");

let mut filter = RegexSubscriptionFilter(Regex::new("t.*t").unwrap());

let old = Default::default();
let subscriptions = vec![
Subscription {
action: Subscribe,
topic_hash: t1,
},
Subscription {
action: Subscribe,
topic_hash: t2,
},
Subscription {
action: Subscribe,
topic_hash: t3,
},
];

let result = filter
.filter_incoming_subscriptions(&subscriptions, &old)
.unwrap();
assert_eq!(result, subscriptions[..2].iter().collect());
}
impl TopicSubscriptionFilter for RegexSubscriptionFilter {
fn can_subscribe(&mut self, topic_hash: &TopicHash) -> bool {
self.0.is_match(topic_hash.as_str())
}
}

Expand Down Expand Up @@ -447,4 +404,34 @@ mod test {
.unwrap();
assert_eq!(result, vec![&subscriptions[0]].into_iter().collect());
}

#[test]
fn test_regex_subscription_filter() {
let t1 = TopicHash::from_raw("tt");
let t2 = TopicHash::from_raw("et3t3te");
let t3 = TopicHash::from_raw("abcdefghijklmnopqrsuvwxyz");

let mut filter = RegexSubscriptionFilter(regex::Regex::new("t.*t").unwrap());

let old = Default::default();
let subscriptions = vec![
Subscription {
action: Subscribe,
topic_hash: t1,
},
Subscription {
action: Subscribe,
topic_hash: t2,
},
Subscription {
action: Subscribe,
topic_hash: t3,
},
];

let result = filter
.filter_incoming_subscriptions(&subscriptions, &old)
.unwrap();
assert_eq!(result, subscriptions[..2].iter().collect());
}
}
File renamed without changes.

0 comments on commit 270d204

Please sign in to comment.