mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-02 17:15:43 +00:00
peer_mgr: unregister rpc in Drop
This commit is contained in:
@@ -16,6 +16,7 @@ use crate::utils::DeterministicDigest;
|
|||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use moka::future::Cache;
|
use moka::future::Cache;
|
||||||
|
use std::ops::Deref;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tracing::instrument;
|
use tracing::instrument;
|
||||||
@@ -41,35 +42,15 @@ impl TryFrom<DnsExportConfig> for DnsPeerInfo {
|
|||||||
const DNS_PEER_TTL: Duration = Duration::from_secs(3);
|
const DNS_PEER_TTL: Duration = Duration::from_secs(3);
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct DnsPeerMgr {
|
pub struct DnsPeerMgrInner {
|
||||||
peers: Cache<PeerId, DnsPeerInfo>,
|
peers: Cache<PeerId, DnsPeerInfo>,
|
||||||
pub(super) dirty: DirtyFlag,
|
pub dirty: DirtyFlag,
|
||||||
|
|
||||||
peer_mgr: Arc<PeerManager>,
|
peer_mgr: Arc<PeerManager>,
|
||||||
global_ctx: ArcGlobalCtx,
|
global_ctx: ArcGlobalCtx,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DnsPeerMgr {
|
impl DnsPeerMgrInner {
|
||||||
pub fn new(peer_mgr: Arc<PeerManager>, global_ctx: ArcGlobalCtx) -> Self {
|
|
||||||
Self {
|
|
||||||
peers: Cache::builder().time_to_live(DNS_PEER_TTL).build(),
|
|
||||||
dirty: Default::default(),
|
|
||||||
peer_mgr,
|
|
||||||
global_ctx,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn register(self: &Arc<Self>) {
|
|
||||||
self.peer_mgr
|
|
||||||
.get_peer_rpc_mgr()
|
|
||||||
.rpc_server()
|
|
||||||
.registry()
|
|
||||||
.register(
|
|
||||||
DnsPeerMgrRpcServer::new_arc(self.clone()),
|
|
||||||
&self.global_ctx.get_network_name(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn snapshot(&self) -> DnsSnapshot {
|
pub fn snapshot(&self) -> DnsSnapshot {
|
||||||
let global_ctx = &self.global_ctx;
|
let global_ctx = &self.global_ctx;
|
||||||
|
|
||||||
@@ -149,7 +130,7 @@ impl DnsPeerMgr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl DnsPeerMgrRpc for DnsPeerMgr {
|
impl DnsPeerMgrRpc for DnsPeerMgrInner {
|
||||||
type Controller = BaseController;
|
type Controller = BaseController;
|
||||||
|
|
||||||
async fn get_export_config(
|
async fn get_export_config(
|
||||||
@@ -160,3 +141,53 @@ impl DnsPeerMgrRpc for DnsPeerMgr {
|
|||||||
Ok(self.global_ctx.dns_export_config())
|
Ok(self.global_ctx.dns_export_config())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct DnsPeerMgr(Arc<DnsPeerMgrInner>);
|
||||||
|
|
||||||
|
impl DnsPeerMgr {
|
||||||
|
pub fn new(peer_mgr: Arc<PeerManager>, global_ctx: ArcGlobalCtx) -> Self {
|
||||||
|
Self(Arc::new(DnsPeerMgrInner {
|
||||||
|
peers: Cache::builder().time_to_live(DNS_PEER_TTL).build(),
|
||||||
|
dirty: Default::default(),
|
||||||
|
peer_mgr,
|
||||||
|
global_ctx,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn register(&self) {
|
||||||
|
self.peer_mgr
|
||||||
|
.get_peer_rpc_mgr()
|
||||||
|
.rpc_server()
|
||||||
|
.registry()
|
||||||
|
.register(
|
||||||
|
DnsPeerMgrRpcServer::new_arc(self.0.clone()),
|
||||||
|
&self.global_ctx.get_network_name(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn unregister(&self) -> Option<()> {
|
||||||
|
self.peer_mgr
|
||||||
|
.get_peer_rpc_mgr()
|
||||||
|
.rpc_server()
|
||||||
|
.registry()
|
||||||
|
.unregister(
|
||||||
|
DnsPeerMgrRpcServer::new_arc(self.0.clone()),
|
||||||
|
&self.global_ctx.get_network_name(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Deref for DnsPeerMgr {
|
||||||
|
type Target = DnsPeerMgrInner;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for DnsPeerMgr {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
self.unregister();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user