diff --git a/Cargo.lock b/Cargo.lock index ea9b4943..0bade7cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2431,7 +2431,7 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.44.3" +version = "0.44.4" dependencies = [ "async-std", "asynchronous-codec", diff --git a/protocols/gossipsub/CHANGELOG.md b/protocols/gossipsub/CHANGELOG.md index 3006727d..fc63a305 100644 --- a/protocols/gossipsub/CHANGELOG.md +++ b/protocols/gossipsub/CHANGELOG.md @@ -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]. diff --git a/protocols/gossipsub/Cargo.toml b/protocols/gossipsub/Cargo.toml index d59e1375..204ec47c 100644 --- a/protocols/gossipsub/Cargo.toml +++ b/protocols/gossipsub/Cargo.toml @@ -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 "] license = "MIT" repository = "https://github.com/libp2p/rust-libp2p" diff --git a/protocols/gossipsub/src/behaviour.rs b/protocols/gossipsub/src/behaviour.rs index fb58e55f..9e06f448 100644 --- a/protocols/gossipsub/src/behaviour.rs +++ b/protocols/gossipsub/src/behaviour.rs @@ -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::{ @@ -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 diff --git a/protocols/gossipsub/src/behaviour/tests.rs b/protocols/gossipsub/src/behaviour/tests.rs index bafceafe..ca94e4ac 100644 --- a/protocols/gossipsub/src/behaviour/tests.rs +++ b/protocols/gossipsub/src/behaviour/tests.rs @@ -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; diff --git a/protocols/gossipsub/src/config.rs b/protocols/gossipsub/src/config.rs index 1f0b2384..098a3eb7 100644 --- a/protocols/gossipsub/src/config.rs +++ b/protocols/gossipsub/src/config.rs @@ -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; diff --git a/protocols/gossipsub/src/handler.rs b/protocols/gossipsub/src/handler.rs index 609bb81a..269bdcd4 100644 --- a/protocols/gossipsub/src/handler.rs +++ b/protocols/gossipsub/src/handler.rs @@ -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; diff --git a/protocols/gossipsub/src/lib.rs b/protocols/gossipsub/src/lib.rs index 4a1d63d9..556cb904 100644 --- a/protocols/gossipsub/src/lib.rs +++ b/protocols/gossipsub/src/lib.rs @@ -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; @@ -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}; diff --git a/protocols/gossipsub/src/metrics.rs b/protocols/gossipsub/src/metrics_priv.rs similarity index 100% rename from protocols/gossipsub/src/metrics.rs rename to protocols/gossipsub/src/metrics_priv.rs diff --git a/protocols/gossipsub/src/peer_score.rs b/protocols/gossipsub/src/peer_score.rs index acf37967..1270ad12 100644 --- a/protocols/gossipsub/src/peer_score.rs +++ b/protocols/gossipsub/src/peer_score.rs @@ -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}; diff --git a/protocols/gossipsub/src/protocol.rs b/protocols/gossipsub/src/protocol_priv.rs similarity index 100% rename from protocols/gossipsub/src/protocol.rs rename to protocols/gossipsub/src/protocol_priv.rs diff --git a/protocols/gossipsub/src/subscription_filter.rs b/protocols/gossipsub/src/subscription_filter_priv.rs similarity index 89% rename from protocols/gossipsub/src/subscription_filter.rs rename to protocols/gossipsub/src/subscription_filter_priv.rs index f6b72e09..8ec633d0 100644 --- a/protocols/gossipsub/src/subscription_filter.rs +++ b/protocols/gossipsub/src/subscription_filter_priv.rs @@ -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()) } } @@ -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()); + } } diff --git a/protocols/gossipsub/src/time_cache.rs b/protocols/gossipsub/src/time_cache_priv.rs similarity index 100% rename from protocols/gossipsub/src/time_cache.rs rename to protocols/gossipsub/src/time_cache_priv.rs