#[derive(Debug)]
pub struct OplogSyncerConfig {
src: Src,
oplog_storage: OplogStorage,
}
impl OplogSyncerConfig {
pub fn get_src_uri(&self) -> &str {
&self.src.uri
}
pub fn get_oplog_storage_uri(&self) -> &str {
&self.oplog_storage.uri
}
}
#[derive(Debug)]
pub struct OplogStorage {
uri: String,
}
#[derive(Debug)]
pub struct Src {
uri: String,
}
#[derive(Debug)]
pub struct DetailSyncConf {
dst_uri: String,
db: String,
colls: Option<Vec<String>>,
collection_concurrent: usize,
doc_concurrent: usize,
}
fn number_of_cpus() -> usize {
num_cpus::get()
}
fn half_number_of_cpus() -> usize {
num_cpus::get() / 2
}
#[derive(Debug)]
pub struct DbSyncConf {
src: Src,
oplog_storage: OplogStorage,
conf: DetailSyncConf,
}
impl DbSyncConf {
pub fn new(
src_uri: String,
target_uri: String,
oplog_storage_uri: String,
db: String,
colls: Option<Vec<String>>,
collection_concurrent: Option<usize>,
doc_concurrent: Option<usize>,
) -> Self {
DbSyncConf {
src: Src { uri: src_uri },
oplog_storage: {
OplogStorage {
uri: oplog_storage_uri,
}
},
conf: DetailSyncConf {
dst_uri: target_uri,
db,
colls,
collection_concurrent: collection_concurrent.unwrap_or_else(number_of_cpus),
doc_concurrent: doc_concurrent.unwrap_or_else(half_number_of_cpus),
},
}
}
pub fn get_db(&self) -> &str {
&self.conf.db
}
pub fn get_record_collection(&self) -> &str {
"oplog_records"
}
pub fn get_oplog_storage_uri(&self) -> &str {
&self.oplog_storage.uri
}
pub fn get_dst_uri(&self) -> &str {
&self.conf.dst_uri
}
pub fn get_src_uri(&self) -> &str {
&self.src.uri
}
pub fn get_collection_concurrent(&self) -> usize {
self.conf.collection_concurrent
}
pub fn get_doc_concurrent(&self) -> usize {
self.conf.doc_concurrent
}
pub fn get_colls(&self) -> &Option<Vec<String>> {
&self.conf.colls
}
}