Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(gossipsub): make gossipsub modules private #3777

Merged
merged 19 commits into from
Apr 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 <Age@AgeManning.com>"]
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
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
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());
}
}