fixes to RPC networking #721
2 changed files with 17 additions and 12 deletions
|
@ -38,6 +38,11 @@ pub(crate) type VersionTag = [u8; 16];
|
|||
/// Value of the Netapp version used in the version tag
|
||||
pub(crate) const NETAPP_VERSION_TAG: u64 = 0x6e65746170700005; // netapp 0x0005
|
||||
|
||||
/// HelloMessage is sent by the client on a Netapp connection to indicate
|
||||
/// that they are also a server and ready to recieve incoming connections
|
||||
/// at the specified address and port. If the client doesn't know their
|
||||
/// public address, they don't need to specify it and we look at the
|
||||
/// remote address of the socket is used instead.
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub(crate) struct HelloMessage {
|
||||
pub server_addr: Option<IpAddr>,
|
||||
|
@ -56,9 +61,6 @@ type OnDisconnectHandler = Box<dyn Fn(NodeID, bool) + Send + Sync>;
|
|||
/// NetApp can be used in a stand-alone fashion or together with a peering strategy.
|
||||
/// If using it alone, you will want to set `on_connect` and `on_disconnect` events
|
||||
/// in order to manage information about the current peer list.
|
||||
///
|
||||
/// It is generally not necessary to use NetApp stand-alone, as the provided full mesh
|
||||
/// and RPS peering strategies take care of the most common use cases.
|
||||
pub struct NetApp {
|
||||
listen_params: ArcSwapOption<ListenParams>,
|
||||
|
||||
|
@ -83,7 +85,7 @@ pub struct NetApp {
|
|||
|
||||
struct ListenParams {
|
||||
listen_addr: SocketAddr,
|
||||
public_addr: Option<IpAddr>,
|
||||
public_addr: Option<SocketAddr>,
|
||||
}
|
||||
|
||||
impl NetApp {
|
||||
|
@ -180,7 +182,7 @@ impl NetApp {
|
|||
pub async fn listen(
|
||||
self: Arc<Self>,
|
||||
listen_addr: SocketAddr,
|
||||
public_addr: Option<IpAddr>,
|
||||
public_addr: Option<SocketAddr>,
|
||||
mut must_exit: watch::Receiver<bool>,
|
||||
) {
|
||||
let listen_params = ListenParams {
|
||||
|
@ -396,8 +398,11 @@ impl NetApp {
|
|||
}
|
||||
|
||||
if let Some(lp) = self.listen_params.load_full() {
|
||||
let server_addr = lp.public_addr;
|
||||
let server_port = lp.listen_addr.port();
|
||||
let server_addr = lp.public_addr.map(|x| x.ip());
|
||||
let server_port = lp
|
||||
.public_addr
|
||||
.map(|x| x.port())
|
||||
.unwrap_or(lp.listen_addr.port());
|
||||
let hello_endpoint = self.hello_endpoint.load_full().unwrap();
|
||||
tokio::spawn(async move {
|
||||
hello_endpoint
|
||||
|
|
|
@ -98,7 +98,6 @@ pub struct System {
|
|||
system_endpoint: Arc<Endpoint<SystemRpc, System>>,
|
||||
|
||||
rpc_listen_addr: SocketAddr,
|
||||
#[cfg(any(feature = "consul-discovery", feature = "kubernetes-discovery"))]
|
||||
rpc_public_addr: Option<SocketAddr>,
|
||||
bootstrap_peers: Vec<String>,
|
||||
|
||||
|
@ -369,7 +368,6 @@ impl System {
|
|||
replication_mode,
|
||||
replication_factor,
|
||||
rpc_listen_addr: config.rpc_bind_addr,
|
||||
#[cfg(any(feature = "consul-discovery", feature = "kubernetes-discovery"))]
|
||||
rpc_public_addr,
|
||||
bootstrap_peers: config.bootstrap_peers.clone(),
|
||||
#[cfg(feature = "consul-discovery")]
|
||||
|
@ -390,9 +388,11 @@ impl System {
|
|||
/// Perform bootstraping, starting the ping loop
|
||||
pub async fn run(self: Arc<Self>, must_exit: watch::Receiver<bool>) {
|
||||
join!(
|
||||
self.netapp
|
||||
.clone()
|
||||
.listen(self.rpc_listen_addr, None, must_exit.clone()),
|
||||
self.netapp.clone().listen(
|
||||
self.rpc_listen_addr,
|
||||
self.rpc_public_addr,
|
||||
must_exit.clone()
|
||||
),
|
||||
self.peering.clone().run(must_exit.clone()),
|
||||
self.discovery_loop(must_exit.clone()),
|
||||
self.status_exchange_loop(must_exit.clone()),
|
||||
|
|
Loading…
Reference in a new issue