From fe489186da81b67eb9bfb16b49f241b4ac9ad87d Mon Sep 17 00:00:00 2001 From: simonsan <14062932+simonsan@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:41:26 +0100 Subject: [PATCH 01/12] chore(core/blocking_operator): deduplicate deprecated `is_exist` logic (#5261) --- core/src/types/operator/blocking_operator.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/core/src/types/operator/blocking_operator.rs b/core/src/types/operator/blocking_operator.rs index 47f48d016512..38a95357f653 100644 --- a/core/src/types/operator/blocking_operator.rs +++ b/core/src/types/operator/blocking_operator.rs @@ -306,14 +306,7 @@ impl BlockingOperator { /// ``` #[deprecated(note = "rename to `exists` for consistence with `std::fs::exists`")] pub fn is_exist(&self, path: &str) -> Result { - let r = self.stat(path); - match r { - Ok(_) => Ok(true), - Err(err) => match err.kind() { - ErrorKind::NotFound => Ok(false), - _ => Err(err), - }, - } + self.exists(path) } /// Create a dir at given path. From b9e06bf7297aa9fbf5bc0c5c0a569283af44dfb3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:17:06 +0800 Subject: [PATCH 02/12] chore(deps): bump actions/cache from 3 to 4 (#5262) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci_bindings_ocaml.yml | 4 ++-- .github/workflows/docs.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci_bindings_ocaml.yml b/.github/workflows/ci_bindings_ocaml.yml index abc8d20e3f16..a5a6ded4c4fb 100644 --- a/.github/workflows/ci_bindings_ocaml.yml +++ b/.github/workflows/ci_bindings_ocaml.yml @@ -42,7 +42,7 @@ jobs: uses: actions/checkout@v4 - name: Cache OPAM dependencies - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.opam key: ${{ runner.os }}-opam-${{ hashFiles('bindings/ocaml/dune-project') }} @@ -51,7 +51,7 @@ jobs: ${{ runner.os }}-opam-doc- - name: Cache Dune build artifacts - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: bindings/ocaml/_build key: ${{ runner.os }}-dune-${{ hashFiles('bindings/ocaml/**/*.{ml,mli,opam}') }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 374345037284..2ca5beeabbf9 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -220,7 +220,7 @@ jobs: cabal update - name: Setup cache - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-cabal with: @@ -282,7 +282,7 @@ jobs: - uses: actions/checkout@v4 - name: Cache OPAM dependencies - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.opam key: ${{ runner.os }}-opam-doc-${{ hashFiles('bindings/ocaml/dune-project') }} @@ -291,7 +291,7 @@ jobs: ${{ runner.os }}-opam- - name: Cache Dune build artifacts - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: bindings/ocaml/_build key: ${{ runner.os }}-dune-doc-${{ hashFiles('bindings/ocaml/**/*.{ml,mli,opam}') }} From 8e142c8f8ac0c7d85bc710871667fbf820501b96 Mon Sep 17 00:00:00 2001 From: Jorge Hermo Date: Fri, 1 Nov 2024 14:50:10 +0100 Subject: [PATCH 03/12] chore: run object_store tests in CI (#5268) --- .github/workflows/ci_integration_object_store.yml | 4 ++++ integrations/object_store/src/lib.rs | 15 +++++---------- integrations/object_store/src/store.rs | 15 +++++---------- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci_integration_object_store.yml b/.github/workflows/ci_integration_object_store.yml index 824186aef1de..bedd48aa3e99 100644 --- a/.github/workflows/ci_integration_object_store.yml +++ b/.github/workflows/ci_integration_object_store.yml @@ -45,3 +45,7 @@ jobs: - name: Cargo clippy working-directory: integrations/object_store run: cargo clippy --all-targets --all-features -- -D warnings + + - name: Cargo test + working-directory: integrations/object_store + run: cargo test diff --git a/integrations/object_store/src/lib.rs b/integrations/object_store/src/lib.rs index 37b46d171bb2..2afe685eb89e 100644 --- a/integrations/object_store/src/lib.rs +++ b/integrations/object_store/src/lib.rs @@ -31,16 +31,11 @@ //! //! #[tokio::main] //! async fn main() { -//! let builder = S3::from_map( -//! vec![ -//! ("access_key".to_string(), "my_access_key".to_string()), -//! ("secret_key".to_string(), "my_secret_key".to_string()), -//! ("endpoint".to_string(), "my_endpoint".to_string()), -//! ("region".to_string(), "my_region".to_string()), -//! ] -//! .into_iter() -//! .collect(), -//! ).unwrap(); +//! let builder = S3::default() +//! .access_key_id("my_access_key") +//! .secret_access_key("my_secret_key") +//! .endpoint("my_endpoint") +//! .region("my_region"); //! //! // Create a new operator //! let operator = Operator::new(builder).unwrap().finish(); diff --git a/integrations/object_store/src/store.rs b/integrations/object_store/src/store.rs index d7dc8193a108..1339f1bb78fe 100644 --- a/integrations/object_store/src/store.rs +++ b/integrations/object_store/src/store.rs @@ -62,16 +62,11 @@ use tokio::sync::{Mutex, Notify}; /// /// #[tokio::main] /// async fn main() { -/// let builder = S3::from_map( -/// vec![ -/// ("access_key".to_string(), "my_access_key".to_string()), -/// ("secret_key".to_string(), "my_secret_key".to_string()), -/// ("endpoint".to_string(), "my_endpoint".to_string()), -/// ("region".to_string(), "my_region".to_string()), -/// ] -/// .into_iter() -/// .collect(), -/// ).unwrap(); +/// let builder = S3::default() +/// .access_key_id("my_access_key") +/// .secret_access_key("my_secret_key") +/// .endpoint("my_endpoint") +/// .region("my_region"); /// /// // Create a new operator /// let operator = Operator::new(builder).unwrap().finish(); From aa94e83d2fb314fc3881613e6c77dee907f546b9 Mon Sep 17 00:00:00 2001 From: TennyZhuang Date: Sat, 2 Nov 2024 11:55:09 +0800 Subject: [PATCH 04/12] feat(bindings/python): add sync `File.readline` (#5271) --- bindings/python/python/opendal/__init__.pyi | 1 + bindings/python/src/file.rs | 46 +++++++++++++++++++++ bindings/python/tests/test_read.py | 30 +++++++++++++- 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/bindings/python/python/opendal/__init__.pyi b/bindings/python/python/opendal/__init__.pyi index 0ebadaea2ee3..64fedbbf09c6 100644 --- a/bindings/python/python/opendal/__init__.pyi +++ b/bindings/python/python/opendal/__init__.pyi @@ -86,6 +86,7 @@ class AsyncOperator: @final class File: def read(self, size: Optional[int] = None) -> bytes: ... + def readline(self, size: Optional[int] = None) -> bytes: ... def write(self, bs: bytes) -> None: ... def seek(self, pos: int, whence: int = 0) -> int: ... def tell(self) -> int: ... diff --git a/bindings/python/src/file.rs b/bindings/python/src/file.rs index be7a461893e3..b23c6d2903cd 100644 --- a/bindings/python/src/file.rs +++ b/bindings/python/src/file.rs @@ -18,6 +18,7 @@ // Remove this `allow` after fixed. #![allow(clippy::unnecessary_fallible_conversions)] +use std::io::BufRead; use std::io::Read; use std::io::Seek; use std::io::SeekFrom; @@ -97,6 +98,51 @@ impl File { Buffer::new(buffer).into_bytes_ref(py) } + /// Read a single line from the file. + /// A newline character (`\n`) is left at the end of the string, and is only omitted on the last line of the file if the file doesn’t end in a newline. + /// If size is specified, at most size bytes will be read. + #[pyo3(signature = (size=None,))] + pub fn readline<'p>( + &'p mut self, + py: Python<'p>, + size: Option, + ) -> PyResult> { + let reader = match &mut self.0 { + FileState::Reader(r) => r, + FileState::Writer(_) => { + return Err(PyIOError::new_err( + "I/O operation failed for reading on write only file.", + )); + } + FileState::Closed => { + return Err(PyIOError::new_err( + "I/O operation failed for reading on closed file.", + )); + } + }; + + let buffer = match size { + None => { + let mut buffer = Vec::new(); + reader + .read_until(b'\n', &mut buffer) + .map_err(|err| PyIOError::new_err(err.to_string()))?; + buffer + } + Some(size) => { + let mut bs = vec![0; size]; + let mut reader = reader.take(size as u64); + let n = reader + .read_until(b'\n', &mut bs) + .map_err(|err| PyIOError::new_err(err.to_string()))?; + bs.truncate(n); + bs + } + }; + + Buffer::new(buffer).into_bytes_ref(py) + } + /// Read bytes into a pre-allocated, writable buffer pub fn readinto(&mut self, buffer: PyBuffer) -> PyResult { let reader = match &mut self.0 { diff --git a/bindings/python/tests/test_read.py b/bindings/python/tests/test_read.py index ddbd5f08a9d4..73ccd04f7d5c 100644 --- a/bindings/python/tests/test_read.py +++ b/bindings/python/tests/test_read.py @@ -16,7 +16,8 @@ # under the License. import os -from random import randint +import io +from random import randint, choices from uuid import uuid4 import pytest @@ -73,6 +74,33 @@ def test_sync_reader(service_name, operator, async_operator): operator.delete(filename) +@pytest.mark.need_capability("read", "write", "delete") +def test_sync_reader_readline(service_name, operator, async_operator): + size = randint(1, 1024) + lines = randint(1, min(100, size)) + filename = f"random_file_{str(uuid4())}" + content = bytearray(os.urandom(size)) + + for idx in choices(range(0, size), k=lines): + content[idx] = ord("\n") + operator.write(filename, content) + + line_contents = io.BytesIO(content).readlines() + i = 0 + + with operator.open(filename, "rb") as reader: + assert reader.readable() + assert not reader.writable() + assert not reader.closed + + while (read_content := reader.readline()) != b"": + assert read_content is not None + assert read_content == line_contents[i] + i += 1 + + operator.delete(filename) + + @pytest.mark.asyncio @pytest.mark.need_capability("read", "write", "delete") async def test_async_read(service_name, operator, async_operator): From 10d64e262a0286a36abd0e33edd576de3a0fa66e Mon Sep 17 00:00:00 2001 From: TennyZhuang Date: Sat, 2 Nov 2024 15:11:26 +0800 Subject: [PATCH 05/12] test(bindings/python): add test for pickle streaming load/write (#5272) --- bindings/python/tests/test_pickle.py | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 bindings/python/tests/test_pickle.py diff --git a/bindings/python/tests/test_pickle.py b/bindings/python/tests/test_pickle.py new file mode 100644 index 000000000000..cba0016282b4 --- /dev/null +++ b/bindings/python/tests/test_pickle.py @@ -0,0 +1,47 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import pytest +import pickle +from datetime import datetime +from uuid import uuid4 + + +@pytest.mark.need_capability("read", "write", "delete") +def test_sync_file_pickle(service_name, operator, async_operator): + """ + Test pickle streaming serialization and deserialization using OpenDAL operator. + """ + data = { + "a": 1, + "b": "hello", + "c": [1, 2, 3], + "d": {"e": 4}, + "f": None, + "g": b"hello\nworld", + "h": set([1, 2, 3]), + "i": 1.23, + "j": True, + "k": datetime.strptime("2024-01-01", "%Y-%m-%d"), + } + + filename = f"random_file_{str(uuid4())}" + with operator.open(filename, "wb") as f: + pickle.dump(data, f) + + with operator.open(filename, "rb") as f: + assert pickle.load(f) == data From fab80c9601a8fd128176586e92a31d09f75062fb Mon Sep 17 00:00:00 2001 From: Jorge Hermo Date: Sun, 3 Nov 2024 07:29:00 +0100 Subject: [PATCH 06/12] feat(core/services-azblob): support user defined metadata (#5274) --- core/src/raw/http_util/header.rs | 17 +++++++++++++++++ core/src/raw/http_util/mod.rs | 1 + core/src/services/azblob/backend.rs | 14 +++++++++++++- core/src/services/azblob/core.rs | 11 ++++++++++- core/src/services/oss/backend.rs | 4 +--- core/src/services/oss/core.rs | 29 ++++++----------------------- core/src/services/s3/backend.rs | 14 ++------------ core/src/services/s3/core.rs | 3 ++- 8 files changed, 52 insertions(+), 41 deletions(-) diff --git a/core/src/raw/http_util/header.rs b/core/src/raw/http_util/header.rs index 87748c96f4db..49dff81a0ff7 100644 --- a/core/src/raw/http_util/header.rs +++ b/core/src/raw/http_util/header.rs @@ -15,6 +15,8 @@ // specific language governing permissions and limitations // under the License. +use std::collections::HashMap; + use base64::engine::general_purpose; use base64::Engine; use chrono::DateTime; @@ -189,6 +191,21 @@ pub fn parse_into_metadata(path: &str, headers: &HeaderMap) -> Result Ok(m) } +/// Parse prefixed headers and return a map with the prefix of each header removed. +pub fn parse_prefixed_headers(headers: &HeaderMap, prefix: &str) -> HashMap { + headers + .iter() + .filter_map(|(name, value)| { + name.as_str().strip_prefix(prefix).and_then(|stripped_key| { + value + .to_str() + .ok() + .map(|parsed_value| (stripped_key.to_string(), parsed_value.to_string())) + }) + }) + .collect() +} + /// format content md5 header by given input. pub fn format_content_md5(bs: &[u8]) -> String { let mut hasher = md5::Md5::new(); diff --git a/core/src/raw/http_util/mod.rs b/core/src/raw/http_util/mod.rs index 226fb17b7d47..8999b6b807f0 100644 --- a/core/src/raw/http_util/mod.rs +++ b/core/src/raw/http_util/mod.rs @@ -49,6 +49,7 @@ pub use header::parse_header_to_str; pub use header::parse_into_metadata; pub use header::parse_last_modified; pub use header::parse_location; +pub use header::parse_prefixed_headers; mod uri; pub use uri::percent_decode_path; diff --git a/core/src/services/azblob/backend.rs b/core/src/services/azblob/backend.rs index 8f905e3efe69..638513249582 100644 --- a/core/src/services/azblob/backend.rs +++ b/core/src/services/azblob/backend.rs @@ -33,6 +33,7 @@ use reqsign::AzureStorageSigner; use sha2::Digest; use sha2::Sha256; +use super::core::constants::X_MS_META_PREFIX; use super::error::parse_error; use super::lister::AzblobLister; use super::writer::AzblobWriter; @@ -517,6 +518,7 @@ impl Access for AzblobBackend { write_can_multi: true, write_with_cache_control: true, write_with_content_type: true, + write_with_user_metadata: true, delete: true, copy: true, @@ -545,7 +547,17 @@ impl Access for AzblobBackend { let status = resp.status(); match status { - StatusCode::OK => parse_into_metadata(path, resp.headers()).map(RpStat::new), + StatusCode::OK => { + let headers = resp.headers(); + let mut meta = parse_into_metadata(path, headers)?; + + let user_meta = parse_prefixed_headers(headers, X_MS_META_PREFIX); + if !user_meta.is_empty() { + meta.with_user_metadata(user_meta); + } + + Ok(RpStat::new(meta)) + } _ => Err(parse_error(resp)), } } diff --git a/core/src/services/azblob/core.rs b/core/src/services/azblob/core.rs index c4c1925704bd..867f07651a4f 100644 --- a/core/src/services/azblob/core.rs +++ b/core/src/services/azblob/core.rs @@ -24,6 +24,7 @@ use std::time::Duration; use base64::prelude::BASE64_STANDARD; use base64::Engine; use bytes::Bytes; +use constants::X_MS_META_PREFIX; use http::header::HeaderName; use http::header::CONTENT_LENGTH; use http::header::CONTENT_TYPE; @@ -42,13 +43,14 @@ use uuid::Uuid; use crate::raw::*; use crate::*; -mod constants { +pub mod constants { pub const X_MS_VERSION: &str = "x-ms-version"; pub const X_MS_BLOB_TYPE: &str = "x-ms-blob-type"; pub const X_MS_COPY_SOURCE: &str = "x-ms-copy-source"; pub const X_MS_BLOB_CACHE_CONTROL: &str = "x-ms-blob-cache-control"; pub const X_MS_BLOB_CONDITION_APPENDPOS: &str = "x-ms-blob-condition-appendpos"; + pub const X_MS_META_PREFIX: &str = "x-ms-meta-"; // Server-side encryption with customer-provided headers pub const X_MS_ENCRYPTION_KEY: &str = "x-ms-encryption-key"; @@ -243,12 +245,19 @@ impl AzblobCore { let mut req = Request::put(&url); + if let Some(user_metadata) = args.user_metadata() { + for (key, value) in user_metadata { + req = req.header(format!("{X_MS_META_PREFIX}{key}"), value) + } + } + // Set SSE headers. req = self.insert_sse_headers(req); if let Some(cache_control) = args.cache_control() { req = req.header(constants::X_MS_BLOB_CACHE_CONTROL, cache_control); } + if let Some(size) = size { req = req.header(CONTENT_LENGTH, size) } diff --git a/core/src/services/oss/backend.rs b/core/src/services/oss/backend.rs index 7e2d67b3caf5..a627e1d4a0d8 100644 --- a/core/src/services/oss/backend.rs +++ b/core/src/services/oss/backend.rs @@ -489,9 +489,7 @@ impl Access for OssBackend { match status { StatusCode::OK => { let headers = resp.headers(); - let mut meta = - self.core - .parse_metadata(path, constants::X_OSS_META_PREFIX, resp.headers())?; + let mut meta = self.core.parse_metadata(path, resp.headers())?; if let Some(v) = parse_header_to_str(headers, "x-oss-version-id")? { meta.set_version(v); diff --git a/core/src/services/oss/core.rs b/core/src/services/oss/core.rs index d4dff76348e3..2a471ef8ce10 100644 --- a/core/src/services/oss/core.rs +++ b/core/src/services/oss/core.rs @@ -15,13 +15,13 @@ // specific language governing permissions and limitations // under the License. -use std::collections::HashMap; use std::fmt::Debug; use std::fmt::Formatter; use std::fmt::Write; use std::time::Duration; use bytes::Bytes; +use constants::X_OSS_META_PREFIX; use http::header::CACHE_CONTROL; use http::header::CONTENT_DISPOSITION; use http::header::CONTENT_LENGTH; @@ -190,7 +190,7 @@ impl OssCore { "the format of the user metadata key is invalid, please refer the document", )); } - req = req.header(format!("{}{}", constants::X_OSS_META_PREFIX, key), value) + req = req.header(format!("{X_OSS_META_PREFIX}{key}"), value) } } @@ -213,28 +213,11 @@ impl OssCore { /// # Notes /// /// before return the user defined metadata, we'll strip the user_metadata_prefix from the key - pub fn parse_metadata( - &self, - path: &str, - user_metadata_prefix: &str, - headers: &HeaderMap, - ) -> Result { + pub fn parse_metadata(&self, path: &str, headers: &HeaderMap) -> Result { let mut m = parse_into_metadata(path, headers)?; - - let data: HashMap = headers - .iter() - .filter_map(|(key, _)| { - key.as_str() - .strip_prefix(user_metadata_prefix) - .and_then(|stripped_key| { - parse_header_to_str(headers, key) - .unwrap_or(None) - .map(|val| (stripped_key.to_string(), val.to_string())) - }) - }) - .collect(); - if !data.is_empty() { - m.with_user_metadata(data); + let user_meta = parse_prefixed_headers(headers, X_OSS_META_PREFIX); + if !user_meta.is_empty() { + m.with_user_metadata(user_meta); } Ok(m) diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs index 57b3a2f2fa46..43f266e7c6a4 100644 --- a/core/src/services/s3/backend.rs +++ b/core/src/services/s3/backend.rs @@ -26,6 +26,7 @@ use std::sync::Arc; use base64::prelude::BASE64_STANDARD; use base64::Engine; use bytes::Buf; +use constants::X_AMZ_META_PREFIX; use http::Response; use http::StatusCode; use log::debug; @@ -970,18 +971,7 @@ impl Access for S3Backend { let headers = resp.headers(); let mut meta = parse_into_metadata(path, headers)?; - let user_meta: HashMap = headers - .iter() - .filter_map(|(name, _)| { - name.as_str() - .strip_prefix(constants::X_AMZ_META_PREFIX) - .and_then(|stripped_key| { - parse_header_to_str(headers, name) - .unwrap_or(None) - .map(|val| (stripped_key.to_string(), val.to_string())) - }) - }) - .collect(); + let user_meta = parse_prefixed_headers(headers, X_AMZ_META_PREFIX); if !user_meta.is_empty() { meta.with_user_metadata(user_meta); } diff --git a/core/src/services/s3/core.rs b/core/src/services/s3/core.rs index 79ba66239235..944dac8921b5 100644 --- a/core/src/services/s3/core.rs +++ b/core/src/services/s3/core.rs @@ -27,6 +27,7 @@ use std::time::Duration; use base64::prelude::BASE64_STANDARD; use base64::Engine; use bytes::Bytes; +use constants::X_AMZ_META_PREFIX; use http::header::HeaderName; use http::header::CACHE_CONTROL; use http::header::CONTENT_DISPOSITION; @@ -462,7 +463,7 @@ impl S3Core { // Set user metadata headers. if let Some(user_metadata) = args.user_metadata() { for (key, value) in user_metadata { - req = req.header(format!("{}{}", constants::X_AMZ_META_PREFIX, key), value) + req = req.header(format!("{X_AMZ_META_PREFIX}{key}"), value) } } From c471b56a93d8ff2edb1dc2af510f86446cf3fe29 Mon Sep 17 00:00:00 2001 From: TennyZhuang Date: Mon, 4 Nov 2024 19:24:52 +0800 Subject: [PATCH 07/12] feat(core/services-s3): try load endpoint from config (#5279) --- core/Cargo.toml | 2 +- core/src/services/s3/backend.rs | 10 +++++++--- core/src/services/s3/config.rs | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/Cargo.toml b/core/Cargo.toml index c436be1f1303..4477c84bb30d 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -275,7 +275,7 @@ sqlx = { version = "0.8.0", features = [ ], optional = true } # For http based services. -reqsign = { version = "0.16", default-features = false, optional = true } +reqsign = { version = "0.16.1", default-features = false, optional = true } # for services-atomic-server atomic_lib = { version = "0.39.0", optional = true } diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs index 43f266e7c6a4..4c9d6b5973f3 100644 --- a/core/src/services/s3/backend.rs +++ b/core/src/services/s3/backend.rs @@ -668,7 +668,7 @@ impl Builder for S3Builder { const SCHEME: Scheme = Scheme::S3; type Config = S3Config; - fn build(self) -> Result { + fn build(mut self) -> Result { debug!("backend build started: {:?}", &self); let root = normalize_root(&self.config.root.clone().unwrap_or_default()); @@ -753,9 +753,10 @@ impl Builder for S3Builder { } } - if let Some(v) = self.config.region.clone() { - cfg.region = Some(v); + if let Some(ref v) = self.config.region { + cfg.region = Some(v.to_string()); } + if cfg.region.is_none() { return Err(Error::new( ErrorKind::ConfigInvalid, @@ -768,6 +769,9 @@ impl Builder for S3Builder { let region = cfg.region.to_owned().unwrap(); debug!("backend use region: {region}"); + // Retain the user's endpoint if it exists; otherwise, try loading it from the environment. + self.config.endpoint = self.config.endpoint.or_else(|| cfg.endpoint_url.clone()); + // Building endpoint. let endpoint = self.build_endpoint(®ion); debug!("backend use endpoint: {endpoint}"); diff --git a/core/src/services/s3/config.rs b/core/src/services/s3/config.rs index 291706f5c16b..b1b31d5bbc72 100644 --- a/core/src/services/s3/config.rs +++ b/core/src/services/s3/config.rs @@ -51,7 +51,9 @@ pub struct S3Config { /// If user inputs endpoint without scheme like "s3.amazonaws.com", we /// will prepend "https://" before it. /// - /// default to `https://s3.amazonaws.com` if not set. + /// - If endpoint is set, we will take user's input first. + /// - If not, we will try to load it from environment. + /// - If still not set, default to `https://s3.amazonaws.com`. pub endpoint: Option, /// Region represent the signing region of this endpoint. This is required /// if you are using the default AWS S3 endpoint. From 4c1d566cf1bcdc0f064dca92dd2f469d7637dc33 Mon Sep 17 00:00:00 2001 From: Nadeshiko Manju Date: Mon, 4 Nov 2024 21:49:18 +0800 Subject: [PATCH 08/12] release: Bump to version 0.50.2 Round 1 (#5278) --- CHANGELOG.md | 30 ++ bin/oay/Cargo.lock | 6 +- bin/oay/Cargo.toml | 2 +- bin/oay/DEPENDENCIES.rust.tsv | 434 ++++++++---------- bin/ofs/Cargo.lock | 12 +- bin/ofs/Cargo.toml | 6 +- bin/ofs/DEPENDENCIES.rust.tsv | 10 +- bin/oli/Cargo.lock | 8 +- bin/oli/Cargo.toml | 2 +- bin/oli/DEPENDENCIES.rust.tsv | 15 +- bindings/c/Cargo.toml | 2 +- bindings/c/DEPENDENCIES.rust.tsv | 40 +- bindings/cpp/Cargo.toml | 2 +- bindings/cpp/DEPENDENCIES.rust.tsv | 38 +- bindings/dotnet/Cargo.toml | 2 +- bindings/dotnet/DEPENDENCIES.rust.tsv | 38 +- bindings/haskell/Cargo.toml | 2 +- bindings/haskell/DEPENDENCIES.rust.tsv | 38 +- bindings/java/Cargo.toml | 2 +- bindings/java/DEPENDENCIES.rust.tsv | 134 +++--- bindings/lua/Cargo.toml | 2 +- bindings/lua/DEPENDENCIES.rust.tsv | 42 +- bindings/nodejs/Cargo.toml | 2 +- bindings/nodejs/DEPENDENCIES.rust.tsv | 42 +- bindings/nodejs/npm/darwin-arm64/package.json | 2 +- bindings/nodejs/npm/darwin-x64/package.json | 2 +- .../nodejs/npm/linux-arm64-gnu/package.json | 2 +- .../nodejs/npm/linux-arm64-musl/package.json | 2 +- .../nodejs/npm/linux-x64-gnu/package.json | 2 +- .../nodejs/npm/win32-arm64-msvc/package.json | 2 +- .../nodejs/npm/win32-x64-msvc/package.json | 2 +- bindings/nodejs/package.json | 2 +- bindings/ocaml/DEPENDENCIES.rust.tsv | 36 +- bindings/php/Cargo.toml | 2 +- bindings/php/DEPENDENCIES.rust.tsv | 44 +- bindings/python/Cargo.toml | 2 +- bindings/python/DEPENDENCIES.rust.tsv | 50 +- bindings/ruby/Cargo.toml | 2 +- bindings/ruby/DEPENDENCIES.rust.tsv | 40 +- core/Cargo.lock | 6 +- core/Cargo.toml | 2 +- core/DEPENDENCIES.rust.tsv | 4 +- integrations/cloud_filter/Cargo.toml | 2 +- .../cloud_filter/DEPENDENCIES.rust.tsv | 32 +- integrations/compat/Cargo.toml | 2 +- integrations/compat/DEPENDENCIES.rust.tsv | 6 +- integrations/dav-server/Cargo.toml | 2 +- integrations/dav-server/DEPENDENCIES.rust.tsv | 36 +- integrations/fuse3/Cargo.toml | 2 +- integrations/fuse3/DEPENDENCIES.rust.tsv | 32 +- integrations/object_store/Cargo.toml | 2 +- .../object_store/DEPENDENCIES.rust.tsv | 38 +- integrations/parquet/Cargo.toml | 2 +- integrations/parquet/DEPENDENCIES.rust.tsv | 50 +- integrations/unftp-sbe/Cargo.toml | 2 +- integrations/unftp-sbe/DEPENDENCIES.rust.tsv | 42 +- integrations/virtiofs/DEPENDENCIES.rust.tsv | 34 +- 57 files changed, 695 insertions(+), 704 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03ad9f27478b..60d8f9d367ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/). +## [v0.50.2] - 2024-11-04 + +### Added +* feat(services/ftp): List dir shows last modified timestamp by @erickguan in https://github.com/apache/opendal/pull/5213 +* feat(bindings/d): add D bindings support by @kassane in https://github.com/apache/opendal/pull/5181 +* feat(bindings/python): add sync `File.readline` by @TennyZhuang in https://github.com/apache/opendal/pull/5271 +* feat(core/services-azblob): support user defined metadata by @jorgehermo9 in https://github.com/apache/opendal/pull/5274 +* feat(core/services-s3): try load endpoint from config by @TennyZhuang in https://github.com/apache/opendal/pull/5279 +### Changed +* refactor(bin/oli): use `clap_derive` to reduce boilerplate code by @koushiro in https://github.com/apache/opendal/pull/5233 +### Fixed +* fix: add all-features flag for opendal_compat doc build by @XmchxUp in https://github.com/apache/opendal/pull/5234 +* fix(integrations/compat): Capability has different fields by @Xuanwo in https://github.com/apache/opendal/pull/5236 +* fix(integration/compat): Fix opendal 0.50 OpList has new field by @Xuanwo in https://github.com/apache/opendal/pull/5238 +* fix(integrations/compat): Fix dead loop happened during list by @Xuanwo in https://github.com/apache/opendal/pull/5240 +### Docs +* docs: Move our release process to github discussions by @Xuanwo in https://github.com/apache/opendal/pull/5217 +* docs: change "Github" to "GitHub" by @MohammadLotfiA in https://github.com/apache/opendal/pull/5250 +### CI +* ci(asf): Don't add `[DISCUSS]` prefix for discussion by @Xuanwo in https://github.com/apache/opendal/pull/5210 +* build: enable services-mysql for Java and Python bindings by @tisonkun in https://github.com/apache/opendal/pull/5222 +* build(binding/python): Support Python 3.13 by @Zheaoli in https://github.com/apache/opendal/pull/5248 +### Chore +* chore(bin/*): remove useless deps by @koushiro in https://github.com/apache/opendal/pull/5212 +* chore: tidy up c binding build and docs by @tisonkun in https://github.com/apache/opendal/pull/5243 +* chore(core/layers): adjust await point to simplify combinator code by @koushiro in https://github.com/apache/opendal/pull/5255 +* chore(core/blocking_operator): deduplicate deprecated `is_exist` logic by @simonsan in https://github.com/apache/opendal/pull/5261 +* chore(deps): bump actions/cache from 3 to 4 by @dependabot in https://github.com/apache/opendal/pull/5262 +* chore: run object_store tests in CI by @jorgehermo9 in https://github.com/apache/opendal/pull/5268 + ## [v0.50.1] - 2024-10-20 ### Added diff --git a/bin/oay/Cargo.lock b/bin/oay/Cargo.lock index d88d01bd8ce6..50369a005100 100644 --- a/bin/oay/Cargo.lock +++ b/bin/oay/Cargo.lock @@ -284,7 +284,7 @@ dependencies = [ [[package]] name = "dav-server-opendalfs" -version = "0.2.1" +version = "0.2.2" dependencies = [ "anyhow", "bytes", @@ -827,7 +827,7 @@ dependencies = [ [[package]] name = "oay" -version = "0.41.12" +version = "0.41.13" dependencies = [ "anyhow", "axum", @@ -862,7 +862,7 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opendal" -version = "0.50.1" +version = "0.50.2" dependencies = [ "anyhow", "async-trait", diff --git a/bin/oay/Cargo.toml b/bin/oay/Cargo.toml index e7dd249af4a9..dbdb7460b765 100644 --- a/bin/oay/Cargo.toml +++ b/bin/oay/Cargo.toml @@ -27,7 +27,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.41.12" +version = "0.41.13" [features] default = ["frontends-webdav", "frontends-s3"] diff --git a/bin/oay/DEPENDENCIES.rust.tsv b/bin/oay/DEPENDENCIES.rust.tsv index 65e96c3d79da..8f6d41c2ad16 100644 --- a/bin/oay/DEPENDENCIES.rust.tsv +++ b/bin/oay/DEPENDENCIES.rust.tsv @@ -1,235 +1,199 @@ -crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-2-Clause BSD-3-Clause BSL-1.0 ISC MIT MPL-2.0 OpenSSL Unicode-DFS-2016 Unlicense Zlib -addr2line@0.24.2 X X -adler2@2.0.0 X X X -aho-corasick@1.1.3 X X -allocator-api2@0.2.18 X X -android-tzdata@0.1.1 X X -android_system_properties@0.1.5 X X -anstream@0.6.15 X X -anstyle@1.0.8 X X -anstyle-parse@0.2.5 X X -anstyle-query@1.1.1 X X -anstyle-wincon@3.0.4 X X -anyhow@1.0.90 X X -async-trait@0.1.83 X X -autocfg@1.4.0 X X -axum@0.7.7 X -axum-core@0.4.5 X -backon@1.2.0 X -backtrace@0.3.74 X X -base64@0.21.7 X X -base64@0.22.1 X X -bitflags@2.6.0 X X -block-buffer@0.10.4 X X -bumpalo@3.16.0 X X -byteorder@1.5.0 X X -bytes@1.7.2 X -cc@1.1.31 X X -cfg-if@1.0.0 X X -chrono@0.4.38 X X -clap@4.5.20 X X -clap_builder@4.5.20 X X -clap_lex@0.7.2 X X -colorchoice@1.0.2 X X -core-foundation-sys@0.8.7 X X -cpufeatures@0.2.14 X X -crypto-common@0.1.6 X X -dav-server@0.7.0 X -dav-server-opendalfs@0.2.1 X -deranged@0.3.11 X X -digest@0.10.7 X X -dirs@5.0.1 X X -dirs-sys@0.4.1 X X -equivalent@1.0.1 X X -fastrand@2.1.1 X X -flagset@0.4.6 X -fnv@1.0.7 X X -foldhash@0.1.3 X -form_urlencoded@1.2.1 X X -futures@0.3.31 X X -futures-channel@0.3.31 X X -futures-core@0.3.31 X X -futures-executor@0.3.31 X X -futures-io@0.3.31 X X -futures-macro@0.3.31 X X -futures-sink@0.3.31 X X -futures-task@0.3.31 X X -futures-util@0.3.31 X X -generic-array@0.14.7 X -getrandom@0.2.15 X X -gimli@0.31.1 X X -gloo-timers@0.3.0 X X -hashbrown@0.15.0 X X -headers@0.4.0 X -headers-core@0.3.0 X -hermit-abi@0.3.9 X X -htmlescape@0.3.1 X X X -http@1.1.0 X X -http-body@1.0.1 X -http-body-util@0.1.2 X -httparse@1.9.5 X X -httpdate@1.0.3 X X -hyper@1.5.0 X -hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X -iana-time-zone@0.1.61 X X -iana-time-zone-haiku@0.1.2 X X -idna@0.5.0 X X -indexmap@2.6.0 X X -ipnet@2.10.1 X X -is_terminal_polyfill@1.70.1 X X -itoa@1.0.11 X X -js-sys@0.3.72 X X -lazy_static@1.5.0 X X -libc@0.2.161 X X -libredox@0.1.3 X -lock_api@0.4.12 X X -log@0.4.22 X X -lru@0.12.5 X -matchers@0.1.0 X -matchit@0.7.3 X X -md-5@0.10.6 X X -memchr@2.7.4 X X -mime@0.3.17 X X -mime_guess@2.0.5 X -miniz_oxide@0.8.0 X X X -mio@1.0.2 X -nu-ansi-term@0.46.0 X -num-conv@0.1.0 X X -num-traits@0.2.19 X X -oay@0.41.12 X -object@0.36.5 X X -once_cell@1.20.2 X X -opendal@0.50.1 X -option-ext@0.2.0 X -overload@0.1.1 X -parking_lot@0.12.3 X X -parking_lot_core@0.9.10 X X -percent-encoding@2.3.1 X X -pin-project@1.1.6 X X -pin-project-internal@1.1.6 X X -pin-project-lite@0.2.14 X X -pin-utils@0.1.0 X X -powerfmt@0.2.0 X X -ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X -quick-xml@0.36.2 X -quote@1.0.37 X X -rand@0.8.5 X X -rand_chacha@0.3.1 X X -rand_core@0.6.4 X X -redox_syscall@0.5.7 X -redox_users@0.4.6 X -regex@1.11.0 X X -regex-automata@0.1.10 X X -regex-automata@0.4.8 X X -regex-syntax@0.6.29 X X -regex-syntax@0.8.5 X X -reqwest@0.12.8 X X -ring@0.17.8 X -rustc-demangle@0.1.24 X X -rustls@0.23.15 X X X -rustls-pemfile@2.2.0 X X X -rustls-pki-types@1.10.0 X X -rustls-webpki@0.102.8 X -rustversion@1.0.18 X X -ryu@1.0.18 X X -scopeguard@1.2.0 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X -serde_json@1.0.132 X X -serde_path_to_error@0.1.16 X X -serde_spanned@0.6.8 X X -serde_urlencoded@0.7.1 X X -sha1@0.10.6 X X -sharded-slab@0.1.7 X -shlex@1.3.0 X X -slab@0.4.9 X -smallvec@1.13.2 X X -socket2@0.5.7 X X -spin@0.9.8 X -strsim@0.11.1 X -subtle@2.6.1 X -syn@2.0.81 X X -sync_wrapper@0.1.2 X -sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X -thread_local@1.1.8 X X -time@0.3.36 X X -time-core@0.1.2 X X -time-macros@0.2.18 X X -tinyvec@1.8.0 X X X -tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X -tokio-macros@2.4.0 X -tokio-rustls@0.26.0 X X -tokio-util@0.7.12 X -toml@0.8.19 X X -toml_datetime@0.6.8 X X -toml_edit@0.22.22 X X -tower@0.4.13 X -tower@0.5.1 X -tower-http@0.5.2 X -tower-layer@0.3.3 X -tower-service@0.3.3 X -tracing@0.1.40 X -tracing-attributes@0.1.27 X -tracing-core@0.1.32 X -tracing-log@0.2.0 X -tracing-subscriber@0.3.18 X -try-lock@0.2.5 X -typenum@1.17.0 X X -unicase@2.8.0 X X -unicode-bidi@0.3.17 X X -unicode-ident@1.0.13 X X X -unicode-normalization@0.1.24 X X -untrusted@0.9.0 X -url@2.5.2 X X -utf8parse@0.2.2 X X -uuid@1.11.0 X X -valuable@0.1.0 X -version_check@0.9.5 X X -want@0.3.1 X -wasi@0.11.0+wasi-snapshot-preview1 X X X -wasm-bindgen@0.2.95 X X -wasm-bindgen-backend@0.2.95 X X -wasm-bindgen-futures@0.4.45 X X -wasm-bindgen-macro@0.2.95 X X -wasm-bindgen-macro-support@0.2.95 X X -wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X -web-sys@0.3.72 X X -webpki-roots@0.26.6 X -winapi@0.3.9 X X -winapi-i686-pc-windows-gnu@0.4.0 X X -winapi-x86_64-pc-windows-gnu@0.4.0 X X -windows-core@0.52.0 X X -windows-registry@0.2.0 X X -windows-result@0.2.0 X X -windows-strings@0.1.0 X X -windows-sys@0.48.0 X X -windows-sys@0.52.0 X X -windows-targets@0.48.5 X X -windows-targets@0.52.6 X X -windows_aarch64_gnullvm@0.48.5 X X -windows_aarch64_gnullvm@0.52.6 X X -windows_aarch64_msvc@0.48.5 X X -windows_aarch64_msvc@0.52.6 X X -windows_i686_gnu@0.48.5 X X -windows_i686_gnu@0.52.6 X X -windows_i686_gnullvm@0.52.6 X X -windows_i686_msvc@0.48.5 X X -windows_i686_msvc@0.52.6 X X -windows_x86_64_gnu@0.48.5 X X -windows_x86_64_gnu@0.52.6 X X -windows_x86_64_gnullvm@0.48.5 X X -windows_x86_64_gnullvm@0.52.6 X X -windows_x86_64_msvc@0.48.5 X X -windows_x86_64_msvc@0.52.6 X X -winnow@0.6.20 X -xml-rs@0.8.22 X -xmltree@0.10.3 X -zerocopy@0.7.35 X X X -zerocopy-derive@0.7.35 X X X -zeroize@1.8.1 X X +crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-3-Clause BSL-1.0 ISC MIT MPL-2.0 OpenSSL Unicode-DFS-2016 Unlicense Zlib +addr2line@0.24.2 X X +adler2@2.0.0 X X X +aho-corasick@1.1.3 X X +allocator-api2@0.2.18 X X +android-tzdata@0.1.1 X X +android_system_properties@0.1.5 X X +anyhow@1.0.90 X X +async-trait@0.1.83 X X +autocfg@1.4.0 X X +axum@0.7.7 X +axum-core@0.4.5 X +backon@1.2.0 X +backtrace@0.3.74 X X +base64@0.21.7 X X +base64@0.22.1 X X +bitflags@2.6.0 X X +block-buffer@0.10.4 X X +bumpalo@3.16.0 X X +bytes@1.7.2 X +cc@1.1.31 X X +cfg-if@1.0.0 X X +chrono@0.4.38 X X +core-foundation-sys@0.8.7 X X +cpufeatures@0.2.14 X X +crypto-common@0.1.6 X X +dav-server@0.7.0 X +dav-server-opendalfs@0.2.2 X +deranged@0.3.11 X X +digest@0.10.7 X X +equivalent@1.0.1 X X +fastrand@2.1.1 X X +flagset@0.4.6 X +fnv@1.0.7 X X +foldhash@0.1.3 X +form_urlencoded@1.2.1 X X +futures@0.3.31 X X +futures-channel@0.3.31 X X +futures-core@0.3.31 X X +futures-executor@0.3.31 X X +futures-io@0.3.31 X X +futures-macro@0.3.31 X X +futures-sink@0.3.31 X X +futures-task@0.3.31 X X +futures-util@0.3.31 X X +generic-array@0.14.7 X +getrandom@0.2.15 X X +gimli@0.31.1 X X +gloo-timers@0.3.0 X X +hashbrown@0.15.0 X X +headers@0.4.0 X +headers-core@0.3.0 X +hermit-abi@0.3.9 X X +htmlescape@0.3.1 X X X +http@1.1.0 X X +http-body@1.0.1 X +http-body-util@0.1.2 X +httparse@1.9.5 X X +httpdate@1.0.3 X X +hyper@1.5.0 X +hyper-rustls@0.27.3 X X X +hyper-util@0.1.9 X +iana-time-zone@0.1.61 X X +iana-time-zone-haiku@0.1.2 X X +idna@0.5.0 X X +indexmap@2.6.0 X X +ipnet@2.10.1 X X +itoa@1.0.11 X X +js-sys@0.3.72 X X +lazy_static@1.5.0 X X +libc@0.2.161 X X +lock_api@0.4.12 X X +log@0.4.22 X X +lru@0.12.5 X +matchers@0.1.0 X +matchit@0.7.3 X X +md-5@0.10.6 X X +memchr@2.7.4 X X +mime@0.3.17 X X +mime_guess@2.0.5 X +miniz_oxide@0.8.0 X X X +mio@1.0.2 X +nu-ansi-term@0.46.0 X +num-conv@0.1.0 X X +num-traits@0.2.19 X X +oay@0.41.13 X +object@0.36.5 X X +once_cell@1.20.2 X X +opendal@0.50.2 X +overload@0.1.1 X +parking_lot@0.12.3 X X +parking_lot_core@0.9.10 X X +percent-encoding@2.3.1 X X +pin-project@1.1.6 X X +pin-project-internal@1.1.6 X X +pin-project-lite@0.2.14 X X +pin-utils@0.1.0 X X +powerfmt@0.2.0 X X +proc-macro2@1.0.88 X X +quick-xml@0.36.2 X +quote@1.0.37 X X +redox_syscall@0.5.7 X +regex@1.11.0 X X +regex-automata@0.1.10 X X +regex-automata@0.4.8 X X +regex-syntax@0.6.29 X X +regex-syntax@0.8.5 X X +reqwest@0.12.8 X X +ring@0.17.8 X +rustc-demangle@0.1.24 X X +rustls@0.23.15 X X X +rustls-pemfile@2.2.0 X X X +rustls-pki-types@1.10.0 X X +rustls-webpki@0.102.8 X +rustversion@1.0.18 X X +ryu@1.0.18 X X +scopeguard@1.2.0 X X +serde@1.0.210 X X +serde_derive@1.0.210 X X +serde_json@1.0.132 X X +serde_path_to_error@0.1.16 X X +serde_spanned@0.6.8 X X +serde_urlencoded@0.7.1 X X +sha1@0.10.6 X X +sharded-slab@0.1.7 X +shlex@1.3.0 X X +slab@0.4.9 X +smallvec@1.13.2 X X +socket2@0.5.7 X X +spin@0.9.8 X +subtle@2.6.1 X +syn@2.0.81 X X +sync_wrapper@0.1.2 X +sync_wrapper@1.0.1 X +thread_local@1.1.8 X X +time@0.3.36 X X +time-core@0.1.2 X X +time-macros@0.2.18 X X +tinyvec@1.8.0 X X X +tinyvec_macros@0.1.1 X X X +tokio@1.40.0 X +tokio-macros@2.4.0 X +tokio-rustls@0.26.0 X X +tokio-util@0.7.12 X +toml@0.8.19 X X +toml_datetime@0.6.8 X X +toml_edit@0.22.22 X X +tower@0.4.13 X +tower@0.5.1 X +tower-layer@0.3.3 X +tower-service@0.3.3 X +tracing@0.1.40 X +tracing-attributes@0.1.27 X +tracing-core@0.1.32 X +tracing-log@0.2.0 X +tracing-subscriber@0.3.18 X +try-lock@0.2.5 X +typenum@1.17.0 X X +unicase@2.8.0 X X +unicode-bidi@0.3.17 X X +unicode-ident@1.0.13 X X X +unicode-normalization@0.1.24 X X +untrusted@0.9.0 X +url@2.5.2 X X +uuid@1.11.0 X X +valuable@0.1.0 X +version_check@0.9.5 X X +want@0.3.1 X +wasi@0.11.0+wasi-snapshot-preview1 X X X +wasm-bindgen@0.2.95 X X +wasm-bindgen-backend@0.2.95 X X +wasm-bindgen-futures@0.4.45 X X +wasm-bindgen-macro@0.2.95 X X +wasm-bindgen-macro-support@0.2.95 X X +wasm-bindgen-shared@0.2.95 X X +wasm-streams@0.4.1 X X +web-sys@0.3.72 X X +webpki-roots@0.26.6 X +winapi@0.3.9 X X +winapi-i686-pc-windows-gnu@0.4.0 X X +winapi-x86_64-pc-windows-gnu@0.4.0 X X +windows-core@0.52.0 X X +windows-registry@0.2.0 X X +windows-result@0.2.0 X X +windows-strings@0.1.0 X X +windows-sys@0.52.0 X X +windows-targets@0.52.6 X X +windows_aarch64_gnullvm@0.52.6 X X +windows_aarch64_msvc@0.52.6 X X +windows_i686_gnu@0.52.6 X X +windows_i686_gnullvm@0.52.6 X X +windows_i686_msvc@0.52.6 X X +windows_x86_64_gnu@0.52.6 X X +windows_x86_64_gnullvm@0.52.6 X X +windows_x86_64_msvc@0.52.6 X X +winnow@0.6.20 X +xml-rs@0.8.22 X +xmltree@0.10.3 X +zeroize@1.8.1 X X diff --git a/bin/ofs/Cargo.lock b/bin/ofs/Cargo.lock index 9ebc6101d0de..9827165a4928 100644 --- a/bin/ofs/Cargo.lock +++ b/bin/ofs/Cargo.lock @@ -288,7 +288,7 @@ dependencies = [ [[package]] name = "cloud_filter_opendal" -version = "0.0.2" +version = "0.0.3" dependencies = [ "anyhow", "bincode", @@ -522,7 +522,7 @@ dependencies = [ [[package]] name = "fuse3_opendal" -version = "0.0.8" +version = "0.0.9" dependencies = [ "bytes", "fuse3", @@ -993,7 +993,7 @@ dependencies = [ [[package]] name = "ofs" -version = "0.0.13" +version = "0.0.14" dependencies = [ "anyhow", "clap", @@ -1021,7 +1021,7 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opendal" -version = "0.50.1" +version = "0.50.2" dependencies = [ "anyhow", "async-trait", @@ -1246,9 +1246,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqsign" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03dd4ba7c3901dd43e6b8c7446a760d45bc1ea4301002e1a6fa48f97c3a796fa" +checksum = "eb0075a66c8bfbf4cc8b70dca166e722e1f55a3ea9250ecbb85f4d92a5f64149" dependencies = [ "anyhow", "async-trait", diff --git a/bin/ofs/Cargo.toml b/bin/ofs/Cargo.toml index c37c3ff79694..cd6260f58fc2 100644 --- a/bin/ofs/Cargo.toml +++ b/bin/ofs/Cargo.toml @@ -20,7 +20,7 @@ categories = ["filesystem"] description = "OpenDAL File System" keywords = ["storage", "data", "s3", "fs", "azblob"] name = "ofs" -version = "0.0.13" +version = "0.0.14" authors = ["Apache OpenDAL "] edition = "2021" @@ -46,13 +46,13 @@ url = "2.5.0" [target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os = "macos"))'.dependencies] fuse3 = { version = "0.8.1", "features" = ["tokio-runtime", "unprivileged"] } -fuse3_opendal = { version = "0.0.8", path = "../../integrations/fuse3" } +fuse3_opendal = { version = "0.0.9", path = "../../integrations/fuse3" } libc = "0.2.154" nix = { version = "0.29.0", features = ["user"] } [target.'cfg(target_os = "windows")'.dependencies] cloud-filter = { version = "0.0.5" } -cloud_filter_opendal = { version = "0.0.2", path = "../../integrations/cloud_filter" } +cloud_filter_opendal = { version = "0.0.3", path = "../../integrations/cloud_filter" } [features] default = ["services-fs", "services-s3"] diff --git a/bin/ofs/DEPENDENCIES.rust.tsv b/bin/ofs/DEPENDENCIES.rust.tsv index 2829a94ea368..a0771a47d4fc 100644 --- a/bin/ofs/DEPENDENCIES.rust.tsv +++ b/bin/ofs/DEPENDENCIES.rust.tsv @@ -31,7 +31,7 @@ clap_builder@4.5.20 X X clap_derive@4.5.18 X X clap_lex@0.7.2 X X cloud-filter@0.0.5 X -cloud_filter_opendal@0.0.2 X +cloud_filter_opendal@0.0.3 X colorchoice@1.0.2 X X concurrent-queue@2.5.0 X X const-oid@0.9.6 X X @@ -57,7 +57,7 @@ flagset@0.4.6 X fnv@1.0.7 X X form_urlencoded@1.2.1 X X fuse3@0.8.1 X -fuse3_opendal@0.0.8 X +fuse3_opendal@0.0.9 X futures@0.3.31 X X futures-channel@0.3.31 X X futures-core@0.3.31 X X @@ -107,9 +107,9 @@ nt-time@0.8.1 X X num-conv@0.1.0 X X num-traits@0.2.19 X X object@0.36.5 X X -ofs@0.0.13 X +ofs@0.0.14 X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X ordered-multimap@0.7.3 X parking@2.2.1 X X percent-encoding@2.3.1 X X @@ -127,7 +127,7 @@ rand_core@0.6.4 X X regex@1.11.0 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqsign@0.16.0 X +reqsign@0.16.1 X reqwest@0.12.8 X X ring@0.17.8 X rust-ini@0.21.1 X diff --git a/bin/oli/Cargo.lock b/bin/oli/Cargo.lock index 672cc75e590e..fef1627ac909 100644 --- a/bin/oli/Cargo.lock +++ b/bin/oli/Cargo.lock @@ -1935,7 +1935,7 @@ dependencies = [ [[package]] name = "oli" -version = "0.41.12" +version = "0.41.13" dependencies = [ "anyhow", "assert_cmd", @@ -1958,7 +1958,7 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opendal" -version = "0.50.1" +version = "0.50.2" dependencies = [ "anyhow", "async-tls", @@ -2581,9 +2581,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqsign" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03dd4ba7c3901dd43e6b8c7446a760d45bc1ea4301002e1a6fa48f97c3a796fa" +checksum = "eb0075a66c8bfbf4cc8b70dca166e722e1f55a3ea9250ecbb85f4d92a5f64149" dependencies = [ "anyhow", "async-trait", diff --git a/bin/oli/Cargo.toml b/bin/oli/Cargo.toml index 4030cffee2e3..97730b5d1416 100644 --- a/bin/oli/Cargo.toml +++ b/bin/oli/Cargo.toml @@ -27,7 +27,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.41.12" +version = "0.41.13" [features] # Enable services dashmap support diff --git a/bin/oli/DEPENDENCIES.rust.tsv b/bin/oli/DEPENDENCIES.rust.tsv index 4e0ae73c711e..7e879b788a63 100644 --- a/bin/oli/DEPENDENCIES.rust.tsv +++ b/bin/oli/DEPENDENCIES.rust.tsv @@ -2,7 +2,6 @@ crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-2-Clause BSD-3-Clause B addr2line@0.24.2 X X adler2@2.0.0 X X X aes@0.8.4 X X -aho-corasick@1.1.3 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X anstream@0.6.15 X X @@ -31,6 +30,7 @@ chrono@0.4.38 X X cipher@0.4.4 X X clap@4.5.20 X X clap_builder@4.5.20 X X +clap_derive@4.5.18 X X clap_lex@0.7.2 X X colorchoice@1.0.2 X X const-oid@0.9.6 X X @@ -47,8 +47,6 @@ digest@0.10.7 X X dirs@5.0.1 X X dirs-sys@0.4.1 X X dlv-list@0.5.2 X X -env_filter@0.1.2 X X -env_logger@0.11.5 X X equivalent@1.0.1 X X fastrand@2.1.1 X X flagset@0.4.6 X @@ -69,6 +67,7 @@ gimli@0.31.1 X X gloo-timers@0.3.0 X X hashbrown@0.14.5 X X hashbrown@0.15.0 X X +heck@0.5.0 X X hermit-abi@0.3.9 X X hex@0.4.3 X X hmac@0.12.1 X X @@ -77,7 +76,6 @@ http@1.1.0 X X http-body@1.0.1 X http-body-util@0.1.2 X httparse@1.9.5 X X -humantime@2.1.0 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X hyper-util@0.1.9 X @@ -108,9 +106,9 @@ num-integer@0.1.46 X X num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X -oli@0.41.12 X +oli@0.41.13 X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X option-ext@0.2.0 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X @@ -132,10 +130,7 @@ rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X redox_users@0.4.6 X -regex@1.11.0 X X -regex-automata@0.4.8 X X -regex-syntax@0.8.5 X X -reqsign@0.16.0 X +reqsign@0.16.1 X reqwest@0.12.8 X X ring@0.17.8 X rsa@0.9.6 X X diff --git a/bindings/c/Cargo.toml b/bindings/c/Cargo.toml index 43e38bce735f..199c8b0e8c13 100644 --- a/bindings/c/Cargo.toml +++ b/bindings/c/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.45.0" +version = "0.45.1" [lib] crate-type = ["cdylib", "staticlib"] diff --git a/bindings/c/DEPENDENCIES.rust.tsv b/bindings/c/DEPENDENCIES.rust.tsv index 4d5956e73bd0..c4976103770a 100644 --- a/bindings/c/DEPENDENCIES.rust.tsv +++ b/bindings/c/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X atty@0.2.14 X autocfg@1.4.0 X X @@ -19,10 +19,10 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X cbindgen@0.26.0 X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -71,7 +71,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -83,7 +83,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X linux-raw-sys@0.4.14 X X X log@0.4.22 X X md-5@0.10.6 X X @@ -99,37 +99,37 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-c@0.45.0 X +opendal@0.50.2 X +opendal-c@0.45.1 X ordered-multimap@0.7.3 X os_str_bytes@6.6.1 X X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustix@0.38.37 X X X -rustls@0.23.15 X X X +rustix@0.38.38 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -137,8 +137,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -154,20 +154,20 @@ spki@0.7.3 X X strsim@0.10.0 X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X tempfile@3.13.0 X X termcolor@1.4.1 X X textwrap@0.16.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -193,7 +193,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X winapi@0.3.9 X X diff --git a/bindings/cpp/Cargo.toml b/bindings/cpp/Cargo.toml index af531427e240..4f711b7e9053 100644 --- a/bindings/cpp/Cargo.toml +++ b/bindings/cpp/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.45.12" +version = "0.45.13" [lib] crate-type = ["staticlib"] diff --git a/bindings/cpp/DEPENDENCIES.rust.tsv b/bindings/cpp/DEPENDENCIES.rust.tsv index 4896f6931bdd..b739e4f6bc65 100644 --- a/bindings/cpp/DEPENDENCIES.rust.tsv +++ b/bindings/cpp/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -16,9 +16,9 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -66,7 +66,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -77,7 +77,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X link-cplusplus@1.0.9 X X log@0.4.22 X X md-5@0.10.6 X X @@ -93,35 +93,35 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-cpp@0.45.12 X +opendal@0.50.2 X +opendal-cpp@0.45.13 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -130,8 +130,8 @@ salsa20@0.10.2 X X scratch@1.0.7 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -145,18 +145,18 @@ socket2@0.5.7 X X spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X termcolor@1.4.1 X X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -181,7 +181,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X winapi-util@0.1.9 X X diff --git a/bindings/dotnet/Cargo.toml b/bindings/dotnet/Cargo.toml index 505f21088dbc..6a595dedfbea 100644 --- a/bindings/dotnet/Cargo.toml +++ b/bindings/dotnet/Cargo.toml @@ -18,7 +18,7 @@ [package] name = "opendal-dotnet" publish = false -version = "0.1.10" +version = "0.1.11" authors = ["Apache OpenDAL "] edition = "2021" diff --git a/bindings/dotnet/DEPENDENCIES.rust.tsv b/bindings/dotnet/DEPENDENCIES.rust.tsv index 8cbc83b4dd62..c6f916c08e8e 100644 --- a/bindings/dotnet/DEPENDENCIES.rust.tsv +++ b/bindings/dotnet/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -16,9 +16,9 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -61,7 +61,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -72,7 +72,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X @@ -87,35 +87,35 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-dotnet@0.1.10 X +opendal@0.50.2 X +opendal-dotnet@0.1.11 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -123,8 +123,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -138,17 +138,17 @@ socket2@0.5.7 X X spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -172,7 +172,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/bindings/haskell/Cargo.toml b/bindings/haskell/Cargo.toml index 9936c5cbfd9a..bd4e04dd444e 100644 --- a/bindings/haskell/Cargo.toml +++ b/bindings/haskell/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.44.12" +version = "0.44.13" [lib] crate-type = ["cdylib"] diff --git a/bindings/haskell/DEPENDENCIES.rust.tsv b/bindings/haskell/DEPENDENCIES.rust.tsv index 814cdf1c0e6f..1df0fd600aa7 100644 --- a/bindings/haskell/DEPENDENCIES.rust.tsv +++ b/bindings/haskell/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -16,9 +16,9 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -61,7 +61,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -72,7 +72,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X @@ -87,35 +87,35 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-hs@0.44.12 X +opendal@0.50.2 X +opendal-hs@0.44.13 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -123,8 +123,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -138,17 +138,17 @@ socket2@0.5.7 X X spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -172,7 +172,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/bindings/java/Cargo.toml b/bindings/java/Cargo.toml index 78df098dafb0..df8b06104617 100644 --- a/bindings/java/Cargo.toml +++ b/bindings/java/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.47.4" +version = "0.47.5" [lib] crate-type = ["cdylib"] diff --git a/bindings/java/DEPENDENCIES.rust.tsv b/bindings/java/DEPENDENCIES.rust.tsv index 69381d818bf4..c7492260a5be 100644 --- a/bindings/java/DEPENDENCIES.rust.tsv +++ b/bindings/java/DEPENDENCIES.rust.tsv @@ -1,40 +1,40 @@ crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-2-Clause BSD-3-Clause BSL-1.0 CC0-1.0 ISC MIT MPL-2.0 OpenSSL Unicode-DFS-2016 Unlicense Zlib -addr2line@0.24.2 X X -adler2@2.0.0 X X X +addr2line@0.22.0 X X +adler@1.0.2 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.86 X X arc-swap@1.7.1 X X -async-trait@0.1.83 X X -autocfg@1.4.0 X X +async-trait@0.1.81 X X +autocfg@1.3.0 X X awaitable@0.4.0 X awaitable-error@0.1.0 X backon@1.2.0 X -backtrace@0.3.74 X X +backtrace@0.3.73 X X base64@0.21.7 X X base64@0.22.1 X X base64ct@1.6.0 X X -bb8@0.8.6 X +bb8@0.8.5 X bitflags@2.6.0 X X block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.7.1 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.15 X X cesu8@1.1.0 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X combine@4.6.7 X -concurrent_arena@0.1.10 X +concurrent_arena@0.1.8 X const-oid@0.9.6 X X const-random@0.1.18 X X const-random-macro@0.1.16 X X core-foundation-sys@0.8.7 X X -cpufeatures@0.2.14 X X +cpufeatures@0.2.13 X X crc32c@0.6.8 X X crunchy@0.2.2 X crypto-common@0.1.6 X X @@ -48,17 +48,17 @@ fastrand@2.1.1 X X flagset@0.4.6 X fnv@1.0.7 X X form_urlencoded@1.2.1 X X -futures@0.3.31 X X -futures-channel@0.3.31 X X -futures-core@0.3.31 X X -futures-io@0.3.31 X X -futures-macro@0.3.31 X X -futures-sink@0.3.31 X X -futures-task@0.3.31 X X -futures-util@0.3.31 X X +futures@0.3.30 X X +futures-channel@0.3.30 X X +futures-core@0.3.30 X X +futures-io@0.3.30 X X +futures-macro@0.3.30 X X +futures-sink@0.3.30 X X +futures-task@0.3.30 X X +futures-util@0.3.30 X X generic-array@0.14.7 X getrandom@0.2.15 X X -gimli@0.31.1 X X +gimli@0.29.0 X X gloo-timers@0.3.0 X X hashbrown@0.14.5 X X hermit-abi@0.3.9 X X @@ -68,22 +68,22 @@ home@0.5.9 X X http@1.1.0 X X http-body@1.0.1 X http-body-util@0.1.2 X -httparse@1.9.5 X X -hyper@1.5.0 X -hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X -iana-time-zone@0.1.61 X X +httparse@1.9.4 X X +hyper@1.4.1 X +hyper-rustls@0.27.2 X X X +hyper-util@0.1.7 X +iana-time-zone@0.1.60 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X inout@0.1.3 X X -ipnet@2.10.1 X X +ipnet@2.9.0 X X itoa@1.0.11 X X jni@0.21.1 X X jni-sys@0.3.0 X X -js-sys@0.3.72 X X +js-sys@0.3.70 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X -libc@0.2.161 X X +libc@0.2.158 X X libm@0.2.8 X X linux-raw-sys@0.4.14 X X X lock_api@0.4.12 X X @@ -91,7 +91,7 @@ log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X mime@0.3.17 X X -miniz_oxide@0.8.0 X X X +miniz_oxide@0.7.4 X X X mio@1.0.2 X num-bigint@0.4.6 X X num-bigint-dig@0.8.4 X X @@ -100,10 +100,10 @@ num-derive@0.3.3 X X num-integer@0.1.46 X X num-iter@0.1.45 X X num-traits@0.2.19 X X -object@0.36.5 X X -once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-java@0.47.4 X +object@0.36.3 X X +once_cell@1.19.0 X X +opendal@0.50.2 X +opendal-java@0.47.5 X openssh@0.11.2 X X openssh-sftp-client@0.15.1 X openssh-sftp-client-lowlevel@0.7.0 X @@ -117,8 +117,8 @@ pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project@1.1.6 X X -pin-project-internal@1.1.6 X X +pin-project@1.1.5 X X +pin-project-internal@1.1.5 X X pin-project-lite@0.2.14 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X @@ -126,35 +126,35 @@ pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.86 X X quick-xml@0.35.0 X -quick-xml@0.36.2 X +quick-xml@0.36.1 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -redox_syscall@0.5.7 X -reqsign@0.16.0 X -reqwest@0.12.8 X X +redox_syscall@0.5.3 X +reqsign@0.16.1 X +reqwest@0.12.7 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustix@0.38.37 X X X -rustls@0.23.15 X X X -rustls-pemfile@2.2.0 X X X -rustls-pki-types@1.10.0 X X -rustls-webpki@0.102.8 X +rustix@0.38.35 X X X +rustls@0.23.12 X X X +rustls-pemfile@2.1.3 X X X +rustls-pki-types@1.8.0 X X +rustls-webpki@0.102.7 X ryu@1.0.18 X X salsa20@0.10.2 X X same-file@1.0.6 X X scopeguard@1.2.0 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X -serde_json@1.0.132 X X +serde@1.0.209 X X +serde_derive@1.0.209 X X +serde_json@1.0.127 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X sha2@0.10.8 X X @@ -173,12 +173,12 @@ ssh_format_error@0.1.0 X stable_deref_trait@1.2.0 X X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.76 X X sync_wrapper@1.0.1 X -tempfile@3.13.0 X X +tempfile@3.12.0 X X thin-vec@0.2.13 X X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.63 X X +thiserror-impl@1.0.63 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X @@ -189,7 +189,9 @@ tokio@1.40.0 X tokio-io-utility@0.7.6 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X -tokio-util@0.7.12 X +tokio-util@0.7.11 X +tower@0.4.13 X +tower-layer@0.3.3 X tower-service@0.3.3 X tracing@0.1.40 X tracing-attributes@0.1.27 X @@ -198,26 +200,26 @@ trim-in-place@0.1.7 X triomphe@0.1.11 X X try-lock@0.2.5 X typenum@1.17.0 X X -unicode-bidi@0.3.17 X X -unicode-ident@1.0.13 X X X -unicode-normalization@0.1.24 X X +unicode-bidi@0.3.15 X X +unicode-ident@1.0.12 X X X +unicode-normalization@0.1.23 X X untrusted@0.9.0 X url@2.5.2 X X -uuid@1.11.0 X X +uuid@1.10.0 X X vec-strings@0.4.8 X version_check@0.9.5 X X walkdir@2.5.0 X X want@0.3.1 X wasi@0.11.0+wasi-snapshot-preview1 X X X -wasm-bindgen@0.2.95 X X -wasm-bindgen-backend@0.2.95 X X -wasm-bindgen-futures@0.4.45 X X -wasm-bindgen-macro@0.2.95 X X -wasm-bindgen-macro-support@0.2.95 X X -wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X -web-sys@0.3.72 X X -webpki-roots@0.26.6 X +wasm-bindgen@0.2.93 X X +wasm-bindgen-backend@0.2.93 X X +wasm-bindgen-futures@0.4.43 X X +wasm-bindgen-macro@0.2.93 X X +wasm-bindgen-macro-support@0.2.93 X X +wasm-bindgen-shared@0.2.93 X X +wasm-streams@0.4.0 X X +web-sys@0.3.70 X X +webpki-roots@0.26.3 X winapi-util@0.1.9 X X windows-core@0.52.0 X X windows-registry@0.2.0 X X diff --git a/bindings/lua/Cargo.toml b/bindings/lua/Cargo.toml index ccce3653372c..c175044dce53 100644 --- a/bindings/lua/Cargo.toml +++ b/bindings/lua/Cargo.toml @@ -18,7 +18,7 @@ [package] name = "opendal-lua" publish = false -version = "0.1.10" +version = "0.1.11" authors = ["Apache OpenDAL "] edition = "2021" diff --git a/bindings/lua/DEPENDENCIES.rust.tsv b/bindings/lua/DEPENDENCIES.rust.tsv index a03dba2fa172..e615e985d293 100644 --- a/bindings/lua/DEPENDENCIES.rust.tsv +++ b/bindings/lua/DEPENDENCIES.rust.tsv @@ -5,7 +5,7 @@ aes@0.8.4 X X aho-corasick@1.1.3 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -18,9 +18,9 @@ block-padding@0.3.3 X X bstr@1.10.0 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -64,7 +64,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -76,7 +76,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X @@ -84,7 +84,7 @@ mime@0.3.17 X X miniz_oxide@0.8.0 X X X mio@1.0.2 X mlua@0.9.9 X -mlua-sys@0.6.3 X +mlua-sys@0.6.4 X mlua_derive@0.9.3 X num-bigint@0.4.6 X X num-bigint-dig@0.8.4 X X @@ -94,14 +94,14 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-lua@0.1.10 X +opendal@0.50.2 X +opendal-lua@0.1.11 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X @@ -111,25 +111,25 @@ powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X proc-macro-error@1.0.4 X X proc-macro-error-attr@1.0.4 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -regex@1.11.0 X X +regex@1.11.1 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc-hash@2.0.0 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -137,8 +137,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -153,17 +153,17 @@ spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -187,7 +187,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/bindings/nodejs/Cargo.toml b/bindings/nodejs/Cargo.toml index da39f0ac37c7..1e7d7307dd0f 100644 --- a/bindings/nodejs/Cargo.toml +++ b/bindings/nodejs/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.47.6" +version = "0.47.7" [features] default = [ diff --git a/bindings/nodejs/DEPENDENCIES.rust.tsv b/bindings/nodejs/DEPENDENCIES.rust.tsv index f4a8c8704f7b..9aa210e9ffca 100644 --- a/bindings/nodejs/DEPENDENCIES.rust.tsv +++ b/bindings/nodejs/DEPENDENCIES.rust.tsv @@ -5,7 +5,7 @@ aes@0.8.4 X X aho-corasick@1.1.3 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -18,9 +18,9 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -66,7 +66,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -78,14 +78,14 @@ jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X libloading@0.8.5 X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X mime@0.3.17 X X miniz_oxide@0.8.0 X X X mio@1.0.2 X -napi@2.16.12 X +napi@2.16.13 X napi-build@2.1.3 X napi-derive@2.16.12 X napi-derive-backend@1.0.74 X @@ -98,38 +98,38 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-nodejs@0.47.6 X +opendal@0.50.2 X +opendal-nodejs@0.47.7 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -regex@1.11.0 X X +regex@1.11.1 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -137,8 +137,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -152,17 +152,17 @@ socket2@0.5.7 X X spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -187,7 +187,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/bindings/nodejs/npm/darwin-arm64/package.json b/bindings/nodejs/npm/darwin-arm64/package.json index e87a1706ca3f..3621846d29d9 100644 --- a/bindings/nodejs/npm/darwin-arm64/package.json +++ b/bindings/nodejs/npm/darwin-arm64/package.json @@ -1,7 +1,7 @@ { "name": "@opendal/lib-darwin-arm64", "repository": "git@github.com/apache/opendal.git", - "version": "0.47.6", + "version": "0.47.7", "os": [ "darwin" ], diff --git a/bindings/nodejs/npm/darwin-x64/package.json b/bindings/nodejs/npm/darwin-x64/package.json index e5eb81231a3d..e1fefdb75ab9 100644 --- a/bindings/nodejs/npm/darwin-x64/package.json +++ b/bindings/nodejs/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@opendal/lib-darwin-x64", - "version": "0.47.6", + "version": "0.47.7", "repository": "git@github.com/apache/opendal.git", "os": [ "darwin" diff --git a/bindings/nodejs/npm/linux-arm64-gnu/package.json b/bindings/nodejs/npm/linux-arm64-gnu/package.json index c84e80fb3f33..72ebc4d56844 100644 --- a/bindings/nodejs/npm/linux-arm64-gnu/package.json +++ b/bindings/nodejs/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@opendal/lib-linux-arm64-gnu", - "version": "0.47.6", + "version": "0.47.7", "repository": "git@github.com/apache/opendal.git", "os": [ "linux" diff --git a/bindings/nodejs/npm/linux-arm64-musl/package.json b/bindings/nodejs/npm/linux-arm64-musl/package.json index 61ac3f22faeb..e68dca0fc2dc 100644 --- a/bindings/nodejs/npm/linux-arm64-musl/package.json +++ b/bindings/nodejs/npm/linux-arm64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@opendal/lib-linux-arm64-musl", - "version": "0.47.6", + "version": "0.47.7", "repository": "git@github.com/apache/opendal.git", "os": [ "linux" diff --git a/bindings/nodejs/npm/linux-x64-gnu/package.json b/bindings/nodejs/npm/linux-x64-gnu/package.json index 4f32595b8df0..bb6ae4610504 100644 --- a/bindings/nodejs/npm/linux-x64-gnu/package.json +++ b/bindings/nodejs/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@opendal/lib-linux-x64-gnu", - "version": "0.47.6", + "version": "0.47.7", "repository": "git@github.com/apache/opendal.git", "os": [ "linux" diff --git a/bindings/nodejs/npm/win32-arm64-msvc/package.json b/bindings/nodejs/npm/win32-arm64-msvc/package.json index 5cf6ef6dd6f6..a54c4b8c72b0 100644 --- a/bindings/nodejs/npm/win32-arm64-msvc/package.json +++ b/bindings/nodejs/npm/win32-arm64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@opendal/lib-win32-arm64-msvc", - "version": "0.47.6", + "version": "0.47.7", "repository": "git@github.com/apache/opendal.git", "os": [ "win32" diff --git a/bindings/nodejs/npm/win32-x64-msvc/package.json b/bindings/nodejs/npm/win32-x64-msvc/package.json index b13f0eefb33a..a2ccd2f1722f 100644 --- a/bindings/nodejs/npm/win32-x64-msvc/package.json +++ b/bindings/nodejs/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@opendal/lib-win32-x64-msvc", - "version": "0.47.6", + "version": "0.47.7", "repository": "git@github.com/apache/opendal.git", "os": [ "win32" diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json index e1bce5e5c4cd..8b1c692b109f 100644 --- a/bindings/nodejs/package.json +++ b/bindings/nodejs/package.json @@ -1,7 +1,7 @@ { "name": "opendal", "author": "Apache OpenDAL ", - "version": "0.47.6", + "version": "0.47.7", "license": "Apache-2.0", "main": "index.js", "types": "index.d.ts", diff --git a/bindings/ocaml/DEPENDENCIES.rust.tsv b/bindings/ocaml/DEPENDENCIES.rust.tsv index d907c464ef50..1deb00d883a2 100644 --- a/bindings/ocaml/DEPENDENCIES.rust.tsv +++ b/bindings/ocaml/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -16,9 +16,9 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cipher@0.4.4 X X @@ -62,7 +62,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -73,7 +73,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X @@ -93,35 +93,35 @@ ocaml-build@1.0.0 X ocaml-derive@1.0.0 X ocaml-sys@0.24.0 X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X opendal-ocaml@0.0.0 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -129,8 +129,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -144,17 +144,17 @@ socket2@0.5.7 X X spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -178,7 +178,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/bindings/php/Cargo.toml b/bindings/php/Cargo.toml index f363cc687820..7a30c4135946 100644 --- a/bindings/php/Cargo.toml +++ b/bindings/php/Cargo.toml @@ -18,7 +18,7 @@ [package] name = "opendal-php" publish = false -version = "0.1.10" +version = "0.1.11" authors = ["Apache OpenDAL "] edition = "2021" diff --git a/bindings/php/DEPENDENCIES.rust.tsv b/bindings/php/DEPENDENCIES.rust.tsv index 6f65f8a8a0af..fb54e5c0c6ac 100644 --- a/bindings/php/DEPENDENCIES.rust.tsv +++ b/bindings/php/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -19,14 +19,14 @@ block-padding@0.3.3 X X bumpalo@3.16.0 X X bytecount@0.6.8 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X bzip2@0.4.4 X X bzip2-sys@0.1.11+1.0.8 X X camino@1.1.9 X X cargo-platform@0.1.8 X X cargo_metadata@0.14.2 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cexpr@0.6.0 X X cfg-if@1.0.0 X X chrono@0.4.38 X X @@ -87,7 +87,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X ident_case@1.0.1 X X @@ -102,7 +102,7 @@ lazy_static@1.5.0 X X lazycell@1.3.0 X X libc@0.2.161 X X libloading@0.8.5 X -libm@0.2.8 X X +libm@0.2.11 X X linux-raw-sys@0.4.14 X X X lock_api@0.4.12 X X log@0.4.22 X X @@ -122,8 +122,8 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-php@0.1.10 X +opendal@0.50.2 X +opendal-php@0.1.11 X openssl@0.10.68 X openssl-macros@0.1.1 X X openssl-probe@0.1.5 X X @@ -138,7 +138,7 @@ peeking_take_while@0.1.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X @@ -146,8 +146,8 @@ pkcs8@0.10.2 X X pkg-config@0.3.31 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -prettyplease@0.2.24 X X -proc-macro2@1.0.88 X X +prettyplease@0.2.25 X X +proc-macro2@1.0.89 X X pulldown-cmark@0.9.6 X quick-xml@0.35.0 X quick-xml@0.36.2 X @@ -156,19 +156,19 @@ rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X redox_syscall@0.5.7 X -regex@1.11.0 X X +regex@1.11.1 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc-hash@1.1.0 X X rustc_version@0.4.1 X X -rustix@0.38.37 X X X -rustls@0.23.15 X X X +rustix@0.38.38 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -181,8 +181,8 @@ scrypt@0.11.0 X X security-framework@2.11.1 X X security-framework-sys@2.12.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -199,18 +199,18 @@ spki@0.7.3 X X strsim@0.10.0 X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X tempfile@3.13.0 X X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -238,7 +238,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X which@4.4.2 X diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index 0ecb72511eed..9f418bd9a2dc 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.45.11" +version = "0.45.12" [features] default = [ diff --git a/bindings/python/DEPENDENCIES.rust.tsv b/bindings/python/DEPENDENCIES.rust.tsv index 17c48e192713..4e277c39e369 100644 --- a/bindings/python/DEPENDENCIES.rust.tsv +++ b/bindings/python/DEPENDENCIES.rust.tsv @@ -4,7 +4,7 @@ adler2@2.0.0 X X X aes@0.8.4 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.91 X X arc-swap@1.7.1 X X async-trait@0.1.83 X X autocfg@1.4.0 X X @@ -21,7 +21,7 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X cc@1.1.31 X X cfg-if@1.0.0 X X @@ -60,7 +60,7 @@ getrandom@0.2.15 X X gimli@0.31.1 X X gloo-timers@0.3.0 X X hashbrown@0.14.5 X X -heck@0.4.1 X X +heck@0.5.0 X X hermit-abi@0.3.9 X X hex@0.4.3 X X hmac@0.12.1 X X @@ -83,7 +83,7 @@ js-sys@0.3.72 X X jsonwebtoken@9.3.0 X lazy_static@1.5.0 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.10 X X linux-raw-sys@0.4.14 X X X lock_api@0.4.12 X X log@0.4.22 X X @@ -102,8 +102,8 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-python@0.45.11 X +opendal@0.50.2 X +opendal-python@0.45.12 X openssh@0.11.2 X X openssh-sftp-client@0.15.1 X openssh-sftp-client-lowlevel@0.7.0 X @@ -117,9 +117,9 @@ pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project@1.1.6 X X -pin-project-internal@1.1.6 X X -pin-project-lite@0.2.14 X X +pin-project@1.1.7 X X +pin-project-internal@1.1.7 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X @@ -127,13 +127,13 @@ pkcs8@0.10.2 X X portable-atomic@1.9.0 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X -pyo3@0.21.2 X X -pyo3-asyncio-0-21@0.21.0 X -pyo3-build-config@0.21.2 X X -pyo3-ffi@0.21.2 X X -pyo3-macros@0.21.2 X X -pyo3-macros-backend@0.21.2 X X +proc-macro2@1.0.89 X X +pyo3@0.22.5 X X +pyo3-async-runtimes@0.22.0 X +pyo3-build-config@0.22.5 X X +pyo3-ffi@0.22.5 X X +pyo3-macros@0.22.5 X X +pyo3-macros-backend@0.22.5 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X @@ -141,14 +141,14 @@ rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X redox_syscall@0.5.7 X -reqsign@0.16.0 X +reqsign@0.16.1 X reqwest@0.12.8 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustix@0.38.37 X X X +rustix@0.38.38 X X X rustls@0.23.15 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X @@ -158,8 +158,8 @@ salsa20@0.10.2 X X scopeguard@1.2.0 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.213 X X +serde_derive@1.0.213 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -179,20 +179,20 @@ ssh_format_error@0.1.0 X stable_deref_trait@1.2.0 X X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.85 X X sync_wrapper@1.0.1 X target-lexicon@0.12.16 X tempfile@3.13.0 X X thin-vec@0.2.13 X X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.65 X X +thiserror-impl@1.0.65 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-io-utility@0.7.6 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X @@ -222,7 +222,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/bindings/ruby/Cargo.toml b/bindings/ruby/Cargo.toml index 129d7a12eac2..d9fe81be04b5 100644 --- a/bindings/ruby/Cargo.toml +++ b/bindings/ruby/Cargo.toml @@ -18,7 +18,7 @@ [package] name = "opendal-ruby" publish = false -version = "0.1.10" +version = "0.1.11" authors = ["Apache OpenDAL "] edition = "2021" diff --git a/bindings/ruby/DEPENDENCIES.rust.tsv b/bindings/ruby/DEPENDENCIES.rust.tsv index 4acda7b6572b..7c8dbcc4606d 100644 --- a/bindings/ruby/DEPENDENCIES.rust.tsv +++ b/bindings/ruby/DEPENDENCIES.rust.tsv @@ -5,7 +5,7 @@ aes@0.8.4 X X aho-corasick@1.1.3 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -19,9 +19,9 @@ block-buffer@0.10.4 X X block-padding@0.3.3 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X +bytes@1.8.0 X cbc@0.1.2 X X -cc@1.1.31 X X +cc@1.1.34 X X cexpr@0.6.0 X X cfg-if@1.0.0 X X chrono@0.4.38 X X @@ -68,7 +68,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -82,7 +82,7 @@ lazy_static@1.5.0 X X lazycell@1.3.0 X X libc@0.2.161 X X libloading@0.8.5 X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X magnus@0.5.5 X magnus-macros@0.4.1 X @@ -101,21 +101,21 @@ num-iter@0.1.45 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X -opendal-ruby@0.1.10 X +opendal@0.50.2 X +opendal-ruby@0.1.11 X ordered-multimap@0.7.3 X pbkdf2@0.12.2 X X pem@3.0.4 X pem-rfc7468@0.7.0 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X pkcs1@0.7.5 X X pkcs5@0.7.1 X X pkcs8@0.10.2 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X @@ -125,18 +125,18 @@ rand_core@0.6.4 X X rb-sys@0.9.102 X X rb-sys-build@0.9.102 X X rb-sys-env@0.1.2 X X -regex@1.11.0 X X +regex@1.11.1 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rsa@0.9.6 X X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc-hash@1.1.0 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -144,8 +144,8 @@ ryu@1.0.18 X X salsa20@0.10.2 X X scrypt@0.11.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -161,17 +161,17 @@ spin@0.9.8 X spki@0.7.3 X X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -195,7 +195,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/core/Cargo.lock b/core/Cargo.lock index e51c3c003b10..ebcd9138a570 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -4989,7 +4989,7 @@ checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "opendal" -version = "0.50.1" +version = "0.50.2" dependencies = [ "anyhow", "async-backtrace", @@ -6513,9 +6513,9 @@ dependencies = [ [[package]] name = "reqsign" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03dd4ba7c3901dd43e6b8c7446a760d45bc1ea4301002e1a6fa48f97c3a796fa" +checksum = "eb0075a66c8bfbf4cc8b70dca166e722e1f55a3ea9250ecbb85f4d92a5f64149" dependencies = [ "anyhow", "async-trait", diff --git a/core/Cargo.toml b/core/Cargo.toml index 4477c84bb30d..b904bd7e59a4 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -28,7 +28,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.50.1" +version = "0.50.2" [lints.clippy] unused_async = "warn" diff --git a/core/DEPENDENCIES.rust.tsv b/core/DEPENDENCIES.rust.tsv index 803f30c46b0e..e2c8e3f72b85 100644 --- a/core/DEPENDENCIES.rust.tsv +++ b/core/DEPENDENCIES.rust.tsv @@ -77,7 +77,7 @@ mio@1.0.2 X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X ordered-multimap@0.7.3 X percent-encoding@2.3.1 X X pin-project-lite@0.2.14 X X @@ -90,7 +90,7 @@ quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X +reqsign@0.16.1 X reqwest@0.12.8 X X ring@0.17.8 X rust-ini@0.21.1 X diff --git a/integrations/cloud_filter/Cargo.toml b/integrations/cloud_filter/Cargo.toml index 0e300c2226dd..14767577c930 100644 --- a/integrations/cloud_filter/Cargo.toml +++ b/integrations/cloud_filter/Cargo.toml @@ -24,7 +24,7 @@ license = "Apache-2.0" name = "cloud_filter_opendal" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.0.2" +version = "0.0.3" [package.metadata.docs.rs] default-target = "x86_64-pc-windows-msvc" diff --git a/integrations/cloud_filter/DEPENDENCIES.rust.tsv b/integrations/cloud_filter/DEPENDENCIES.rust.tsv index d4d249a880f5..0dab0ea80782 100644 --- a/integrations/cloud_filter/DEPENDENCIES.rust.tsv +++ b/integrations/cloud_filter/DEPENDENCIES.rust.tsv @@ -3,7 +3,7 @@ addr2line@0.24.2 X X adler2@2.0.0 X X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -13,12 +13,12 @@ bincode@1.3.3 X block-buffer@0.10.4 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X cloud-filter@0.0.5 X -cloud_filter_opendal@0.0.2 X +cloud_filter_opendal@0.0.3 X const-oid@0.9.6 X X const-random@0.1.18 X X const-random-macro@0.1.16 X X @@ -59,7 +59,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -79,34 +79,34 @@ num-conv@0.1.0 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X ordered-multimap@0.7.3 X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.35.0 X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rust-ini@0.21.1 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X ryu@1.0.18 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -118,7 +118,7 @@ smallvec@1.13.2 X X socket2@0.5.7 X X spin@0.9.8 X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X time@0.3.36 X X time-core@0.1.2 X X @@ -126,7 +126,7 @@ time-macros@0.2.18 X X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -151,7 +151,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X widestring@1.1.0 X X diff --git a/integrations/compat/Cargo.toml b/integrations/compat/Cargo.toml index a1834a074592..2fe51ad15550 100644 --- a/integrations/compat/Cargo.toml +++ b/integrations/compat/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "1.0.0" +version = "1.0.1" [package.metadata.docs.rs] all-features = true diff --git a/integrations/compat/DEPENDENCIES.rust.tsv b/integrations/compat/DEPENDENCIES.rust.tsv index 56ca09e146c4..c9c6055360cd 100644 --- a/integrations/compat/DEPENDENCIES.rust.tsv +++ b/integrations/compat/DEPENDENCIES.rust.tsv @@ -1,7 +1,7 @@ crate Apache-2.0 MIT Unicode-DFS-2016 async-trait@0.1.83 X X -opendal_compat@1.0.0 X -proc-macro2@1.0.88 X X +opendal_compat@1.0.1 X +proc-macro2@1.0.89 X X quote@1.0.37 X X -syn@2.0.81 X X +syn@2.0.87 X X unicode-ident@1.0.13 X X X diff --git a/integrations/dav-server/Cargo.toml b/integrations/dav-server/Cargo.toml index c2ab28e0d220..52afcd77c2b9 100644 --- a/integrations/dav-server/Cargo.toml +++ b/integrations/dav-server/Cargo.toml @@ -18,7 +18,7 @@ [package] description = "Use OpenDAL as a backend to access data in various service with WebDAV protocol" name = "dav-server-opendalfs" -version = "0.2.1" +version = "0.2.2" authors = ["Apache OpenDAL "] edition = "2021" diff --git a/integrations/dav-server/DEPENDENCIES.rust.tsv b/integrations/dav-server/DEPENDENCIES.rust.tsv index 44bde260d597..15f6d560d3a6 100644 --- a/integrations/dav-server/DEPENDENCIES.rust.tsv +++ b/integrations/dav-server/DEPENDENCIES.rust.tsv @@ -5,7 +5,7 @@ aho-corasick@1.1.3 X X allocator-api2@0.2.18 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -15,15 +15,15 @@ base64@0.22.1 X X bitflags@2.6.0 X X block-buffer@0.10.4 X X bumpalo@3.16.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X core-foundation-sys@0.8.7 X X cpufeatures@0.2.14 X X crypto-common@0.1.6 X X dav-server@0.7.0 X -dav-server-opendalfs@0.2.1 X +dav-server-opendalfs@0.2.2 X deranged@0.3.11 X X digest@0.10.7 X X equivalent@1.0.1 X X @@ -57,7 +57,7 @@ httparse@1.9.5 X X httpdate@1.0.3 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -79,33 +79,33 @@ num-conv@0.1.0 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X parking_lot@0.12.3 X X parking_lot_core@0.9.10 X X percent-encoding@2.3.1 X X -pin-project@1.1.6 X X -pin-project-internal@1.1.6 X X -pin-project-lite@0.2.14 X X +pin-project@1.1.7 X X +pin-project-internal@1.1.7 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X powerfmt@0.2.0 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.36.2 X quote@1.0.37 X X redox_syscall@0.5.7 X -regex@1.11.0 X X +regex@1.11.1 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqwest@0.12.8 X X +reqwest@0.12.9 X X ring@0.17.8 X rustc-demangle@0.1.24 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X ryu@1.0.18 X X scopeguard@1.2.0 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -115,14 +115,14 @@ smallvec@1.13.2 X X socket2@0.5.7 X X spin@0.9.8 X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -147,7 +147,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/integrations/fuse3/Cargo.toml b/integrations/fuse3/Cargo.toml index f0acb5de8143..403724053220 100644 --- a/integrations/fuse3/Cargo.toml +++ b/integrations/fuse3/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.0.8" +version = "0.0.9" [dependencies] bytes = "1.6.0" diff --git a/integrations/fuse3/DEPENDENCIES.rust.tsv b/integrations/fuse3/DEPENDENCIES.rust.tsv index 33c496529f43..8222f8d50813 100644 --- a/integrations/fuse3/DEPENDENCIES.rust.tsv +++ b/integrations/fuse3/DEPENDENCIES.rust.tsv @@ -3,7 +3,7 @@ addr2line@0.24.2 X X adler2@2.0.0 X X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-notify@0.3.0 X async-trait@0.1.83 X X autocfg@1.4.0 X X @@ -14,8 +14,8 @@ bincode@1.3.3 X bitflags@2.6.0 X X block-buffer@0.10.4 X X bumpalo@3.16.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cfg-if@1.0.0 X X cfg_aliases@0.2.1 X chrono@0.4.38 X X @@ -32,7 +32,7 @@ flagset@0.4.6 X fnv@1.0.7 X X form_urlencoded@1.2.1 X X fuse3@0.8.1 X -fuse3_opendal@0.0.8 X +fuse3_opendal@0.0.9 X futures@0.3.31 X X futures-channel@0.3.31 X X futures-core@0.3.31 X X @@ -53,7 +53,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -74,25 +74,25 @@ nix@0.29.0 X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X parking@2.2.1 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.36.2 X quote@1.0.37 X X -reqwest@0.12.8 X X +reqwest@0.12.9 X X ring@0.17.8 X rustc-demangle@0.1.24 X X -rustix@0.38.37 X X X -rustls@0.23.15 X X X +rustix@0.38.38 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X ryu@1.0.18 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sharded-slab@0.1.7 X @@ -103,11 +103,11 @@ smallvec@1.13.2 X X socket2@0.5.7 X X spin@0.9.8 X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -133,7 +133,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X which@6.0.3 X diff --git a/integrations/object_store/Cargo.toml b/integrations/object_store/Cargo.toml index cbf7d7ad0065..a654d0fc6b56 100644 --- a/integrations/object_store/Cargo.toml +++ b/integrations/object_store/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.48.1" +version = "0.48.2" [features] send_wrapper = ["dep:send_wrapper"] diff --git a/integrations/object_store/DEPENDENCIES.rust.tsv b/integrations/object_store/DEPENDENCIES.rust.tsv index bb5552216822..cdfdc72bb7a7 100644 --- a/integrations/object_store/DEPENDENCIES.rust.tsv +++ b/integrations/object_store/DEPENDENCIES.rust.tsv @@ -3,7 +3,7 @@ addr2line@0.24.2 X X adler2@2.0.0 X X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X async-trait@0.1.83 X X autocfg@1.4.0 X X backon@1.2.0 X @@ -13,8 +13,8 @@ bitflags@2.6.0 X X block-buffer@0.10.4 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X const-oid@0.9.6 X X @@ -53,7 +53,7 @@ httparse@1.9.5 X X humantime@2.1.0 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -71,31 +71,31 @@ miniz_oxide@0.8.0 X X X mio@1.0.2 X num-traits@0.2.19 X X object@0.36.5 X X -object_store@0.11.0 X X -object_store_opendal@0.48.1 X +object_store@0.11.1 X X +object_store_opendal@0.48.2 X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X parking_lot@0.12.3 X X parking_lot_core@0.9.10 X X percent-encoding@2.3.1 X X -pin-project@1.1.6 X X -pin-project-internal@1.1.6 X X -pin-project-lite@0.2.14 X X +pin-project@1.1.7 X X +pin-project-internal@1.1.7 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X redox_syscall@0.5.7 X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X @@ -103,8 +103,8 @@ ryu@1.0.18 X X same-file@1.0.6 X X scopeguard@1.2.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -117,11 +117,11 @@ snafu-derive@0.8.5 X X socket2@0.5.7 X X spin@0.9.8 X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -147,7 +147,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X winapi-util@0.1.9 X X diff --git a/integrations/parquet/Cargo.toml b/integrations/parquet/Cargo.toml index 2d98fb84295d..8d15e551581d 100644 --- a/integrations/parquet/Cargo.toml +++ b/integrations/parquet/Cargo.toml @@ -25,7 +25,7 @@ homepage = "https://opendal.apache.org/" license = "Apache-2.0" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.2.1" +version = "0.2.2" [dependencies] async-trait = "0.1" diff --git a/integrations/parquet/DEPENDENCIES.rust.tsv b/integrations/parquet/DEPENDENCIES.rust.tsv index fd917b2b910b..be7fd1f5b562 100644 --- a/integrations/parquet/DEPENDENCIES.rust.tsv +++ b/integrations/parquet/DEPENDENCIES.rust.tsv @@ -4,14 +4,14 @@ adler2@2.0.0 X X X ahash@0.8.11 X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X -arrow-array@53.1.0 X -arrow-buffer@53.1.0 X -arrow-cast@53.1.0 X -arrow-data@53.1.0 X -arrow-ipc@53.1.0 X -arrow-schema@53.1.0 X -arrow-select@53.1.0 X +anyhow@1.0.92 X X +arrow-array@53.2.0 X +arrow-buffer@53.2.0 X +arrow-cast@53.2.0 X +arrow-data@53.2.0 X +arrow-ipc@53.2.0 X +arrow-schema@53.2.0 X +arrow-select@53.2.0 X async-trait@0.1.83 X X atoi@2.0.0 X autocfg@1.4.0 X X @@ -22,8 +22,8 @@ bitflags@1.3.2 X X block-buffer@0.10.4 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X const-oid@0.9.6 X X @@ -65,7 +65,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -80,7 +80,7 @@ lexical-util@1.0.3 X X lexical-write-float@1.0.2 X X lexical-write-integer@1.0.2 X X libc@0.2.161 X X -libm@0.2.8 X X +libm@0.2.11 X X log@0.4.22 X X md-5@0.10.6 X X memchr@2.7.4 X X @@ -96,35 +96,35 @@ num-rational@0.4.2 X X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X ordered-float@2.10.1 X -parquet@53.1.0 X -parquet_opendal@0.2.1 X +parquet@53.2.0 X +parquet_opendal@0.2.2 X paste@1.0.15 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X ppv-lite86@0.2.20 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.36.2 X quote@1.0.37 X X rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rustc-demangle@0.1.24 X X rustc_version@0.4.1 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X ryu@1.0.18 X X semver@1.0.23 X X seq-macro@0.3.5 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -136,13 +136,13 @@ socket2@0.5.7 X X spin@0.9.8 X static_assertions@1.1.0 X X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X thrift@0.17.0 X tiny-keccak@2.0.2 X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -167,7 +167,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X windows-core@0.52.0 X X diff --git a/integrations/unftp-sbe/Cargo.toml b/integrations/unftp-sbe/Cargo.toml index 1e91a603900c..4079d75f8e96 100644 --- a/integrations/unftp-sbe/Cargo.toml +++ b/integrations/unftp-sbe/Cargo.toml @@ -24,7 +24,7 @@ license = "Apache-2.0" name = "unftp-sbe-opendal" repository = "https://github.com/apache/opendal" rust-version = "1.75" -version = "0.0.8" +version = "0.0.9" [dependencies] async-trait = "0.1.80" diff --git a/integrations/unftp-sbe/DEPENDENCIES.rust.tsv b/integrations/unftp-sbe/DEPENDENCIES.rust.tsv index e0d31596e0c8..e748d6bdc9ac 100644 --- a/integrations/unftp-sbe/DEPENDENCIES.rust.tsv +++ b/integrations/unftp-sbe/DEPENDENCIES.rust.tsv @@ -3,7 +3,7 @@ addr2line@0.24.2 X X adler2@2.0.0 X X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X arc-swap@1.7.1 X X asn1-rs@0.6.2 X X asn1-rs-derive@0.5.1 X X @@ -20,8 +20,8 @@ bitflags@2.6.0 X X block-buffer@0.10.4 X X bumpalo@3.16.0 X X byteorder@1.5.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cexpr@0.6.0 X X cfg-if@1.0.0 X X cfg_aliases@0.2.1 X @@ -77,7 +77,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -111,17 +111,17 @@ num-traits@0.2.19 X X object@0.36.5 X X oid-registry@0.7.1 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X parking_lot@0.12.3 X X parking_lot_core@0.9.10 X X paste@1.0.15 X X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X powerfmt@0.2.0 X X ppv-lite86@0.2.20 X X -prettyplease@0.2.24 X X -proc-macro2@1.0.88 X X +prettyplease@0.2.25 X X +proc-macro2@1.0.89 X X prometheus@0.13.4 X proxy-protocol@0.5.0 X X quick-xml@0.36.2 X @@ -130,26 +130,26 @@ rand@0.8.5 X X rand_chacha@0.3.1 X X rand_core@0.6.4 X X redox_syscall@0.5.7 X -regex@1.11.0 X X +regex@1.11.1 X X regex-automata@0.4.8 X X regex-syntax@0.8.5 X X -reqsign@0.16.0 X -reqwest@0.12.8 X X +reqsign@0.16.1 X +reqwest@0.12.9 X X ring@0.17.8 X rustc-demangle@0.1.24 X X rustc-hash@1.1.0 X X rustc_version@0.4.1 X X rusticata-macros@4.1.0 X X -rustix@0.38.37 X X X -rustls@0.23.15 X X X +rustix@0.38.38 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X ryu@1.0.18 X X scopeguard@1.2.0 X X semver@1.0.23 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sha1@0.10.6 X X @@ -167,18 +167,18 @@ socket2@0.5.7 X X spin@0.9.8 X subtle@2.6.1 X syn@1.0.109 X X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X synstructure@0.13.1 X tagptr@0.2.0 X X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X time@0.3.36 X X time-core@0.1.2 X X time-macros@0.2.18 X X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-macros@2.4.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X @@ -189,7 +189,7 @@ tracing-core@0.1.32 X triomphe@0.1.11 X X try-lock@0.2.5 X typenum@1.17.0 X X -unftp-sbe-opendal@0.0.8 X +unftp-sbe-opendal@0.0.9 X unicode-bidi@0.3.17 X X unicode-ident@1.0.13 X X X unicode-normalization@0.1.24 X X @@ -205,7 +205,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X which@4.4.2 X diff --git a/integrations/virtiofs/DEPENDENCIES.rust.tsv b/integrations/virtiofs/DEPENDENCIES.rust.tsv index 6d84b3f767c7..896e1d86d5b8 100644 --- a/integrations/virtiofs/DEPENDENCIES.rust.tsv +++ b/integrations/virtiofs/DEPENDENCIES.rust.tsv @@ -3,7 +3,7 @@ addr2line@0.24.2 X X adler2@2.0.0 X X X android-tzdata@0.1.1 X X android_system_properties@0.1.5 X X -anyhow@1.0.90 X X +anyhow@1.0.92 X X arc-swap@1.7.1 X X async-trait@0.1.83 X X autocfg@1.4.0 X X @@ -14,8 +14,8 @@ bitflags@1.3.2 X X bitflags@2.6.0 X X block-buffer@0.10.4 X X bumpalo@3.16.0 X X -bytes@1.7.2 X -cc@1.1.31 X X +bytes@1.8.0 X +cc@1.1.34 X X cfg-if@1.0.0 X X chrono@0.4.38 X X core-foundation-sys@0.8.7 X X @@ -45,7 +45,7 @@ http-body-util@0.1.2 X httparse@1.9.5 X X hyper@1.5.0 X hyper-rustls@0.27.3 X X X -hyper-util@0.1.9 X +hyper-util@0.1.10 X iana-time-zone@0.1.61 X X iana-time-zone-haiku@0.1.2 X X idna@0.5.0 X X @@ -63,23 +63,23 @@ mio@1.0.2 X num-traits@0.2.19 X X object@0.36.5 X X once_cell@1.20.2 X X -opendal@0.50.1 X +opendal@0.50.2 X percent-encoding@2.3.1 X X -pin-project-lite@0.2.14 X X +pin-project-lite@0.2.15 X X pin-utils@0.1.0 X X -proc-macro2@1.0.88 X X +proc-macro2@1.0.89 X X quick-xml@0.36.2 X quote@1.0.37 X X -reqwest@0.12.8 X X +reqwest@0.12.9 X X ring@0.17.8 X rustc-demangle@0.1.24 X X -rustls@0.23.15 X X X +rustls@0.23.16 X X X rustls-pemfile@2.2.0 X X X rustls-pki-types@1.10.0 X X rustls-webpki@0.102.8 X ryu@1.0.18 X X -serde@1.0.210 X X -serde_derive@1.0.210 X X +serde@1.0.214 X X +serde_derive@1.0.214 X X serde_json@1.0.132 X X serde_urlencoded@0.7.1 X X sharded-slab@0.1.7 X @@ -91,13 +91,13 @@ snafu-derive@0.8.5 X X socket2@0.5.7 X X spin@0.9.8 X subtle@2.6.1 X -syn@2.0.81 X X +syn@2.0.87 X X sync_wrapper@1.0.1 X -thiserror@1.0.64 X X -thiserror-impl@1.0.64 X X +thiserror@1.0.67 X X +thiserror-impl@1.0.67 X X tinyvec@1.8.0 X X X tinyvec_macros@0.1.1 X X X -tokio@1.40.0 X +tokio@1.41.0 X tokio-rustls@0.26.0 X X tokio-util@0.7.12 X tower-service@0.3.3 X @@ -114,7 +114,7 @@ uuid@1.11.0 X X version_check@0.9.5 X X vhost@0.10.0 X X vhost-user-backend@0.13.1 X -virtio-bindings@0.2.3 X X +virtio-bindings@0.2.4 X X virtio-queue@0.11.0 X X virtiofs_opendal@0.0.0 X vm-memory@0.14.1 X X @@ -127,7 +127,7 @@ wasm-bindgen-futures@0.4.45 X X wasm-bindgen-macro@0.2.95 X X wasm-bindgen-macro-support@0.2.95 X X wasm-bindgen-shared@0.2.95 X X -wasm-streams@0.4.1 X X +wasm-streams@0.4.2 X X web-sys@0.3.72 X X webpki-roots@0.26.6 X winapi@0.3.9 X X From 71c12a306cd1a57aa03d487cbe1d1b9e9cdba0a8 Mon Sep 17 00:00:00 2001 From: Liuqing Yue Date: Mon, 4 Nov 2024 22:56:20 +0800 Subject: [PATCH 09/12] chore: add codspeed for benchmark (#5280) Co-authored-by: Xuanwo --- .github/workflows/test_benchmark.yml | 73 ++++++++++++++++++++++++++ core/benches/types/concurrent_tasks.rs | 46 ++++++++-------- 2 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/test_benchmark.yml diff --git a/.github/workflows/test_benchmark.yml b/.github/workflows/test_benchmark.yml new file mode 100644 index 000000000000..ccaa30724b23 --- /dev/null +++ b/.github/workflows/test_benchmark.yml @@ -0,0 +1,73 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Benchmark Test + +on: + push: + branches: + - main + pull_request: + branches: + - main + paths: + - "core/src/**" + - "core/benches/**" + - "!core/src/docs/**" + - ".github/workflows/test_benchmark.yml" + # `workflow_dispatch` is needed by codspeed for first time trigger + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + +jobs: + benchmark: + runs-on: ubuntu-latest + if: github.event_name == 'push' || !github.event.pull_request.head.repo.fork + steps: + - uses: actions/checkout@v4 + - name: Setup Rust toolchain + uses: ./.github/actions/setup + - uses: 1password/load-secrets-action/configure@v1 + with: + connect-host: ${{ secrets.OP_CONNECT_HOST }} + connect-token: ${{ secrets.OP_CONNECT_TOKEN }} + - uses: 1password/load-secrets-action@v1 + with: + export-env: true + env: + CODSPEED_TOKEN: op://services/codspeed/token + - name: Setup codspeed + run: cargo install cargo-codspeed + - name: Setup Memory env + uses: ./.github/services/memory/memory + - name: Install codpseed-criterion-compat + working-directory: core + run: cargo add --dev --rename criterion --features async,async_tokio codspeed-criterion-compat@2.7.2 + - name: Build the benchmark targets + working-directory: core + run: cargo codspeed build --features tests,services-memory + - name: Run the benchmarks + uses: CodSpeedHQ/action@v3 + env: + OPENDAL_TEST: memory + with: + working-directory: core + run: cargo codspeed run + token: ${{ env.CODSPEED_TOKEN }} \ No newline at end of file diff --git a/core/benches/types/concurrent_tasks.rs b/core/benches/types/concurrent_tasks.rs index 3962a61f2080..3e0948541612 100644 --- a/core/benches/types/concurrent_tasks.rs +++ b/core/benches/types/concurrent_tasks.rs @@ -30,30 +30,34 @@ pub fn bench_concurrent_tasks(c: &mut Criterion) { let mut group = c.benchmark_group("bench_concurrent_tasks"); for concurrent in [1, 2, 4, 8, 16] { - group.bench_with_input(concurrent.to_string(), &concurrent, |b, concurrent| { - b.to_async(&*TOKIO).iter_batched( - || { - ConcurrentTasks::new(Executor::new(), *concurrent, |()| { - Box::pin(async { - tokio::time::sleep(Duration::from_millis(1)).await; - ((), Ok(())) + group.bench_with_input( + format!("concurrent {}", concurrent), + &concurrent, + |b, concurrent| { + b.to_async(&*TOKIO).iter_batched( + || { + ConcurrentTasks::new(Executor::new(), *concurrent, |()| { + Box::pin(async { + tokio::time::sleep(Duration::from_millis(1)).await; + ((), Ok(())) + }) }) - }) - }, - |mut tasks| async move { - for _ in 0..100 { - let _ = tasks.execute(()).await; - } + }, + |mut tasks| async move { + for _ in 0..100 { + let _ = tasks.execute(()).await; + } - loop { - if tasks.next().await.is_none() { - break; + loop { + if tasks.next().await.is_none() { + break; + } } - } - }, - BatchSize::PerIteration, - ) - }); + }, + BatchSize::PerIteration, + ) + }, + ); } group.finish() From a2149b29cd742ade67bfcef0de8671db943595b3 Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Mon, 4 Nov 2024 23:39:07 +0800 Subject: [PATCH 10/12] ci: Remove the token of codspeed (#5283) --- .github/workflows/test_benchmark.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/test_benchmark.yml b/.github/workflows/test_benchmark.yml index ccaa30724b23..b386a4458bc2 100644 --- a/.github/workflows/test_benchmark.yml +++ b/.github/workflows/test_benchmark.yml @@ -44,15 +44,6 @@ jobs: - uses: actions/checkout@v4 - name: Setup Rust toolchain uses: ./.github/actions/setup - - uses: 1password/load-secrets-action/configure@v1 - with: - connect-host: ${{ secrets.OP_CONNECT_HOST }} - connect-token: ${{ secrets.OP_CONNECT_TOKEN }} - - uses: 1password/load-secrets-action@v1 - with: - export-env: true - env: - CODSPEED_TOKEN: op://services/codspeed/token - name: Setup codspeed run: cargo install cargo-codspeed - name: Setup Memory env @@ -70,4 +61,3 @@ jobs: with: working-directory: core run: cargo codspeed run - token: ${{ env.CODSPEED_TOKEN }} \ No newline at end of file From 6cec7b48c56f7e471460040598b2554e8ae8317e Mon Sep 17 00:00:00 2001 From: Twice Date: Tue, 5 Nov 2024 00:13:14 +0800 Subject: [PATCH 11/12] feat(adapter/kv): support async iterating on scan results (#5208) --- core/Cargo.lock | 45 ++++++++++++++ core/Cargo.toml | 5 +- core/src/raw/adapters/kv/api.rs | 69 +++++++++++++++++++++- core/src/raw/adapters/kv/backend.rs | 61 +++++++++++++++---- core/src/raw/adapters/kv/mod.rs | 10 ++++ core/src/services/atomicserver/backend.rs | 2 + core/src/services/cacache/backend.rs | 2 + core/src/services/cloudflare_kv/backend.rs | 8 ++- core/src/services/d1/backend.rs | 2 + core/src/services/etcd/backend.rs | 9 ++- core/src/services/foundationdb/backend.rs | 2 + core/src/services/gridfs/backend.rs | 2 + core/src/services/libsql/backend.rs | 2 + core/src/services/memcached/backend.rs | 2 + core/src/services/mongodb/backend.rs | 2 + core/src/services/mysql/backend.rs | 2 + core/src/services/nebula_graph/backend.rs | 9 ++- core/src/services/persy/backend.rs | 2 + core/src/services/postgresql/backend.rs | 2 + core/src/services/redb/backend.rs | 2 + core/src/services/redis/backend.rs | 2 + core/src/services/rocksdb/backend.rs | 10 +++- core/src/services/sled/backend.rs | 10 +++- core/src/services/sqlite/backend.rs | 63 ++++++++++++++++---- core/src/services/surrealdb/backend.rs | 2 + core/src/services/tikv/backend.rs | 2 + 26 files changed, 289 insertions(+), 40 deletions(-) diff --git a/core/Cargo.lock b/core/Cargo.lock index ebcd9138a570..96b630981cbf 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -80,6 +80,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + [[package]] name = "aligned-array" version = "1.0.1" @@ -5037,6 +5043,7 @@ dependencies = [ "opentelemetry", "opentelemetry-otlp", "opentelemetry_sdk", + "ouroboros", "percent-encoding", "persy", "pretty_assertions", @@ -5369,6 +5376,31 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "ouroboros" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" +dependencies = [ + "heck 0.4.1", + "itertools 0.12.1", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.79", +] + [[package]] name = "outref" version = "0.5.1" @@ -5909,6 +5941,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", + "version_check", + "yansi", +] + [[package]] name = "procfs" version = "0.16.0" diff --git a/core/Cargo.toml b/core/Cargo.toml index b904bd7e59a4..5ba079e964f0 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -194,7 +194,7 @@ services-s3 = [ services-seafile = [] services-sftp = ["dep:openssh", "dep:openssh-sftp-client", "dep:bb8"] services-sled = ["dep:sled", "internal-tokio-rt"] -services-sqlite = ["dep:sqlx", "sqlx?/sqlite"] +services-sqlite = ["dep:sqlx", "sqlx?/sqlite", "dep:ouroboros"] services-supabase = [] services-surrealdb = ["dep:surrealdb"] services-swift = [] @@ -277,6 +277,9 @@ sqlx = { version = "0.8.0", features = [ # For http based services. reqsign = { version = "0.16.1", default-features = false, optional = true } +# for self-referencing structs +ouroboros = { version = "0.18.4", optional = true } + # for services-atomic-server atomic_lib = { version = "0.39.0", optional = true } # for services-cacache diff --git a/core/src/raw/adapters/kv/api.rs b/core/src/raw/adapters/kv/api.rs index acf449d58bdc..8f9b8e965837 100644 --- a/core/src/raw/adapters/kv/api.rs +++ b/core/src/raw/adapters/kv/api.rs @@ -17,6 +17,7 @@ use std::fmt::Debug; use std::future::ready; +use std::ops::DerefMut; use futures::Future; @@ -25,10 +26,76 @@ use crate::Capability; use crate::Scheme; use crate::*; +/// Scan is the async iterator returned by `Adapter::scan`. +pub trait Scan: Send + Sync + Unpin { + /// Fetch the next key in the current key prefix + /// + /// `Ok(None)` means no further key will be returned + fn next(&mut self) -> impl Future>> + MaybeSend; +} + +/// A noop implementation of Scan +impl Scan for () { + async fn next(&mut self) -> Result> { + Ok(None) + } +} + +/// A Scan implementation for all trivial non-async iterators +pub struct ScanStdIter(I); + +#[cfg(any( + feature = "services-cloudflare-kv", + feature = "services-etcd", + feature = "services-nebula-graph", + feature = "services-rocksdb", + feature = "services-sled" +))] +impl ScanStdIter +where + I: Iterator> + Unpin + Send + Sync, +{ + /// Create a new ScanStdIter from an Iterator + pub(crate) fn new(inner: I) -> Self { + Self(inner) + } +} + +impl Scan for ScanStdIter +where + I: Iterator> + Unpin + Send + Sync, +{ + async fn next(&mut self) -> Result> { + self.0.next().transpose() + } +} + +/// A type-erased wrapper of Scan +pub type Scanner = Box; + +pub trait ScanDyn: Unpin + Send + Sync { + fn next_dyn(&mut self) -> BoxedFuture>>; +} + +impl ScanDyn for T { + fn next_dyn(&mut self) -> BoxedFuture>> { + Box::pin(self.next()) + } +} + +impl Scan for Box { + async fn next(&mut self) -> Result> { + self.deref_mut().next_dyn().await + } +} + /// KvAdapter is the adapter to underlying kv services. /// /// By implement this trait, any kv service can work as an OpenDAL Service. pub trait Adapter: Send + Sync + Debug + Unpin + 'static { + /// TODO: use default associate type `= ()` after stablized + type Scanner: Scan; + /// Return the metadata of this key value accessor. fn metadata(&self) -> Metadata; @@ -81,7 +148,7 @@ pub trait Adapter: Send + Sync + Debug + Unpin + 'static { } /// Scan a key prefix to get all keys that start with this key. - fn scan(&self, path: &str) -> impl Future>> + MaybeSend { + fn scan(&self, path: &str) -> impl Future> + MaybeSend { let _ = path; ready(Err(Error::new( diff --git a/core/src/raw/adapters/kv/backend.rs b/core/src/raw/adapters/kv/backend.rs index 3a7ea3525d94..6b625c78b6eb 100644 --- a/core/src/raw/adapters/kv/backend.rs +++ b/core/src/raw/adapters/kv/backend.rs @@ -18,7 +18,7 @@ use std::sync::Arc; use std::vec::IntoIter; -use super::Adapter; +use super::{Adapter, Scan}; use crate::raw::oio::HierarchyLister; use crate::raw::oio::QueueBuf; use crate::raw::*; @@ -68,8 +68,8 @@ impl Access for Backend { type BlockingReader = Buffer; type Writer = KvWriter; type BlockingWriter = KvWriter; - type Lister = HierarchyLister; - type BlockingLister = HierarchyLister; + type Lister = HierarchyLister>; + type BlockingLister = HierarchyLister; fn info(&self) -> Arc { let mut am: AccessorInfo = self.kv.metadata().into(); @@ -182,19 +182,60 @@ impl Access for Backend { fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> { let p = build_abs_path(&self.root, path); let res = self.kv.blocking_scan(&p)?; - let lister = KvLister::new(&self.root, res); + let lister = BlockingKvLister::new(&self.root, res); let lister = HierarchyLister::new(lister, path, args.recursive()); Ok((RpList::default(), lister)) } } -pub struct KvLister { +pub struct KvLister { + root: String, + inner: Iter, +} + +impl KvLister +where + Iter: Scan, +{ + fn new(root: &str, inner: Iter) -> Self { + Self { + root: root.to_string(), + inner, + } + } + + async fn inner_next(&mut self) -> Result> { + Ok(self.inner.next().await?.map(|v| { + let mode = if v.ends_with('/') { + EntryMode::DIR + } else { + EntryMode::FILE + }; + let mut path = build_rel_path(&self.root, &v); + if path.is_empty() { + path = "/".to_string(); + } + oio::Entry::new(&path, Metadata::new(mode)) + })) + } +} + +impl oio::List for KvLister +where + Iter: Scan, +{ + async fn next(&mut self) -> Result> { + self.inner_next().await + } +} + +pub struct BlockingKvLister { root: String, inner: IntoIter, } -impl KvLister { +impl BlockingKvLister { fn new(root: &str, inner: Vec) -> Self { Self { root: root.to_string(), @@ -218,13 +259,7 @@ impl KvLister { } } -impl oio::List for KvLister { - async fn next(&mut self) -> Result> { - Ok(self.inner_next()) - } -} - -impl oio::BlockingList for KvLister { +impl oio::BlockingList for BlockingKvLister { fn next(&mut self) -> Result> { Ok(self.inner_next()) } diff --git a/core/src/raw/adapters/kv/mod.rs b/core/src/raw/adapters/kv/mod.rs index facb6efe1c59..c03c8d71b808 100644 --- a/core/src/raw/adapters/kv/mod.rs +++ b/core/src/raw/adapters/kv/mod.rs @@ -22,6 +22,16 @@ mod api; pub use api::Adapter; pub use api::Metadata; +pub use api::Scan; +#[cfg(any( + feature = "services-cloudflare-kv", + feature = "services-etcd", + feature = "services-nebula-graph", + feature = "services-rocksdb", + feature = "services-sled" +))] +pub(crate) use api::ScanStdIter; +pub use api::Scanner; mod backend; pub use backend::Backend; diff --git a/core/src/services/atomicserver/backend.rs b/core/src/services/atomicserver/backend.rs index ac5655bead01..2a8318daa7ad 100644 --- a/core/src/services/atomicserver/backend.rs +++ b/core/src/services/atomicserver/backend.rs @@ -351,6 +351,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Atomicserver, diff --git a/core/src/services/cacache/backend.rs b/core/src/services/cacache/backend.rs index 85914d864fd1..2083f124cf53 100644 --- a/core/src/services/cacache/backend.rs +++ b/core/src/services/cacache/backend.rs @@ -85,6 +85,8 @@ impl Debug for Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Cacache, diff --git a/core/src/services/cloudflare_kv/backend.rs b/core/src/services/cloudflare_kv/backend.rs index 6a15187c3fa1..ce68192f58e4 100644 --- a/core/src/services/cloudflare_kv/backend.rs +++ b/core/src/services/cloudflare_kv/backend.rs @@ -181,6 +181,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = kv::Scanner; + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::CloudflareKv, @@ -240,7 +242,7 @@ impl kv::Adapter for Adapter { } } - async fn scan(&self, path: &str) -> Result> { + async fn scan(&self, path: &str) -> Result { let mut url = format!("{}/keys", self.url_prefix); if !path.is_empty() { url = format!("{}?prefix={}", url, path); @@ -261,7 +263,9 @@ impl kv::Adapter for Adapter { format!("failed to parse error response: {}", e), ) })?; - Ok(response.result.into_iter().map(|r| r.name).collect()) + Ok(Box::new(kv::ScanStdIter::new( + response.result.into_iter().map(|r| Ok(r.name)), + ))) } _ => Err(parse_error(resp)), } diff --git a/core/src/services/d1/backend.rs b/core/src/services/d1/backend.rs index f50fd6747425..b1c992b1a8c6 100644 --- a/core/src/services/d1/backend.rs +++ b/core/src/services/d1/backend.rs @@ -258,6 +258,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::D1, diff --git a/core/src/services/etcd/backend.rs b/core/src/services/etcd/backend.rs index 103e7c7abb6b..d37fb35d2a80 100644 --- a/core/src/services/etcd/backend.rs +++ b/core/src/services/etcd/backend.rs @@ -17,6 +17,7 @@ use std::fmt::Debug; use std::fmt::Formatter; +use std::vec; use bb8::PooledConnection; use bb8::RunError; @@ -271,6 +272,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = kv::ScanStdIter>>; + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Etcd, @@ -310,7 +313,7 @@ impl kv::Adapter for Adapter { Ok(()) } - async fn scan(&self, path: &str) -> Result> { + async fn scan(&self, path: &str) -> Result { let mut client = self.conn().await?; let get_options = Some(GetOptions::new().with_prefix().with_keys_only()); let resp = client @@ -323,10 +326,10 @@ impl kv::Adapter for Adapter { Error::new(ErrorKind::Unexpected, "store key is not valid utf-8 string") .set_source(err) })?; - res.push(v); + res.push(Ok(v)); } - Ok(res) + Ok(kv::ScanStdIter::new(res.into_iter())) } } diff --git a/core/src/services/foundationdb/backend.rs b/core/src/services/foundationdb/backend.rs index 4d4adfa52fd2..d28b70152bcf 100644 --- a/core/src/services/foundationdb/backend.rs +++ b/core/src/services/foundationdb/backend.rs @@ -110,6 +110,8 @@ impl Debug for Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Foundationdb, diff --git a/core/src/services/gridfs/backend.rs b/core/src/services/gridfs/backend.rs index db2bf34456ed..6d7898d1dd99 100644 --- a/core/src/services/gridfs/backend.rs +++ b/core/src/services/gridfs/backend.rs @@ -212,6 +212,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Gridfs, diff --git a/core/src/services/libsql/backend.rs b/core/src/services/libsql/backend.rs index ff7b9551e6a8..c0870e374678 100644 --- a/core/src/services/libsql/backend.rs +++ b/core/src/services/libsql/backend.rs @@ -305,6 +305,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Libsql, diff --git a/core/src/services/memcached/backend.rs b/core/src/services/memcached/backend.rs index c89b81ba704a..d0cc42c9211f 100644 --- a/core/src/services/memcached/backend.rs +++ b/core/src/services/memcached/backend.rs @@ -197,6 +197,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Memcached, diff --git a/core/src/services/mongodb/backend.rs b/core/src/services/mongodb/backend.rs index 24abe6fb03ef..786c34dbe80c 100644 --- a/core/src/services/mongodb/backend.rs +++ b/core/src/services/mongodb/backend.rs @@ -226,6 +226,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Mongodb, diff --git a/core/src/services/mysql/backend.rs b/core/src/services/mysql/backend.rs index 0b1481ef01ce..4569431b7e9f 100644 --- a/core/src/services/mysql/backend.rs +++ b/core/src/services/mysql/backend.rs @@ -188,6 +188,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Mysql, diff --git a/core/src/services/nebula_graph/backend.rs b/core/src/services/nebula_graph/backend.rs index d03dd5bf2b13..9c34018bfdb2 100644 --- a/core/src/services/nebula_graph/backend.rs +++ b/core/src/services/nebula_graph/backend.rs @@ -19,6 +19,7 @@ use std::fmt::Debug; #[cfg(feature = "tests")] use std::time::Duration; +use std::vec; use base64::engine::general_purpose::STANDARD as BASE64; use base64::engine::Engine as _; @@ -269,6 +270,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = kv::ScanStdIter>>; + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::NebulaGraph, @@ -359,7 +362,7 @@ impl kv::Adapter for Adapter { Ok(()) } - async fn scan(&self, path: &str) -> Result> { + async fn scan(&self, path: &str) -> Result { let path = path.replace("'", "\\'").replace('"', "\\\""); let query = format!( "LOOKUP ON {} WHERE {}.{} STARTS WITH '{}' YIELD properties(vertex).{} AS {};", @@ -381,9 +384,9 @@ impl kv::Adapter for Adapter { .map_err(parse_nebulagraph_dataset_error)?; let sub_path = value.as_string().map_err(parse_nebulagraph_dataset_error)?; - res_vec.push(sub_path); + res_vec.push(Ok(sub_path)); } - Ok(res_vec) + Ok(kv::ScanStdIter::new(res_vec.into_iter())) } } diff --git a/core/src/services/persy/backend.rs b/core/src/services/persy/backend.rs index 10b48db08137..e5317b11221d 100644 --- a/core/src/services/persy/backend.rs +++ b/core/src/services/persy/backend.rs @@ -152,6 +152,8 @@ impl Debug for Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Persy, diff --git a/core/src/services/postgresql/backend.rs b/core/src/services/postgresql/backend.rs index 8b4ea56eb223..b7cbacc997ad 100644 --- a/core/src/services/postgresql/backend.rs +++ b/core/src/services/postgresql/backend.rs @@ -187,6 +187,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Postgresql, diff --git a/core/src/services/redb/backend.rs b/core/src/services/redb/backend.rs index d6dc290e758e..281a5ac96a43 100644 --- a/core/src/services/redb/backend.rs +++ b/core/src/services/redb/backend.rs @@ -111,6 +111,8 @@ impl Debug for Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Redb, diff --git a/core/src/services/redis/backend.rs b/core/src/services/redis/backend.rs index bf8cff201856..e04f5af29daf 100644 --- a/core/src/services/redis/backend.rs +++ b/core/src/services/redis/backend.rs @@ -327,6 +327,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Redis, diff --git a/core/src/services/rocksdb/backend.rs b/core/src/services/rocksdb/backend.rs index 5ed0f38ec6bc..ecbf9bdfcf09 100644 --- a/core/src/services/rocksdb/backend.rs +++ b/core/src/services/rocksdb/backend.rs @@ -108,6 +108,8 @@ impl Debug for Adapter { } impl kv::Adapter for Adapter { + type Scanner = kv::Scanner; + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Rocksdb, @@ -164,13 +166,15 @@ impl kv::Adapter for Adapter { self.db.delete(path).map_err(parse_rocksdb_error) } - async fn scan(&self, path: &str) -> Result> { + async fn scan(&self, path: &str) -> Result { let cloned_self = self.clone(); let cloned_path = path.to_string(); - task::spawn_blocking(move || cloned_self.blocking_scan(cloned_path.as_str())) + let res = task::spawn_blocking(move || cloned_self.blocking_scan(cloned_path.as_str())) .await - .map_err(new_task_join_error)? + .map_err(new_task_join_error)??; + + Ok(Box::new(kv::ScanStdIter::new(res.into_iter().map(Ok)))) } /// TODO: we only need key here. diff --git a/core/src/services/sled/backend.rs b/core/src/services/sled/backend.rs index d1d1e7f18453..c4cb4bdf854b 100644 --- a/core/src/services/sled/backend.rs +++ b/core/src/services/sled/backend.rs @@ -137,6 +137,8 @@ impl Debug for Adapter { } impl kv::Adapter for Adapter { + type Scanner = kv::Scanner; + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Sled, @@ -199,13 +201,15 @@ impl kv::Adapter for Adapter { Ok(()) } - async fn scan(&self, path: &str) -> Result> { + async fn scan(&self, path: &str) -> Result { let cloned_self = self.clone(); let cloned_path = path.to_string(); - task::spawn_blocking(move || cloned_self.blocking_scan(cloned_path.as_str())) + let res = task::spawn_blocking(move || cloned_self.blocking_scan(cloned_path.as_str())) .await - .map_err(new_task_join_error)? + .map_err(new_task_join_error)??; + + Ok(Box::new(kv::ScanStdIter::new(res.into_iter().map(Ok)))) } fn blocking_scan(&self, path: &str) -> Result> { diff --git a/core/src/services/sqlite/backend.rs b/core/src/services/sqlite/backend.rs index 0b5c556f8cb3..06158048341a 100644 --- a/core/src/services/sqlite/backend.rs +++ b/core/src/services/sqlite/backend.rs @@ -17,8 +17,15 @@ use std::fmt::Debug; use std::fmt::Formatter; +use std::pin::Pin; use std::str::FromStr; +use std::task::Context; +use std::task::Poll; +use futures::stream::BoxStream; +use futures::Stream; +use futures::StreamExt; +use ouroboros::self_referencing; use sqlx::sqlite::SqliteConnectOptions; use sqlx::SqlitePool; use tokio::sync::OnceCell; @@ -188,7 +195,35 @@ impl Adapter { } } +#[self_referencing] +pub struct SqliteScanner { + pool: SqlitePool, + query: String, + + #[borrows(pool, query)] + #[covariant] + stream: BoxStream<'this, Result>, +} + +impl Stream for SqliteScanner { + type Item = Result; + + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.with_stream_mut(|s| s.poll_next_unpin(cx)) + } +} + +unsafe impl Sync for SqliteScanner {} + +impl kv::Scan for SqliteScanner { + async fn next(&mut self) -> Result> { + ::next(self).await.transpose() + } +} + impl kv::Adapter for Adapter { + type Scanner = SqliteScanner; + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Sqlite, @@ -249,19 +284,25 @@ impl kv::Adapter for Adapter { Ok(()) } - async fn scan(&self, path: &str) -> Result> { + async fn scan(&self, path: &str) -> Result { let pool = self.get_client().await?; + let stream = SqliteScannerBuilder { + pool: pool.clone(), + query: format!( + "SELECT `{}` FROM `{}` WHERE `{}` LIKE $1", + self.key_field, self.table, self.key_field + ), + stream_builder: |pool, query| { + sqlx::query_scalar(query) + .bind(format!("{path}%")) + .fetch(pool) + .map(|v| v.map_err(parse_sqlite_error)) + .boxed() + }, + } + .build(); - let value = sqlx::query_scalar(&format!( - "SELECT `{}` FROM `{}` WHERE `{}` LIKE $1", - self.key_field, self.table, self.key_field - )) - .bind(format!("{path}%")) - .fetch_all(pool) - .await - .map_err(parse_sqlite_error)?; - - Ok(value) + Ok(stream) } } diff --git a/core/src/services/surrealdb/backend.rs b/core/src/services/surrealdb/backend.rs index a7c098a0ad8e..47b91e36057f 100644 --- a/core/src/services/surrealdb/backend.rs +++ b/core/src/services/surrealdb/backend.rs @@ -283,6 +283,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Surrealdb, diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs index 6f23f156ee70..275dcf9bbdc4 100644 --- a/core/src/services/tikv/backend.rs +++ b/core/src/services/tikv/backend.rs @@ -185,6 +185,8 @@ impl Adapter { } impl kv::Adapter for Adapter { + type Scanner = (); + fn metadata(&self) -> kv::Metadata { kv::Metadata::new( Scheme::Tikv, From 259a19e66b532a2905bba955749db6b36bf634e9 Mon Sep 17 00:00:00 2001 From: Qinxuan Chen Date: Tue, 5 Nov 2024 10:05:19 +0800 Subject: [PATCH 12/12] chore(core/layers): align `info` method of `trait Access` and `trait LayeredAccess` (#5258) --- core/src/layers/blocking.rs | 2 +- core/src/layers/complete.rs | 54 +++++++++++++-------------- core/src/layers/error_context.rs | 60 +++++++++++++++--------------- core/src/layers/fastrace.rs | 2 +- core/src/layers/immutable_index.rs | 2 +- core/src/layers/logging.rs | 2 +- core/src/layers/oteltrace.rs | 2 +- core/src/layers/tracing.rs | 2 +- core/src/raw/layer.rs | 45 +++++++++++----------- 9 files changed, 85 insertions(+), 86 deletions(-) diff --git a/core/src/layers/blocking.rs b/core/src/layers/blocking.rs index 8deb767e6c1f..a68538ec6dec 100644 --- a/core/src/layers/blocking.rs +++ b/core/src/layers/blocking.rs @@ -173,7 +173,7 @@ impl LayeredAccess for BlockingAccessor { &self.inner } - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { let mut meta = self.inner.info().as_ref().clone(); meta.full_capability_mut().blocking = true; meta.into() diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs index 17c0c6414a01..ad26e5b7bcc4 100644 --- a/core/src/layers/complete.rs +++ b/core/src/layers/complete.rs @@ -110,7 +110,7 @@ impl Layer for CompleteLayer { fn layer(&self, inner: A) -> Self::LayeredAccess { CompleteAccessor { - meta: inner.info(), + info: inner.info(), inner: Arc::new(inner), } } @@ -118,7 +118,7 @@ impl Layer for CompleteLayer { /// Provide complete wrapper for backend. pub struct CompleteAccessor { - meta: Arc, + info: Arc, inner: Arc, } @@ -130,7 +130,7 @@ impl Debug for CompleteAccessor { impl CompleteAccessor { fn new_unsupported_error(&self, op: impl Into<&'static str>) -> Error { - let scheme = self.meta.scheme(); + let scheme = self.info.scheme(); let op = op.into(); Error::new( ErrorKind::Unsupported, @@ -140,7 +140,7 @@ impl CompleteAccessor { } async fn complete_create_dir(&self, path: &str, args: OpCreateDir) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if capability.create_dir { return self.inner().create_dir(path, args).await; } @@ -154,7 +154,7 @@ impl CompleteAccessor { } fn complete_blocking_create_dir(&self, path: &str, args: OpCreateDir) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if capability.create_dir && capability.blocking { return self.inner().blocking_create_dir(path, args); } @@ -168,7 +168,7 @@ impl CompleteAccessor { } async fn complete_stat(&self, path: &str, args: OpStat) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.stat { return Err(self.new_unsupported_error(Operation::Stat)); } @@ -218,7 +218,7 @@ impl CompleteAccessor { } fn complete_blocking_stat(&self, path: &str, args: OpStat) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.stat { return Err(self.new_unsupported_error(Operation::Stat)); } @@ -271,7 +271,7 @@ impl CompleteAccessor { path: &str, args: OpList, ) -> Result<(RpList, CompleteLister)> { - let cap = self.meta.full_capability(); + let cap = self.info.full_capability(); if !cap.list { return Err(self.new_unsupported_error(Operation::List)); } @@ -319,7 +319,7 @@ impl CompleteAccessor { path: &str, args: OpList, ) -> Result<(RpList, CompleteLister)> { - let cap = self.meta.full_capability(); + let cap = self.info.full_capability(); if !cap.list { return Err(self.new_unsupported_error(Operation::BlockingList)); } @@ -377,8 +377,8 @@ impl LayeredAccess for CompleteAccessor { } // Todo: May move the logic to the implement of Layer::layer of CompleteAccessor - fn metadata(&self) -> Arc { - let mut meta = (*self.meta).clone(); + fn info(&self) -> Arc { + let mut meta = (*self.info).clone(); let cap = meta.full_capability_mut(); if cap.list && cap.write_can_empty { cap.create_dir = true; @@ -391,7 +391,7 @@ impl LayeredAccess for CompleteAccessor { } async fn read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::Reader)> { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.read { return Err(self.new_unsupported_error(Operation::Read)); } @@ -404,7 +404,7 @@ impl LayeredAccess for CompleteAccessor { } async fn write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::Writer)> { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.write { return Err(self.new_unsupported_error(Operation::Write)); } @@ -413,7 +413,7 @@ impl LayeredAccess for CompleteAccessor { ErrorKind::Unsupported, format!( "service {} doesn't support operation write with append", - self.info().scheme() + self.info.scheme() ), )); } @@ -424,7 +424,7 @@ impl LayeredAccess for CompleteAccessor { } async fn copy(&self, from: &str, to: &str, args: OpCopy) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.copy { return Err(self.new_unsupported_error(Operation::Copy)); } @@ -433,7 +433,7 @@ impl LayeredAccess for CompleteAccessor { } async fn rename(&self, from: &str, to: &str, args: OpRename) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.rename { return Err(self.new_unsupported_error(Operation::Rename)); } @@ -446,7 +446,7 @@ impl LayeredAccess for CompleteAccessor { } async fn delete(&self, path: &str, args: OpDelete) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.delete { return Err(self.new_unsupported_error(Operation::Delete)); } @@ -455,7 +455,7 @@ impl LayeredAccess for CompleteAccessor { } async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.list { return Err(self.new_unsupported_error(Operation::List)); } @@ -464,7 +464,7 @@ impl LayeredAccess for CompleteAccessor { } async fn batch(&self, args: OpBatch) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.batch { return Err(self.new_unsupported_error(Operation::Batch)); } @@ -473,7 +473,7 @@ impl LayeredAccess for CompleteAccessor { } async fn presign(&self, path: &str, args: OpPresign) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.presign { return Err(self.new_unsupported_error(Operation::Presign)); } @@ -486,7 +486,7 @@ impl LayeredAccess for CompleteAccessor { } fn blocking_read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::BlockingReader)> { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.read || !capability.blocking { return Err(self.new_unsupported_error(Operation::Read)); } @@ -498,7 +498,7 @@ impl LayeredAccess for CompleteAccessor { } fn blocking_write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::BlockingWriter)> { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.write || !capability.blocking { return Err(self.new_unsupported_error(Operation::BlockingWrite)); } @@ -508,7 +508,7 @@ impl LayeredAccess for CompleteAccessor { ErrorKind::Unsupported, format!( "service {} doesn't support operation write with append", - self.info().scheme() + self.info.scheme() ), )); } @@ -519,7 +519,7 @@ impl LayeredAccess for CompleteAccessor { } fn blocking_copy(&self, from: &str, to: &str, args: OpCopy) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.copy || !capability.blocking { return Err(self.new_unsupported_error(Operation::BlockingCopy)); } @@ -528,7 +528,7 @@ impl LayeredAccess for CompleteAccessor { } fn blocking_rename(&self, from: &str, to: &str, args: OpRename) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.rename || !capability.blocking { return Err(self.new_unsupported_error(Operation::BlockingRename)); } @@ -541,7 +541,7 @@ impl LayeredAccess for CompleteAccessor { } fn blocking_delete(&self, path: &str, args: OpDelete) -> Result { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.delete || !capability.blocking { return Err(self.new_unsupported_error(Operation::BlockingDelete)); } @@ -550,7 +550,7 @@ impl LayeredAccess for CompleteAccessor { } fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> { - let capability = self.meta.full_capability(); + let capability = self.info.full_capability(); if !capability.list || !capability.blocking { return Err(self.new_unsupported_error(Operation::BlockingList)); } diff --git a/core/src/layers/error_context.rs b/core/src/layers/error_context.rs index 95ec210a262b..a160a63772ec 100644 --- a/core/src/layers/error_context.rs +++ b/core/src/layers/error_context.rs @@ -45,14 +45,14 @@ impl Layer for ErrorContextLayer { type LayeredAccess = ErrorContextAccessor; fn layer(&self, inner: A) -> Self::LayeredAccess { - let meta = inner.info(); - ErrorContextAccessor { meta, inner } + let info = inner.info(); + ErrorContextAccessor { info, inner } } } /// Provide error context wrapper for backend. pub struct ErrorContextAccessor { - meta: Arc, + info: Arc, inner: A, } @@ -75,14 +75,14 @@ impl LayeredAccess for ErrorContextAccessor { &self.inner } - fn metadata(&self) -> Arc { - self.meta.clone() + fn info(&self) -> Arc { + self.info.clone() } async fn create_dir(&self, path: &str, args: OpCreateDir) -> Result { self.inner.create_dir(path, args).await.map_err(|err| { err.with_operation(Operation::CreateDir) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -95,13 +95,13 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(rp, r)| { ( rp, - ErrorContextWrapper::new(self.meta.scheme(), path.to_string(), r) + ErrorContextWrapper::new(self.info.scheme(), path.to_string(), r) .with_range(range), ) }) .map_err(|err| { err.with_operation(Operation::Read) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) .with_context("range", range.to_string()) }) @@ -114,12 +114,12 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(rp, w)| { ( rp, - ErrorContextWrapper::new(self.meta.scheme(), path.to_string(), w), + ErrorContextWrapper::new(self.info.scheme(), path.to_string(), w), ) }) .map_err(|err| { err.with_operation(Operation::Write) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -127,7 +127,7 @@ impl LayeredAccess for ErrorContextAccessor { async fn copy(&self, from: &str, to: &str, args: OpCopy) -> Result { self.inner.copy(from, to, args).await.map_err(|err| { err.with_operation(Operation::Copy) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("from", from) .with_context("to", to) }) @@ -136,7 +136,7 @@ impl LayeredAccess for ErrorContextAccessor { async fn rename(&self, from: &str, to: &str, args: OpRename) -> Result { self.inner.rename(from, to, args).await.map_err(|err| { err.with_operation(Operation::Rename) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("from", from) .with_context("to", to) }) @@ -145,7 +145,7 @@ impl LayeredAccess for ErrorContextAccessor { async fn stat(&self, path: &str, args: OpStat) -> Result { self.inner.stat(path, args).await.map_err(|err| { err.with_operation(Operation::Stat) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -153,7 +153,7 @@ impl LayeredAccess for ErrorContextAccessor { async fn delete(&self, path: &str, args: OpDelete) -> Result { self.inner.delete(path, args).await.map_err(|err| { err.with_operation(Operation::Delete) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -165,12 +165,12 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(rp, p)| { ( rp, - ErrorContextWrapper::new(self.meta.scheme(), path.to_string(), p), + ErrorContextWrapper::new(self.info.scheme(), path.to_string(), p), ) }) .map_err(|err| { err.with_operation(Operation::List) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -186,7 +186,7 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(path, res)| { let res = res.map_err(|err| { err.with_operation(Operation::Delete) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", &path) }); (path, res) @@ -197,14 +197,14 @@ impl LayeredAccess for ErrorContextAccessor { }) .map_err(|err| { err.with_operation(Operation::Batch) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) }) } async fn presign(&self, path: &str, args: OpPresign) -> Result { self.inner.presign(path, args).await.map_err(|err| { err.with_operation(Operation::Presign) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -212,7 +212,7 @@ impl LayeredAccess for ErrorContextAccessor { fn blocking_create_dir(&self, path: &str, args: OpCreateDir) -> Result { self.inner.blocking_create_dir(path, args).map_err(|err| { err.with_operation(Operation::BlockingCreateDir) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -224,13 +224,13 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(rp, os)| { ( rp, - ErrorContextWrapper::new(self.meta.scheme(), path.to_string(), os) + ErrorContextWrapper::new(self.info.scheme(), path.to_string(), os) .with_range(range), ) }) .map_err(|err| { err.with_operation(Operation::BlockingRead) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) .with_context("range", range.to_string()) }) @@ -242,12 +242,12 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(rp, os)| { ( rp, - ErrorContextWrapper::new(self.meta.scheme(), path.to_string(), os), + ErrorContextWrapper::new(self.info.scheme(), path.to_string(), os), ) }) .map_err(|err| { err.with_operation(Operation::BlockingWrite) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -255,7 +255,7 @@ impl LayeredAccess for ErrorContextAccessor { fn blocking_copy(&self, from: &str, to: &str, args: OpCopy) -> Result { self.inner.blocking_copy(from, to, args).map_err(|err| { err.with_operation(Operation::BlockingCopy) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("from", from) .with_context("to", to) }) @@ -264,7 +264,7 @@ impl LayeredAccess for ErrorContextAccessor { fn blocking_rename(&self, from: &str, to: &str, args: OpRename) -> Result { self.inner.blocking_rename(from, to, args).map_err(|err| { err.with_operation(Operation::BlockingRename) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("from", from) .with_context("to", to) }) @@ -273,7 +273,7 @@ impl LayeredAccess for ErrorContextAccessor { fn blocking_stat(&self, path: &str, args: OpStat) -> Result { self.inner.blocking_stat(path, args).map_err(|err| { err.with_operation(Operation::BlockingStat) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -281,7 +281,7 @@ impl LayeredAccess for ErrorContextAccessor { fn blocking_delete(&self, path: &str, args: OpDelete) -> Result { self.inner.blocking_delete(path, args).map_err(|err| { err.with_operation(Operation::BlockingDelete) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } @@ -292,12 +292,12 @@ impl LayeredAccess for ErrorContextAccessor { .map(|(rp, os)| { ( rp, - ErrorContextWrapper::new(self.meta.scheme(), path.to_string(), os), + ErrorContextWrapper::new(self.info.scheme(), path.to_string(), os), ) }) .map_err(|err| { err.with_operation(Operation::BlockingList) - .with_context("service", self.meta.scheme()) + .with_context("service", self.info.scheme()) .with_context("path", path) }) } diff --git a/core/src/layers/fastrace.rs b/core/src/layers/fastrace.rs index ad49145c6cf3..51153d616cc7 100644 --- a/core/src/layers/fastrace.rs +++ b/core/src/layers/fastrace.rs @@ -132,7 +132,7 @@ impl LayeredAccess for FastraceAccessor { } #[trace] - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { self.inner.info() } diff --git a/core/src/layers/immutable_index.rs b/core/src/layers/immutable_index.rs index 5e02472fab6a..4a54adb81658 100644 --- a/core/src/layers/immutable_index.rs +++ b/core/src/layers/immutable_index.rs @@ -149,7 +149,7 @@ impl LayeredAccess for ImmutableIndexAccessor { } /// Add list capabilities for underlying storage services. - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { let mut meta = (*self.inner.info()).clone(); let cap = meta.full_capability_mut(); diff --git a/core/src/layers/logging.rs b/core/src/layers/logging.rs index 075ffdd33838..ec929e50d63b 100644 --- a/core/src/layers/logging.rs +++ b/core/src/layers/logging.rs @@ -266,7 +266,7 @@ impl LayeredAccess for LoggingAccessor { &self.inner } - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { self.logger .log(&self.info, Operation::Info, &[], "started", None); diff --git a/core/src/layers/oteltrace.rs b/core/src/layers/oteltrace.rs index 55a4d12f47d0..ca350a72722d 100644 --- a/core/src/layers/oteltrace.rs +++ b/core/src/layers/oteltrace.rs @@ -77,7 +77,7 @@ impl LayeredAccess for OtelTraceAccessor { &self.inner } - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { let tracer = global::tracer("opendal"); tracer.in_span("metadata", |_cx| self.inner.info()) } diff --git a/core/src/layers/tracing.rs b/core/src/layers/tracing.rs index ba824215134b..c59f8d5fc204 100644 --- a/core/src/layers/tracing.rs +++ b/core/src/layers/tracing.rs @@ -165,7 +165,7 @@ impl LayeredAccess for TracingAccessor { } #[tracing::instrument(level = "debug")] - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { self.inner.info() } diff --git a/core/src/raw/layer.rs b/core/src/raw/layer.rs index f9872c6cf03e..6e6d2b802b45 100644 --- a/core/src/raw/layer.rs +++ b/core/src/raw/layer.rs @@ -128,7 +128,6 @@ pub trait Layer { /// LayeredAccess is layered accessor that forward all not implemented /// method to inner. #[allow(missing_docs)] - pub trait LayeredAccess: Send + Sync + Debug + Unpin + 'static { type Inner: Access; type Reader: oio::Read; @@ -140,7 +139,7 @@ pub trait LayeredAccess: Send + Sync + Debug + Unpin + 'static { fn inner(&self) -> &Self::Inner; - fn metadata(&self) -> Arc { + fn info(&self) -> Arc { self.inner().info() } @@ -241,86 +240,86 @@ pub trait LayeredAccess: Send + Sync + Debug + Unpin + 'static { impl Access for L { type Reader = L::Reader; - type BlockingReader = L::BlockingReader; type Writer = L::Writer; - type BlockingWriter = L::BlockingWriter; type Lister = L::Lister; + type BlockingReader = L::BlockingReader; + type BlockingWriter = L::BlockingWriter; type BlockingLister = L::BlockingLister; fn info(&self) -> Arc { - (self as &L).metadata() + LayeredAccess::info(self) } async fn create_dir(&self, path: &str, args: OpCreateDir) -> Result { - (self as &L).create_dir(path, args).await + LayeredAccess::create_dir(self, path, args).await } async fn read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::Reader)> { - (self as &L).read(path, args).await + LayeredAccess::read(self, path, args).await } async fn write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::Writer)> { - (self as &L).write(path, args).await + LayeredAccess::write(self, path, args).await } async fn copy(&self, from: &str, to: &str, args: OpCopy) -> Result { - (self as &L).copy(from, to, args).await + LayeredAccess::copy(self, from, to, args).await } async fn rename(&self, from: &str, to: &str, args: OpRename) -> Result { - (self as &L).rename(from, to, args).await + LayeredAccess::rename(self, from, to, args).await } async fn stat(&self, path: &str, args: OpStat) -> Result { - (self as &L).stat(path, args).await + LayeredAccess::stat(self, path, args).await } async fn delete(&self, path: &str, args: OpDelete) -> Result { - (self as &L).delete(path, args).await + LayeredAccess::delete(self, path, args).await } async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> { - (self as &L).list(path, args).await + LayeredAccess::list(self, path, args).await } async fn batch(&self, args: OpBatch) -> Result { - (self as &L).batch(args).await + LayeredAccess::batch(self, args).await } async fn presign(&self, path: &str, args: OpPresign) -> Result { - (self as &L).presign(path, args).await + LayeredAccess::presign(self, path, args).await } fn blocking_create_dir(&self, path: &str, args: OpCreateDir) -> Result { - (self as &L).blocking_create_dir(path, args) + LayeredAccess::blocking_create_dir(self, path, args) } fn blocking_read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::BlockingReader)> { - (self as &L).blocking_read(path, args) + LayeredAccess::blocking_read(self, path, args) } fn blocking_write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::BlockingWriter)> { - (self as &L).blocking_write(path, args) + LayeredAccess::blocking_write(self, path, args) } fn blocking_copy(&self, from: &str, to: &str, args: OpCopy) -> Result { - (self as &L).blocking_copy(from, to, args) + LayeredAccess::blocking_copy(self, from, to, args) } fn blocking_rename(&self, from: &str, to: &str, args: OpRename) -> Result { - (self as &L).blocking_rename(from, to, args) + LayeredAccess::blocking_rename(self, from, to, args) } fn blocking_stat(&self, path: &str, args: OpStat) -> Result { - (self as &L).blocking_stat(path, args) + LayeredAccess::blocking_stat(self, path, args) } fn blocking_delete(&self, path: &str, args: OpDelete) -> Result { - (self as &L).blocking_delete(path, args) + LayeredAccess::blocking_delete(self, path, args) } fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> { - (self as &L).blocking_list(path, args) + LayeredAccess::blocking_list(self, path, args) } }