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
Host filter #567
Merged
Merged
Host filter #567
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
914ff2d
transport: add the host_filter module
piodul bb38722
{session,session_config}: add host filter to session builder and config
piodul 7efd309
node: make it possible to disable node's pool
piodul 3342a0d
cluster: use host filter by cluster worker
piodul 0a4f948
topology: filter hosts for the control connection
piodul c2944af
lib.rs: re-export transport::host_filter for convenience
piodul File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
//! Host filters. | ||
//! | ||
//! Host filters are essentially just a predicate over | ||
//! [`Peer`](crate::transport::topology::Peer)s. Currently, they are used | ||
//! by the [`Session`](crate::transport::session::Session) to determine whether | ||
//! connections should be opened to a given node or not. | ||
|
||
use std::collections::HashSet; | ||
use std::io::Error; | ||
use std::net::{SocketAddr, ToSocketAddrs}; | ||
|
||
use crate::transport::topology::Peer; | ||
|
||
/// The `HostFilter` trait. | ||
pub trait HostFilter: Send + Sync { | ||
/// Returns whether a peer should be accepted or not. | ||
fn accept(&self, peer: &Peer) -> bool; | ||
} | ||
|
||
/// Unconditionally accepts all nodes. | ||
pub struct AcceptAllHostFilter; | ||
|
||
impl HostFilter for AcceptAllHostFilter { | ||
fn accept(&self, _peer: &Peer) -> bool { | ||
true | ||
} | ||
} | ||
|
||
/// Accepts nodes whose addresses are present in the allow list provided | ||
/// during filter's construction. | ||
pub struct AllowListHostFilter { | ||
allowed: HashSet<SocketAddr>, | ||
} | ||
|
||
impl AllowListHostFilter { | ||
/// Creates a new `AllowListHostFilter` which only accepts nodes from the | ||
/// list. | ||
pub fn new<I, A>(allowed_iter: I) -> Result<Self, Error> | ||
where | ||
I: IntoIterator<Item = A>, | ||
A: ToSocketAddrs, | ||
{ | ||
// I couldn't get the iterator combinators to work | ||
let mut allowed = HashSet::new(); | ||
for item in allowed_iter { | ||
for addr in item.to_socket_addrs()? { | ||
allowed.insert(addr); | ||
} | ||
} | ||
|
||
Ok(Self { allowed }) | ||
} | ||
} | ||
|
||
impl HostFilter for AllowListHostFilter { | ||
fn accept(&self, peer: &Peer) -> bool { | ||
self.allowed.contains(&peer.address) | ||
} | ||
} | ||
|
||
/// Accepts nodes from given DC. | ||
pub struct DcHostFilter { | ||
local_dc: String, | ||
} | ||
|
||
impl DcHostFilter { | ||
/// Creates a new `DcHostFilter` that accepts nodes only from the | ||
/// `local_dc`. | ||
pub fn new(local_dc: String) -> Self { | ||
Self { local_dc } | ||
} | ||
} | ||
|
||
impl HostFilter for DcHostFilter { | ||
fn accept(&self, peer: &Peer) -> bool { | ||
peer.datacenter.as_ref() == Some(&self.local_dc) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could also be reexported in
lib.rs
for convenience.