mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-14 02:21:21 +00:00
feat(gossipsub): make gossipsub modules private
Resolves #3494. Pull-Request: #3777.
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -2431,7 +2431,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "libp2p-gossipsub"
|
||||
version = "0.44.3"
|
||||
version = "0.44.4"
|
||||
dependencies = [
|
||||
"async-std",
|
||||
"asynchronous-codec",
|
||||
|
@ -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].
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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};
|
||||
|
@ -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};
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user