From ee904292b2a0fb8246fd300f6319e4c3dfc00b05 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Tue, 7 Nov 2023 22:39:24 +0800 Subject: [PATCH 01/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/mod.rs | 2 +- core/src/services/tikv/backend.rs | 71 ++++++++++++++++++------------- core/src/services/tikv/mod.rs | 2 + 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/core/src/services/mod.rs b/core/src/services/mod.rs index 042f5660c8c8..6088274a7839 100644 --- a/core/src/services/mod.rs +++ b/core/src/services/mod.rs @@ -213,7 +213,7 @@ pub use self::redb::Redb; #[cfg(feature = "services-tikv")] mod tikv; #[cfg(feature = "services-tikv")] -pub use self::tikv::Tikv; +pub use self::tikv::TikvConfig; #[cfg(feature = "services-foundationdb")] mod foundationdb; diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 8dc46920a2f8..b681c1026039 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -32,10 +32,12 @@ use crate::ErrorKind; use crate::Scheme; use crate::*; -/// TiKV backend builder -#[doc = include_str!("docs.md")] -#[derive(Clone, Default)] -pub struct TikvBuilder { + +/// Config for Mysql services support. +#[derive(Default, Deserialize)] +#[serde(default)] +#[non_exhaustive] +pub struct TikvConfig { /// network address of the TiKV service. endpoints: Option>, /// whether using insecure connection to TiKV @@ -48,25 +50,45 @@ pub struct TikvBuilder { key_path: Option, } +impl Debug for TiKVConfig { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut d = f.debug_struct("TikvConfig"); + + d.field("endpoints", &self.endpoints) + .field("insecure", &self.insecure) + .field("ca_path", &self.ca_path) + .field("cert_path", &self.cert_path) + .field("key_path", &self.key_path) + .finish() + } +} + +/// TiKV backend builder +#[doc = include_str!("docs.md")] +#[derive(Clone, Default)] +pub struct TikvBuilder { + config: TikvConfig, +} + impl TikvBuilder { /// Set the network address of the TiKV service. pub fn endpoints(&mut self, endpoints: Vec) -> &mut Self { if !endpoints.is_empty() { - self.endpoints = Some(endpoints) + self.config.endpoints = Some(endpoints) } self } /// Set the insecure connection to TiKV. pub fn insecure(&mut self) -> &mut Self { - self.insecure = true; + self.config.insecure = true; self } /// Set the certificate authority file path. pub fn ca_path(&mut self, ca_path: &str) -> &mut Self { if !ca_path.is_empty() { - self.ca_path = Some(ca_path.to_string()) + self.config.ca_path = Some(ca_path.to_string()) } self } @@ -74,7 +96,7 @@ impl TikvBuilder { /// Set the certificate file path. pub fn cert_path(&mut self, cert_path: &str) -> &mut Self { if !cert_path.is_empty() { - self.cert_path = Some(cert_path.to_string()) + self.config.cert_path = Some(cert_path.to_string()) } self } @@ -82,7 +104,7 @@ impl TikvBuilder { /// Set the key file path. pub fn key_path(&mut self, key_path: &str) -> &mut Self { if !key_path.is_empty() { - self.key_path = Some(key_path.to_string()) + self.config.key_path = Some(key_path.to_string()) } self } @@ -93,23 +115,14 @@ impl Builder for TikvBuilder { type Accessor = Backend; fn from_map(map: HashMap) -> Self { - let mut builder = TikvBuilder::default(); - - map.get("endpoints") - .map(|v| v.split(',').map(|s| s.to_owned()).collect::>()) - .map(|v| builder.endpoints(v)); - map.get("insecure") - .filter(|v| *v == "on" || *v == "true") - .map(|_| builder.insecure()); - map.get("ca_path").map(|v| builder.ca_path(v)); - map.get("cert_path").map(|v| builder.cert_path(v)); - map.get("key_path").map(|v| builder.key_path(v)); - - builder + let config = Tikv::deserialize(ConfigDeserializer::new(map)) + .expect("config deserialize must succeed"); + + TikvBuilder { config } } fn build(&mut self) -> Result { - let endpoints = self.endpoints.take().ok_or_else(|| { + let endpoints = self.config.endpoints.take().ok_or_else(|| { Error::new( ErrorKind::ConfigInvalid, "endpoints is required but not set", @@ -117,8 +130,8 @@ impl Builder for TikvBuilder { .with_context("service", Scheme::Tikv) })?; - if self.insecure - && (self.ca_path.is_some() || self.key_path.is_some() || self.cert_path.is_some()) + if self.config.insecure + && (self.config.ca_path.is_some() || self.config.key_path.is_some() || self.config.cert_path.is_some()) { return Err( Error::new(ErrorKind::ConfigInvalid, "invalid tls configuration") @@ -130,10 +143,10 @@ impl Builder for TikvBuilder { Ok(Backend::new(Adapter { client: OnceCell::new(), endpoints, - insecure: self.insecure, - ca_path: self.ca_path.clone(), - cert_path: self.cert_path.clone(), - key_path: self.key_path.clone(), + insecure: self.config.insecure, + ca_path: self.config.ca_path.clone(), + cert_path: self.config.cert_path.clone(), + key_path: self.config.key_path.clone(), })) } } diff --git a/core/src/services/tikv/mod.rs b/core/src/services/tikv/mod.rs index c3310120641c..920418f0d173 100644 --- a/core/src/services/tikv/mod.rs +++ b/core/src/services/tikv/mod.rs @@ -18,3 +18,5 @@ mod backend; pub use backend::TikvBuilder as Tikv; +pub use backend::Tikvconfig; + From c581237178a7e30809995b4ab0ee7288fa67bd86 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:18:01 +0800 Subject: [PATCH 02/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index b681c1026039..ded250fb9383 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -166,8 +166,12 @@ pub struct Adapter { impl Debug for Adapter { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - let mut ds = f.debug_struct("Adapter"); - ds.field("endpoints", &self.endpoints); + f.debug_struct("Adapter") + .field("endpoints", &self.endpoints) + .field("insecure", &self.insecure) + .field("ca_path", &self.ca_path) + .field("cert_path", &self.cert_path) + .field("key_path", &self.key_path) ds.finish() } } From c589df68ea8fe7ec4e934a0ff7763cf42a17cb55 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:20:00 +0800 Subject: [PATCH 03/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index ded250fb9383..42571690622c 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -32,7 +32,6 @@ use crate::ErrorKind; use crate::Scheme; use crate::*; - /// Config for Mysql services support. #[derive(Default, Deserialize)] #[serde(default)] @@ -131,7 +130,9 @@ impl Builder for TikvBuilder { })?; if self.config.insecure - && (self.config.ca_path.is_some() || self.config.key_path.is_some() || self.config.cert_path.is_some()) + && (self.config.ca_path.is_some() + || self.config.key_path.is_some() + || self.config.cert_path.is_some()) { return Err( Error::new(ErrorKind::ConfigInvalid, "invalid tls configuration") @@ -171,7 +172,7 @@ impl Debug for Adapter { .field("insecure", &self.insecure) .field("ca_path", &self.ca_path) .field("cert_path", &self.cert_path) - .field("key_path", &self.key_path) + .field("key_path", &self.key_path); ds.finish() } } From abcd7f957e5f1dfb8ac09f8bdb114c1c540f5ae1 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:23:04 +0800 Subject: [PATCH 04/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/services/tikv/mod.rs b/core/src/services/tikv/mod.rs index 920418f0d173..ae9c15bd68c1 100644 --- a/core/src/services/tikv/mod.rs +++ b/core/src/services/tikv/mod.rs @@ -18,5 +18,4 @@ mod backend; pub use backend::TikvBuilder as Tikv; -pub use backend::Tikvconfig; - +pub use backend::TikvConfig; From a3d63d997a0d74e88d001bbb5657600e20047ad8 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:33:01 +0800 Subject: [PATCH 05/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 42571690622c..11d89d7ad359 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -22,6 +22,7 @@ use std::fmt::Formatter; use async_trait::async_trait; use tikv_client::Config; use tikv_client::RawClient; +use serde::Deserialize; use tokio::sync::OnceCell; use crate::raw::adapters::kv; @@ -49,7 +50,7 @@ pub struct TikvConfig { key_path: Option, } -impl Debug for TiKVConfig { +impl Debug for TikvConfig { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut d = f.debug_struct("TikvConfig"); @@ -114,7 +115,7 @@ impl Builder for TikvBuilder { type Accessor = Backend; fn from_map(map: HashMap) -> Self { - let config = Tikv::deserialize(ConfigDeserializer::new(map)) + let config = TikvConfig::deserialize(ConfigDeserializer::new(map)) .expect("config deserialize must succeed"); TikvBuilder { config } From 8ab1eeb32423ba266ea83ef6f46b2593cafb54aa Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:36:53 +0800 Subject: [PATCH 06/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 11d89d7ad359..f8ae24071ad2 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -20,9 +20,9 @@ use std::fmt::Debug; use std::fmt::Formatter; use async_trait::async_trait; +use serde::Deserialize; use tikv_client::Config; use tikv_client::RawClient; -use serde::Deserialize; use tokio::sync::OnceCell; use crate::raw::adapters::kv; From 95324592d5180fb6c51f810d694e8048c6fc4df5 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:52:09 +0800 Subject: [PATCH 07/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index f8ae24071ad2..3b77c60e31c0 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -34,7 +34,7 @@ use crate::Scheme; use crate::*; /// Config for Mysql services support. -#[derive(Default, Deserialize)] +#[derive(Default, Deserialize, Clone)] #[serde(default)] #[non_exhaustive] pub struct TikvConfig { From 7ce1172fd2f96b1b854e0b7865a7c43b2af0b421 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:55:15 +0800 Subject: [PATCH 08/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 3b77c60e31c0..11e4debda5f0 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -25,7 +25,7 @@ use tikv_client::Config; use tikv_client::RawClient; use tokio::sync::OnceCell; -use crate::raw::adapters::kv; +use crate::raw::*; use crate::Builder; use crate::Capability; use crate::Error; From 848cc6603d89896608b7d82bd2be6620ee7cd4db Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 10:59:46 +0800 Subject: [PATCH 09/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 11e4debda5f0..a7610d92e144 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -25,6 +25,7 @@ use tikv_client::Config; use tikv_client::RawClient; use tokio::sync::OnceCell; +use crate::raw::adapters::kv; use crate::raw::*; use crate::Builder; use crate::Capability; From 6ffa7855d20e5f1bb685f381d8d156e62626acfb Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 11:06:28 +0800 Subject: [PATCH 10/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index a7610d92e144..f200c037d41d 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -52,7 +52,7 @@ pub struct TikvConfig { } impl Debug for TikvConfig { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { let mut d = f.debug_struct("TikvConfig"); d.field("endpoints", &self.endpoints) @@ -169,13 +169,11 @@ pub struct Adapter { impl Debug for Adapter { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Adapter") - .field("endpoints", &self.endpoints) - .field("insecure", &self.insecure) - .field("ca_path", &self.ca_path) - .field("cert_path", &self.cert_path) - .field("key_path", &self.key_path); - ds.finish() + f.debug_struct("Adapter"); + let mut ds = f.debug_struct("Adapter"); + + ds.field("endpoints", &self.endpoints); + ds.finish(); } } From 56df5bcc293b72e8914503b82cce4ed5b2271193 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 11:08:36 +0800 Subject: [PATCH 11/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index f200c037d41d..3cbeeaf55ae1 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -173,7 +173,7 @@ impl Debug for Adapter { let mut ds = f.debug_struct("Adapter"); ds.field("endpoints", &self.endpoints); - ds.finish(); + ds.finish() } } From 38ebbbec3e156ee10375cbcec5b4a12f60126291 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 11:19:03 +0800 Subject: [PATCH 12/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 3cbeeaf55ae1..8aa9bc750368 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -71,6 +71,15 @@ pub struct TikvBuilder { config: TikvConfig, } +impl Debug for TikvBuilder { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let mut d = f.debug_struct("TikvBuilder"); + + d.field("config", &self.config); + d.finish_non_exhaustive() + } +} + impl TikvBuilder { /// Set the network address of the TiKV service. pub fn endpoints(&mut self, endpoints: Vec) -> &mut Self { From c90c397d84aa4b02b34523b59580df7a81e16798 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 11:24:45 +0800 Subject: [PATCH 13/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/services/mod.rs b/core/src/services/mod.rs index 6088274a7839..105fc034425f 100644 --- a/core/src/services/mod.rs +++ b/core/src/services/mod.rs @@ -213,6 +213,8 @@ pub use self::redb::Redb; #[cfg(feature = "services-tikv")] mod tikv; #[cfg(feature = "services-tikv")] +pub use self::tikv; +#[cfg(feature = "services-mysql")] pub use self::tikv::TikvConfig; #[cfg(feature = "services-foundationdb")] From ca3cb720cb4dbc26a5ce0a2babe33a413cc66a18 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 11:30:31 +0800 Subject: [PATCH 14/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/mod.rs b/core/src/services/mod.rs index 105fc034425f..ba653d15ff2a 100644 --- a/core/src/services/mod.rs +++ b/core/src/services/mod.rs @@ -213,7 +213,7 @@ pub use self::redb::Redb; #[cfg(feature = "services-tikv")] mod tikv; #[cfg(feature = "services-tikv")] -pub use self::tikv; +pub use self::tikv::Tikv; #[cfg(feature = "services-mysql")] pub use self::tikv::TikvConfig; From d51567aaacb5679db554bf5f07c0689086a3be1e Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 11:48:24 +0800 Subject: [PATCH 15/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 8aa9bc750368..86351d995f3a 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -178,7 +178,6 @@ pub struct Adapter { impl Debug for Adapter { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Adapter"); let mut ds = f.debug_struct("Adapter"); ds.field("endpoints", &self.endpoints); From 35c86aab5a5630a60b07387aabf02d5ef00d0201 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 12:30:46 +0800 Subject: [PATCH 16/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/mod.rs | 2 +- core/src/services/tikv/backend.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/services/mod.rs b/core/src/services/mod.rs index 07635b2d93d9..1d0d9a36ea58 100644 --- a/core/src/services/mod.rs +++ b/core/src/services/mod.rs @@ -220,7 +220,7 @@ pub use self::redb::Redb; mod tikv; #[cfg(feature = "services-tikv")] pub use self::tikv::Tikv; -#[cfg(feature = "services-mysql")] +#[cfg(feature = "services-tikv")] pub use self::tikv::TikvConfig; #[cfg(feature = "services-foundationdb")] diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 86351d995f3a..24e24de54551 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -40,15 +40,15 @@ use crate::*; #[non_exhaustive] pub struct TikvConfig { /// network address of the TiKV service. - endpoints: Option>, + pub endpoints: Option>, /// whether using insecure connection to TiKV - insecure: bool, + pub insecure: bool, /// certificate authority file path - ca_path: Option, + pub ca_path: Option, /// cert path - cert_path: Option, + pub cert_path: Option, /// key path - key_path: Option, + pub key_path: Option, } impl Debug for TikvConfig { From 1836318d56448ad8ebe2cecec12f095a8ab45759 Mon Sep 17 00:00:00 2001 From: caicancai <2356672992@qq.com> Date: Wed, 8 Nov 2023 13:33:25 +0800 Subject: [PATCH 17/17] refactor(service/tikv): add tikvConfig to implement ConfigDeserializer --- core/src/services/tikv/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 24e24de54551..e60394acaa12 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -34,7 +34,7 @@ use crate::ErrorKind; use crate::Scheme; use crate::*; -/// Config for Mysql services support. +/// Config for Tikv services support. #[derive(Default, Deserialize, Clone)] #[serde(default)] #[non_exhaustive]