This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git
The following commit(s) were added to refs/heads/main by this push:
new 03e72a5b8 refactor: Split service b2 out of core (#6982)
03e72a5b8 is described below
commit 03e72a5b8cfb02115e0b6bea18e0c9083932c69c
Author: Jintao Zhang <[email protected]>
AuthorDate: Tue Dec 16 15:42:22 2025 +0800
refactor: Split service b2 out of core (#6982)
Signed-off-by: Jintao Zhang <[email protected]>
---
core/Cargo.lock | 16 ++++++++++++++++
core/Cargo.toml | 5 +++--
core/core/Cargo.toml | 1 -
core/core/src/services/mod.rs | 5 -----
core/services/{sqlite => b2}/Cargo.toml | 16 +++++++++++-----
.../{core/src/services/b2 => services/b2/src}/backend.rs | 8 ++++++--
core/{core/src/services/b2 => services/b2/src}/config.rs | 8 ++++----
core/{core/src/services/b2 => services/b2/src}/core.rs | 4 ++--
.../{core/src/services/b2 => services/b2/src}/deleter.rs | 4 ++--
core/{core/src/services/b2 => services/b2/src}/docs.md | 0
core/{core/src/services/b2 => services/b2/src}/error.rs | 8 ++++----
.../src/services/b2/mod.rs => services/b2/src/lib.rs} | 6 +++++-
core/{core/src/services/b2 => services/b2/src}/lister.rs | 4 ++--
core/{core/src/services/b2 => services/b2/src}/writer.rs | 4 ++--
core/services/sqlite/Cargo.toml | 1 -
core/src/lib.rs | 2 ++
16 files changed, 59 insertions(+), 33 deletions(-)
diff --git a/core/Cargo.lock b/core/Cargo.lock
index fcc412432..bfbf62c4f 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -5556,6 +5556,7 @@ dependencies = [
"opendal-service-azblob",
"opendal-service-azdls",
"opendal-service-azfile",
+ "opendal-service-b2",
"opendal-service-cloudflare-kv",
"opendal-service-fs",
"opendal-service-ftp",
@@ -5955,6 +5956,21 @@ dependencies = [
"reqsign",
]
+[[package]]
+name = "opendal-service-b2"
+version = "0.55.0"
+dependencies = [
+ "bytes",
+ "ctor",
+ "http 1.4.0",
+ "log",
+ "mea",
+ "opendal-core",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
[[package]]
name = "opendal-service-cloudflare-kv"
version = "0.55.0"
diff --git a/core/Cargo.toml b/core/Cargo.toml
index e28afa65c..bd6f82364 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -105,7 +105,7 @@ services-alluxio = ["dep:opendal-service-alluxio"]
services-azblob = ["dep:opendal-service-azblob"]
services-azdls = ["dep:opendal-service-azdls"]
services-azfile = ["dep:opendal-service-azfile"]
-services-b2 = ["opendal-core/services-b2"]
+services-b2 = ["dep:opendal-service-b2"]
services-cacache = ["opendal-core/services-cacache"]
services-cloudflare-kv = ["dep:opendal-service-cloudflare-kv"]
services-compfs = ["opendal-core/services-compfs"]
@@ -207,6 +207,7 @@ opendal-service-alluxio = { path = "services/alluxio",
version = "0.55.0", optio
opendal-service-azblob = { path = "services/azblob", version = "0.55.0",
optional = true, default-features = false }
opendal-service-azdls = { path = "services/azdls", version = "0.55.0",
optional = true, default-features = false }
opendal-service-azfile = { path = "services/azfile", version = "0.55.0",
optional = true, default-features = false }
+opendal-service-b2 = { path = "services/b2", version = "0.55.0", optional =
true, default-features = false }
opendal-service-cloudflare-kv = { path = "services/cloudflare-kv", version =
"0.55.0", optional = true, default-features = false }
opendal-service-fs = { path = "services/fs", version = "0.55.0", optional =
true, default-features = false }
opendal-service-ftp = { path = "services/ftp", version = "0.55.0", optional =
true, default-features = false }
@@ -220,8 +221,8 @@ opendal-service-obs = { path = "services/obs", version =
"0.55.0", optional = tr
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..63094190f 100644
--- a/core/core/Cargo.toml
+++ b/core/core/Cargo.toml
@@ -72,7 +72,6 @@ executors-tokio = ["tokio/rt"]
# Enable dtrace support.
layers-dtrace = ["dep:probe"]
-services-b2 = []
services-cacache = ["dep:cacache"]
services-compfs = ["dep:compio"]
services-cos = [
diff --git a/core/core/src/services/mod.rs b/core/core/src/services/mod.rs
index 2f211a4f5..b9687cc05 100644
--- a/core/core/src/services/mod.rs
+++ b/core/core/src/services/mod.rs
@@ -19,11 +19,6 @@
//!
//! More ongoing services support is tracked at
[opendal#5](https://github.com/apache/opendal/issues/5). Please feel free to
submit issues if there are services not covered.
-#[cfg(feature = "services-b2")]
-mod b2;
-#[cfg(feature = "services-b2")]
-pub use b2::*;
-
#[cfg(feature = "services-cacache")]
mod cacache;
#[cfg(feature = "services-cacache")]
diff --git a/core/services/sqlite/Cargo.toml b/core/services/b2/Cargo.toml
similarity index 81%
copy from core/services/sqlite/Cargo.toml
copy to core/services/b2/Cargo.toml
index 5afc1e0a1..74c84ddee 100644
--- a/core/services/sqlite/Cargo.toml
+++ b/core/services/b2/Cargo.toml
@@ -16,8 +16,8 @@
# under the License.
[package]
-description = "Apache OpenDAL SQLite service implementation"
-name = "opendal-service-sqlite"
+description = "Apache OpenDAL B2 service implementation"
+name = "opendal-service-b2"
authors = { workspace = true }
edition = { workspace = true }
@@ -33,11 +33,17 @@ all-features = true
[dependencies]
opendal-core = { path = "../../core", version = "0.55.0", default-features =
false }
+bytes = { workspace = true }
ctor = { workspace = true }
+http = { workspace = true }
+log = { workspace = true }
mea = { version = "0.5.1" }
serde = { workspace = true, features = ["derive"] }
-sqlx = { version = "0.8.0", features = ["runtime-tokio-rustls", "sqlite"] }
+serde_json = { workspace = true }
[dev-dependencies]
-tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
-
+tokio = { workspace = true, features = [
+ "macros",
+ "rt-multi-thread",
+ "io-util",
+] }
diff --git a/core/core/src/services/b2/backend.rs
b/core/services/b2/src/backend.rs
similarity index 98%
rename from core/core/src/services/b2/backend.rs
rename to core/services/b2/src/backend.rs
index 9c5464fc2..c1f0936f2 100644
--- a/core/core/src/services/b2/backend.rs
+++ b/core/services/b2/src/backend.rs
@@ -35,8 +35,8 @@ use super::error::parse_error;
use super::lister::B2Lister;
use super::writer::B2Writer;
use super::writer::B2Writers;
-use crate::raw::*;
-use crate::*;
+use opendal_core::raw::*;
+use opendal_core::*;
/// [b2](https://www.backblaze.com/cloud-storage) services support.
#[doc = include_str!("docs.md")]
@@ -394,6 +394,10 @@ impl Access for B2Backend {
ErrorKind::Unsupported,
"operation is not supported",
)),
+ _ => Err(Error::new(
+ ErrorKind::Unsupported,
+ "operation is not supported",
+ )),
}
}
}
diff --git a/core/core/src/services/b2/config.rs
b/core/services/b2/src/config.rs
similarity index 93%
rename from core/core/src/services/b2/config.rs
rename to core/services/b2/src/config.rs
index 48268f715..516c26322 100644
--- a/core/core/src/services/b2/config.rs
+++ b/core/services/b2/src/config.rs
@@ -62,10 +62,10 @@ impl Debug for B2Config {
}
}
-impl crate::Configurator for B2Config {
+impl opendal_core::Configurator for B2Config {
type Builder = B2Builder;
- fn from_uri(uri: &crate::types::OperatorUri) -> crate::Result<Self> {
+ fn from_uri(uri: &opendal_core::OperatorUri) -> opendal_core::Result<Self>
{
let mut map = uri.options().clone();
if let Some(name) = uri.name() {
@@ -87,8 +87,8 @@ impl crate::Configurator for B2Config {
#[cfg(test)]
mod tests {
use super::*;
- use crate::Configurator;
- use crate::types::OperatorUri;
+ use opendal_core::Configurator;
+ use opendal_core::OperatorUri;
#[test]
fn from_uri_extracts_bucket_and_root() {
diff --git a/core/core/src/services/b2/core.rs b/core/services/b2/src/core.rs
similarity index 99%
rename from core/core/src/services/b2/core.rs
rename to core/services/b2/src/core.rs
index a266d77be..4a6aac756 100644
--- a/core/core/src/services/b2/core.rs
+++ b/core/services/b2/src/core.rs
@@ -31,8 +31,8 @@ use self::constants::X_BZ_CONTENT_SHA1;
use self::constants::X_BZ_FILE_NAME;
use super::core::constants::X_BZ_PART_NUMBER;
use super::error::parse_error;
-use crate::raw::*;
-use crate::*;
+use opendal_core::raw::*;
+use opendal_core::*;
pub(super) mod constants {
pub const X_BZ_FILE_NAME: &str = "X-Bz-File-Name";
diff --git a/core/core/src/services/b2/deleter.rs
b/core/services/b2/src/deleter.rs
similarity index 97%
rename from core/core/src/services/b2/deleter.rs
rename to core/services/b2/src/deleter.rs
index 79d33d9e7..e93008986 100644
--- a/core/core/src/services/b2/deleter.rs
+++ b/core/services/b2/src/deleter.rs
@@ -21,8 +21,8 @@ use http::StatusCode;
use super::core::*;
use super::error::parse_error;
-use crate::raw::*;
-use crate::*;
+use opendal_core::raw::*;
+use opendal_core::*;
pub struct B2Deleter {
core: Arc<B2Core>,
diff --git a/core/core/src/services/b2/docs.md b/core/services/b2/src/docs.md
similarity index 100%
rename from core/core/src/services/b2/docs.md
rename to core/services/b2/src/docs.md
diff --git a/core/core/src/services/b2/error.rs b/core/services/b2/src/error.rs
similarity index 96%
rename from core/core/src/services/b2/error.rs
rename to core/services/b2/src/error.rs
index 4c2328269..e80c68fda 100644
--- a/core/core/src/services/b2/error.rs
+++ b/core/services/b2/src/error.rs
@@ -19,8 +19,8 @@ use bytes::Buf;
use http::Response;
use serde::Deserialize;
-use crate::raw::*;
-use crate::*;
+use opendal_core::raw::*;
+use opendal_core::*;
/// the error response of b2
#[derive(Default, Debug, Deserialize)]
@@ -86,13 +86,13 @@ mod test {
let code = "already_hidden";
assert_eq!(
parse_b2_error_code(code),
- Some((crate::ErrorKind::AlreadyExists, false))
+ Some((opendal_core::ErrorKind::AlreadyExists, false))
);
let code = "no_such_file";
assert_eq!(
parse_b2_error_code(code),
- Some((crate::ErrorKind::NotFound, false))
+ Some((opendal_core::ErrorKind::NotFound, false))
);
let code = "not_found";
diff --git a/core/core/src/services/b2/mod.rs b/core/services/b2/src/lib.rs
similarity index 87%
rename from core/core/src/services/b2/mod.rs
rename to core/services/b2/src/lib.rs
index 09436541e..76ac1d363 100644
--- a/core/core/src/services/b2/mod.rs
+++ b/core/services/b2/src/lib.rs
@@ -15,10 +15,14 @@
// specific language governing permissions and limitations
// under the License.
+#![cfg_attr(docsrs, feature(doc_cfg))]
+//! B2 service implementation for Apache OpenDAL.
+#![deny(missing_docs)]
+
/// Default scheme for b2 service.
pub const B2_SCHEME: &str = "b2";
-use crate::types::DEFAULT_OPERATOR_REGISTRY;
+use opendal_core::DEFAULT_OPERATOR_REGISTRY;
mod backend;
mod config;
diff --git a/core/core/src/services/b2/lister.rs
b/core/services/b2/src/lister.rs
similarity index 98%
rename from core/core/src/services/b2/lister.rs
rename to core/services/b2/src/lister.rs
index c33be646a..d994ea101 100644
--- a/core/core/src/services/b2/lister.rs
+++ b/core/services/b2/src/lister.rs
@@ -23,8 +23,8 @@ use super::core::B2Core;
use super::core::ListFileNamesResponse;
use super::core::parse_file_info;
use super::error::parse_error;
-use crate::raw::*;
-use crate::*;
+use opendal_core::raw::*;
+use opendal_core::*;
pub struct B2Lister {
core: Arc<B2Core>,
diff --git a/core/core/src/services/b2/writer.rs
b/core/services/b2/src/writer.rs
similarity index 99%
rename from core/core/src/services/b2/writer.rs
rename to core/services/b2/src/writer.rs
index 8213642e3..e924a12e1 100644
--- a/core/core/src/services/b2/writer.rs
+++ b/core/services/b2/src/writer.rs
@@ -25,8 +25,8 @@ use super::core::StartLargeFileResponse;
use super::core::UploadPartResponse;
use super::core::UploadResponse;
use super::error::parse_error;
-use crate::raw::*;
-use crate::*;
+use opendal_core::raw::*;
+use opendal_core::*;
pub type B2Writers = oio::MultipartWriter<B2Writer>;
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..23a879bc3 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -37,6 +37,8 @@ pub mod services {
pub use opendal_service_azdls::*;
#[cfg(feature = "services-azfile")]
pub use opendal_service_azfile::*;
+ #[cfg(feature = "services-b2")]
+ pub use opendal_service_b2::*;
#[cfg(feature = "services-cloudflare-kv")]
pub use opendal_service_cloudflare_kv::*;
#[cfg(feature = "services-fs")]