Skip to content

Commit c6097cf

Browse files
feat: add OpenDAL-backed GooseFS object store support
Add `goosefs://` scheme support to `vortex-cloud`, bridging Tencent Cloud GooseFS through OpenDAL's `services::GooseFs` via `object_store_opendal`. Rust changes: - `vortex-cloud`: new `goosefs` Cargo feature and `opendal::goosefs` module with `GoosefsConfig`, `make_goosefs_store`, and URL-to-config translation (master_addr from properties -> URL authority -> GOOSEFS_MASTER_ADDR env) - `vortex-cloud/src/registry`: extend OpenDAL cfg gates to include `goosefs` - 7 unit tests covering missing master_addr, URL authority, env fallback, property override, HA mode, and explicit config construction Python bindings: - `vortex-python`: new `GoosefsStore` pyclass with keyword-only options (root, block_size, chunk_size, write_type, auth_type, auth_username) - `AnyVortexStore` accepts `GoosefsStore` in `read_url` / `write` - Python store module `vortex.store._goosefs` with graceful ImportError fallback when the `opendal` feature is not enabled - Type stub (`.pyi`) for `GoosefsStore` constructor Dependency note: goosefs-sdk v0.1.8 is pulled transitively via opendal-service-goosefs v0.57.0; no direct workspace dependency added. Signed-off-by: XuQianJin-Stars <forwardxu1211@gmail.com>
1 parent 08c336f commit c6097cf

11 files changed

Lines changed: 603 additions & 28 deletions

File tree

Cargo.lock

Lines changed: 144 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vortex-cloud/Cargo.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,15 @@ oss = [
5252
"object_store/cloud",
5353
"opendal/services-oss",
5454
]
55+
# Tencent Cloud GooseFS, the `goosefs://` scheme.
56+
goosefs = [
57+
"dep:opendal",
58+
"dep:object_store_opendal",
59+
"dep:tracing",
60+
"opendal/services-goosefs",
61+
]
5562
# Every OpenDAL-backed service.
56-
opendal = ["cos", "oss"]
63+
opendal = ["cos", "oss", "goosefs"]
5764

5865
[lints]
5966
workspace = true

vortex-cloud/src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
//! out of environment variables case-insensitively, matching how the `object_store` `from_env`
1111
//! builders behave.
1212
//! * `opendal` supplies stores for cloud services the `object_store` crate does not implement
13-
//! natively — Tencent Cloud COS and Alibaba Cloud OSS — bridged through
14-
//! `object_store_opendal`.
13+
//! natively — Tencent Cloud COS, Alibaba Cloud OSS, and Tencent Cloud GooseFS — bridged
14+
//! through `object_store_opendal`.
1515
//!
1616
//! Every Vortex language binding resolves URLs through this one crate, so a scheme added here is
1717
//! reachable from Python, Java and DuckDB alike.
@@ -25,12 +25,13 @@
2525
//! HTTP) it resolves URLs to.
2626
//! * `cos` — Tencent Cloud COS, the `cos://` scheme.
2727
//! * `oss` — Alibaba Cloud OSS, the `oss://` scheme.
28+
//! * `goosefs` — Tencent Cloud GooseFS, the `goosefs://` scheme.
2829
//! * `opendal` — every OpenDAL-backed service above.
2930
//!
3031
//! The `registry` feature picks up whichever OpenDAL services are enabled, so a consumer that
3132
//! turns on `oss` gets `oss://` resolution without touching its own scheme matching.
3233
33-
#[cfg(any(feature = "cos", feature = "oss"))]
34+
#[cfg(any(feature = "cos", feature = "goosefs", feature = "oss"))]
3435
pub mod opendal;
3536
#[cfg(feature = "registry")]
3637
mod registry;

0 commit comments

Comments
 (0)