This is an automated email from the ASF dual-hosted git repository. koushiro pushed a commit to branch extract-memcached-service in repository https://gitbox.apache.org/repos/asf/opendal.git
commit b07ee5337c114b34ec0f1f86a3bfcc23df81e5f7 Author: koushiro <[email protected]> AuthorDate: Tue Dec 16 14:40:20 2025 +0800 refactor: Split memcached service to new crate --- core/Cargo.lock | 13 +++++++++++++ core/Cargo.toml | 5 +++-- core/core/Cargo.toml | 1 - core/core/src/services/mod.rs | 5 ----- core/services/{sqlite => memcached}/Cargo.toml | 13 ++++++------- .../memcached => services/memcached/src}/backend.rs | 5 +++-- .../memcached => services/memcached/src}/binary.rs | 7 +++---- .../memcached => services/memcached/src}/config.rs | 19 ++++++++++--------- .../memcached => services/memcached/src}/core.rs | 9 ++++++--- .../memcached => services/memcached/src}/deleter.rs | 6 +++--- .../memcached => services/memcached/src}/docs.md | 4 ++-- .../mod.rs => services/memcached/src/lib.rs} | 11 +++++++---- .../memcached => services/memcached/src}/writer.rs | 5 +++-- core/services/sqlite/Cargo.toml | 1 - core/src/lib.rs | 2 ++ 15 files changed, 61 insertions(+), 45 deletions(-) diff --git a/core/Cargo.lock b/core/Cargo.lock index fcc412432..aab5d4225 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -5563,6 +5563,7 @@ dependencies = [ "opendal-service-ghac", "opendal-service-hdfs-native", "opendal-service-ipfs", + "opendal-service-memcached", "opendal-service-moka", "opendal-service-mysql", "opendal-service-obs", @@ -6064,6 +6065,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "opendal-service-memcached" +version = "0.55.0" +dependencies = [ + "ctor", + "fastpool", + "http 1.4.0", + "opendal-core", + "serde", + "tokio", +] + [[package]] name = "opendal-service-moka" version = "0.55.0" diff --git a/core/Cargo.toml b/core/Cargo.toml index e28afa65c..3db839b2d 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -131,7 +131,7 @@ services-ipfs = ["dep:opendal-service-ipfs"] services-ipmfs = ["opendal-core/services-ipmfs"] services-koofr = ["opendal-core/services-koofr"] services-lakefs = ["opendal-core/services-lakefs"] -services-memcached = ["opendal-core/services-memcached"] +services-memcached = ["dep:opendal-service-memcached"] services-memory = ["opendal-core/services-memory"] services-mini-moka = ["opendal-core/services-mini-moka"] services-moka = ["dep:opendal-service-moka"] @@ -214,14 +214,15 @@ opendal-service-gcs = { path = "services/gcs", version = "0.55.0", optional = tr opendal-service-ghac = { path = "services/ghac", version = "0.55.0", optional = true, default-features = false } opendal-service-hdfs-native = { path = "services/hdfs-native", version = "0.55.0", optional = true, default-features = false } opendal-service-ipfs = { path = "services/ipfs", version = "0.55.0", optional = true, default-features = false } +opendal-service-memcached = { path = "services/memcached", version = "0.55.0", optional = true, default-features = false } opendal-service-moka = { path = "services/moka", version = "0.55.0", optional = true, default-features = false } opendal-service-mysql = { path = "services/mysql", version = "0.55.0", optional = true, default-features = false } opendal-service-obs = { path = "services/obs", version = "0.55.0", optional = true, default-features = false } opendal-service-oss = { path = "services/oss", version = "0.55.0", optional = true, default-features = false } opendal-service-postgresql = { path = "services/postgresql", version = "0.55.0", optional = true, default-features = false } opendal-service-s3 = { path = "services/s3", version = "0.55.0", optional = true, default-features = false } -opendal-service-sqlite = { path = "services/sqlite", version = "0.55.0", optional = true, default-features = false } opendal-service-sled = { path = "services/sled", version = "0.55.0", optional = true, default-features = false } +opendal-service-sqlite = { path = "services/sqlite", version = "0.55.0", optional = true, default-features = false } opendal-service-tikv = { path = "services/tikv", version = "0.55.0", optional = true, default-features = false } opendal-service-vercel-blob = { path = "services/vercel-blob", version = "0.55.0", optional = true, default-features = false } diff --git a/core/core/Cargo.toml b/core/core/Cargo.toml index 855ed1a41..19f0381bd 100644 --- a/core/core/Cargo.toml +++ b/core/core/Cargo.toml @@ -95,7 +95,6 @@ services-huggingface = [] services-ipmfs = [] services-koofr = [] services-lakefs = [] -services-memcached = ["dep:fastpool"] services-memory = [] services-mini-moka = ["dep:mini-moka"] services-mongodb = ["dep:mongodb", "dep:mongodb-internal-macros"] diff --git a/core/core/src/services/mod.rs b/core/core/src/services/mod.rs index 2f211a4f5..95aaea11d 100644 --- a/core/core/src/services/mod.rs +++ b/core/core/src/services/mod.rs @@ -114,11 +114,6 @@ mod lakefs; #[cfg(feature = "services-lakefs")] pub use lakefs::*; -#[cfg(feature = "services-memcached")] -mod memcached; -#[cfg(feature = "services-memcached")] -pub use memcached::*; - #[cfg(feature = "services-memory")] mod memory; #[cfg(feature = "services-memory")] diff --git a/core/services/sqlite/Cargo.toml b/core/services/memcached/Cargo.toml similarity index 86% copy from core/services/sqlite/Cargo.toml copy to core/services/memcached/Cargo.toml index 5afc1e0a1..a9ddf394d 100644 --- a/core/services/sqlite/Cargo.toml +++ b/core/services/memcached/Cargo.toml @@ -16,8 +16,8 @@ # under the License. [package] -description = "Apache OpenDAL SQLite service implementation" -name = "opendal-service-sqlite" +description = "Apache OpenDAL Memcached service implementation" +name = "opendal-service-memcached" authors = { workspace = true } edition = { workspace = true } @@ -31,13 +31,12 @@ version = { workspace = true } all-features = true [dependencies] -opendal-core = { path = "../../core", version = "0.55.0", default-features = false } - ctor = { workspace = true } -mea = { version = "0.5.1" } +fastpool = "1.0.2" +http = { workspace = true } +opendal-core = { path = "../../core", version = "0.55.0", default-features = false } serde = { workspace = true, features = ["derive"] } -sqlx = { version = "0.8.0", features = ["runtime-tokio-rustls", "sqlite"] } +tokio = { workspace = true, features = ["net", "io-util"] } [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } - diff --git a/core/core/src/services/memcached/backend.rs b/core/services/memcached/src/backend.rs similarity index 99% rename from core/core/src/services/memcached/backend.rs rename to core/services/memcached/src/backend.rs index 9544b0c7d..12ab94f0b 100644 --- a/core/core/src/services/memcached/backend.rs +++ b/core/services/memcached/src/backend.rs @@ -17,13 +17,14 @@ use std::sync::Arc; +use opendal_core::raw::*; +use opendal_core::*; + use super::MEMCACHED_SCHEME; use super::config::MemcachedConfig; use super::core::*; use super::deleter::MemcachedDeleter; use super::writer::MemcachedWriter; -use crate::raw::*; -use crate::*; /// [Memcached](https://memcached.org/) service support. #[doc = include_str!("docs.md")] diff --git a/core/core/src/services/memcached/binary.rs b/core/services/memcached/src/binary.rs similarity index 99% rename from core/core/src/services/memcached/binary.rs rename to core/services/memcached/src/binary.rs index d433f3fce..205b94fca 100644 --- a/core/core/src/services/memcached/binary.rs +++ b/core/services/memcached/src/binary.rs @@ -15,15 +15,14 @@ // specific language governing permissions and limitations // under the License. +use opendal_core::raw::*; +use opendal_core::*; +use tokio::io; use tokio::io::AsyncReadExt; use tokio::io::AsyncWriteExt; use tokio::io::BufReader; -use tokio::io::{self}; use tokio::net::TcpStream; -use crate::raw::*; -use crate::*; - pub(super) mod constants { pub const OK_STATUS: u16 = 0x0; pub const KEY_NOT_FOUND: u16 = 0x1; diff --git a/core/core/src/services/memcached/config.rs b/core/services/memcached/src/config.rs similarity index 89% rename from core/core/src/services/memcached/config.rs rename to core/services/memcached/src/config.rs index 0ace5014d..374c1dbc3 100644 --- a/core/core/src/services/memcached/config.rs +++ b/core/services/memcached/src/config.rs @@ -17,11 +17,14 @@ use std::fmt::Debug; +use opendal_core::Configurator; +use opendal_core::OperatorUri; +use opendal_core::Result; +use opendal_core::raw::*; use serde::Deserialize; use serde::Serialize; use super::backend::MemcachedBuilder; -use crate::raw::*; /// Config for MemCached services support #[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)] @@ -59,10 +62,10 @@ impl Debug for MemcachedConfig { } } -impl crate::Configurator for MemcachedConfig { +impl Configurator for MemcachedConfig { type Builder = MemcachedBuilder; - fn from_uri(uri: &crate::types::OperatorUri) -> crate::Result<Self> { + fn from_uri(uri: &OperatorUri) -> Result<Self> { let mut map = uri.options().clone(); if let Some(authority) = uri.authority() { map.insert("endpoint".to_string(), format!("tcp://{authority}")); @@ -85,19 +88,17 @@ impl crate::Configurator for MemcachedConfig { #[cfg(test)] mod tests { use super::*; - use crate::Configurator; - use crate::types::OperatorUri; #[test] - fn from_uri_sets_endpoint_and_root() { + fn from_uri_sets_endpoint_and_root() -> Result<()> { let uri = OperatorUri::new( "memcached://cache.local:11211/app/session", Vec::<(String, String)>::new(), - ) - .unwrap(); + )?; - let cfg = MemcachedConfig::from_uri(&uri).unwrap(); + let cfg = MemcachedConfig::from_uri(&uri)?; assert_eq!(cfg.endpoint.as_deref(), Some("tcp://cache.local:11211")); assert_eq!(cfg.root.as_deref(), Some("app/session")); + Ok(()) } } diff --git a/core/core/src/services/memcached/core.rs b/core/services/memcached/src/core.rs similarity index 96% rename from core/core/src/services/memcached/core.rs rename to core/services/memcached/src/core.rs index 25b097314..f05b8f48f 100644 --- a/core/core/src/services/memcached/core.rs +++ b/core/services/memcached/src/core.rs @@ -15,13 +15,16 @@ // specific language governing permissions and limitations // under the License. -use fastpool::{ManageObject, ObjectStatus, bounded}; use std::sync::Arc; + +use fastpool::ManageObject; +use fastpool::ObjectStatus; +use fastpool::bounded; +use opendal_core::raw::*; +use opendal_core::*; use tokio::net::TcpStream; use super::binary; -use crate::raw::*; -use crate::*; /// A connection manager for `memcache_async::ascii::Protocol`. #[derive(Clone)] diff --git a/core/core/src/services/memcached/deleter.rs b/core/services/memcached/src/deleter.rs similarity index 95% rename from core/core/src/services/memcached/deleter.rs rename to core/services/memcached/src/deleter.rs index 725863711..263c2377c 100644 --- a/core/core/src/services/memcached/deleter.rs +++ b/core/services/memcached/src/deleter.rs @@ -17,10 +17,10 @@ use std::sync::Arc; +use opendal_core::raw::*; +use opendal_core::*; + use super::core::*; -use crate::raw::oio; -use crate::raw::*; -use crate::*; pub struct MemcachedDeleter { core: Arc<MemcachedCore>, diff --git a/core/core/src/services/memcached/docs.md b/core/services/memcached/src/docs.md similarity index 93% rename from core/core/src/services/memcached/docs.md rename to core/services/memcached/src/docs.md index 7c3e76230..e740a64fa 100644 --- a/core/core/src/services/memcached/docs.md +++ b/core/services/memcached/src/docs.md @@ -27,9 +27,9 @@ You can refer to [`MemcachedBuilder`]'s docs for more information ### Via Builder ```rust,no_run -use anyhow::Result; -use opendal_core::services::Memcached; use opendal_core::Operator; +use opendal_core::Result; +use opendal_service_memcached::Memcached; #[tokio::main] async fn main() -> Result<()> { diff --git a/core/core/src/services/memcached/mod.rs b/core/services/memcached/src/lib.rs similarity index 84% rename from core/core/src/services/memcached/mod.rs rename to core/services/memcached/src/lib.rs index c10fef6a0..6555ef270 100644 --- a/core/core/src/services/memcached/mod.rs +++ b/core/services/memcached/src/lib.rs @@ -15,10 +15,10 @@ // specific language governing permissions and limitations // under the License. -/// Default scheme for memcached service. -pub const MEMCACHED_SCHEME: &str = "memcached"; +//! Memcached service implementation for Apache OpenDAL. -use crate::types::DEFAULT_OPERATOR_REGISTRY; +#![cfg_attr(docsrs, feature(doc_cfg))] +#![deny(missing_docs)] mod backend; mod binary; @@ -30,7 +30,10 @@ mod writer; pub use backend::MemcachedBuilder as Memcached; pub use config::MemcachedConfig; +/// Default scheme for memcached service. +pub const MEMCACHED_SCHEME: &str = "memcached"; + #[ctor::ctor] fn register_memcached_service() { - DEFAULT_OPERATOR_REGISTRY.register::<Memcached>(MEMCACHED_SCHEME); + opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<Memcached>(MEMCACHED_SCHEME); } diff --git a/core/core/src/services/memcached/writer.rs b/core/services/memcached/src/writer.rs similarity index 97% rename from core/core/src/services/memcached/writer.rs rename to core/services/memcached/src/writer.rs index bb2e843b3..bd5f0e476 100644 --- a/core/core/src/services/memcached/writer.rs +++ b/core/services/memcached/src/writer.rs @@ -17,9 +17,10 @@ use std::sync::Arc; +use opendal_core::raw::oio; +use opendal_core::*; + use super::core::*; -use crate::raw::oio; -use crate::*; pub struct MemcachedWriter { core: Arc<MemcachedCore>, diff --git a/core/services/sqlite/Cargo.toml b/core/services/sqlite/Cargo.toml index 5afc1e0a1..00867279c 100644 --- a/core/services/sqlite/Cargo.toml +++ b/core/services/sqlite/Cargo.toml @@ -40,4 +40,3 @@ sqlx = { version = "0.8.0", features = ["runtime-tokio-rustls", "sqlite"] } [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } - diff --git a/core/src/lib.rs b/core/src/lib.rs index 100f746b1..efb1205e1 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -51,6 +51,8 @@ pub mod services { pub use opendal_service_hdfs_native::*; #[cfg(feature = "services-ipfs")] pub use opendal_service_ipfs::*; + #[cfg(feature = "services-memcached")] + pub use opendal_service_memcached::*; #[cfg(feature = "services-moka")] pub use opendal_service_moka::*; #[cfg(feature = "services-mysql")]
