This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git
The following commit(s) were added to refs/heads/main by this push:
new ec2790d1a refactor: use web-time types on wasm32 target (#6852)
ec2790d1a is described below
commit ec2790d1a259aa10b6f1c1ea1e0e346fd1ff3a3f
Author: tison <[email protected]>
AuthorDate: Mon Dec 1 22:24:58 2025 +0800
refactor: use web-time types on wasm32 target (#6852)
* refactor: use web-time types on wasm32 target
Signed-off-by: tison <[email protected]>
* fixup incomp systemtime and jiff
Signed-off-by: tison <[email protected]>
* bridge conversion
Signed-off-by: tison <[email protected]>
* fix compile
Signed-off-by: tison <[email protected]>
---------
Signed-off-by: tison <[email protected]>
---
.github/workflows/ci_core.yml | 1 +
core/Cargo.lock | 1 +
core/Cargo.toml | 1 +
core/src/layers/fastmetrics.rs | 1 -
core/src/layers/observe/metrics.rs | 2 --
core/src/layers/otelmetrics.rs | 2 --
core/src/layers/prometheus.rs | 2 --
core/src/layers/prometheus_client.rs | 1 -
core/src/layers/retry.rs | 1 -
core/src/layers/tail_cut.rs | 10 ++----
core/src/layers/timeout.rs | 4 +--
core/src/raw/futures_util.rs | 5 ++-
core/src/raw/oio/write/block_write.rs | 1 -
core/src/raw/oio/write/multipart_write.rs | 2 --
core/src/raw/oio/write/position_write.rs | 1 -
core/src/raw/ops.rs | 2 +-
core/src/raw/time.rs | 42 ++++++++++++++++++----
core/src/services/azblob/core.rs | 1 -
core/src/services/b2/core.rs | 1 -
core/src/services/cloudflare_kv/backend.rs | 1 -
core/src/services/cloudflare_kv/config.rs | 2 +-
core/src/services/cloudflare_kv/core.rs | 7 +---
core/src/services/cos/core.rs | 1 -
core/src/services/dashmap/writer.rs | 5 ++-
core/src/services/dropbox/core.rs | 1 -
core/src/services/etcd/core.rs | 7 ++--
core/src/services/ftp/core.rs | 4 +--
core/src/services/gcs/core.rs | 1 -
core/src/services/gdrive/core.rs | 1 -
core/src/services/memcached/backend.rs | 1 -
core/src/services/memcached/config.rs | 2 +-
core/src/services/memcached/core.rs | 1 -
core/src/services/mini_moka/backend.rs | 1 -
core/src/services/moka/backend.rs | 3 --
core/src/services/monoiofs/core.rs | 3 +-
core/src/services/obs/core.rs | 1 -
core/src/services/onedrive/core.rs | 1 -
core/src/services/oss/core.rs | 1 -
core/src/services/redis/backend.rs | 1 -
core/src/services/redis/config.rs | 2 +-
core/src/services/redis/core.rs | 5 +--
core/src/services/s3/core.rs | 1 -
core/src/services/sftp/core.rs | 1 -
core/src/types/execute/executors/tokio_executor.rs | 3 +-
core/src/types/operator/operator.rs | 1 -
core/src/types/operator/operator_futures.rs | 1 -
46 files changed, 61 insertions(+), 79 deletions(-)
diff --git a/.github/workflows/ci_core.yml b/.github/workflows/ci_core.yml
index 4d06c999a..9d13d7867 100644
--- a/.github/workflows/ci_core.yml
+++ b/.github/workflows/ci_core.yml
@@ -235,6 +235,7 @@ jobs:
services-gdrive
services-opfs
services-s3
+ layers-metrics
)
rustup target add wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknown --no-default-features
--features="${FEATURES[*]}" --locked
diff --git a/core/Cargo.lock b/core/Cargo.lock
index d07ed620c..ec9f24284 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -5432,6 +5432,7 @@ dependencies = [
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
+ "web-time",
]
[[package]]
diff --git a/core/Cargo.toml b/core/Cargo.toml
index a05c7a597..188b63fdf 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -418,6 +418,7 @@ getrandom = { version = "0.2", features = ["js"] }
jiff = { version = "0.2.15", features = ["serde", "js"] }
tokio = { version = "1.48", features = ["time"] }
uuid = { version = "1.18", features = ["serde", "v4", "js"] }
+web-time = { version = "1.1.0" }
[dev-dependencies]
criterion = { version = "0.7", features = ["async", "async_tokio"] }
diff --git a/core/src/layers/fastmetrics.rs b/core/src/layers/fastmetrics.rs
index 9b314a97b..5a9d7dfdb 100644
--- a/core/src/layers/fastmetrics.rs
+++ b/core/src/layers/fastmetrics.rs
@@ -16,7 +16,6 @@
// under the License.
use std::fmt;
-use std::time::Duration;
use fastmetrics::encoder::EncodeLabelSet;
use fastmetrics::encoder::LabelSetEncoder;
diff --git a/core/src/layers/observe/metrics.rs
b/core/src/layers/observe/metrics.rs
index 7441d82f9..82f390453 100644
--- a/core/src/layers/observe/metrics.rs
+++ b/core/src/layers/observe/metrics.rs
@@ -22,8 +22,6 @@ use std::sync::Arc;
use std::task::Context;
use std::task::Poll;
use std::task::ready;
-use std::time::Duration;
-use std::time::Instant;
use futures::Stream;
use futures::StreamExt;
diff --git a/core/src/layers/otelmetrics.rs b/core/src/layers/otelmetrics.rs
index c5fac5c0d..0031b8ff1 100644
--- a/core/src/layers/otelmetrics.rs
+++ b/core/src/layers/otelmetrics.rs
@@ -15,8 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-use std::time::Duration;
-
use opentelemetry::KeyValue;
use opentelemetry::metrics::Counter;
use opentelemetry::metrics::Histogram;
diff --git a/core/src/layers/prometheus.rs b/core/src/layers/prometheus.rs
index 175ed330a..ae86d1410 100644
--- a/core/src/layers/prometheus.rs
+++ b/core/src/layers/prometheus.rs
@@ -15,8 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-use std::time::Duration;
-
use prometheus::HistogramVec;
use prometheus::Registry;
use prometheus::core::AtomicI64;
diff --git a/core/src/layers/prometheus_client.rs
b/core/src/layers/prometheus_client.rs
index 846546f39..46eaa6dd4 100644
--- a/core/src/layers/prometheus_client.rs
+++ b/core/src/layers/prometheus_client.rs
@@ -16,7 +16,6 @@
// under the License.
use std::fmt;
-use std::time::Duration;
use prometheus_client::encoding::EncodeLabel;
use prometheus_client::encoding::EncodeLabelSet;
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index 5ee852d15..85e65684b 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -18,7 +18,6 @@
use std::fmt::Debug;
use std::fmt::Formatter;
use std::sync::Arc;
-use std::time::Duration;
use backon::ExponentialBuilder;
use backon::Retryable;
diff --git a/core/src/layers/tail_cut.rs b/core/src/layers/tail_cut.rs
index ab89e5083..516c7134c 100644
--- a/core/src/layers/tail_cut.rs
+++ b/core/src/layers/tail_cut.rs
@@ -19,8 +19,6 @@ use std::fmt::Debug;
use std::fmt::Formatter;
use std::sync::Arc;
use std::sync::atomic::{AtomicU64, AtomicUsize, Ordering};
-use std::time::Duration;
-use std::time::Instant;
use crate::raw::*;
use crate::*;
@@ -328,7 +326,7 @@ impl<A: Access> TailCutAccessor<A> {
async fn with_deadline<F, T>(&self, op: Operation, size: Option<u64>, fut:
F) -> Result<T>
where
- F: std::future::Future<Output = Result<T>>,
+ F: Future<Output = Result<T>>,
{
let start = Instant::now();
@@ -814,10 +812,8 @@ impl WindowedHistogram {
}
fn now_ms() -> u64 {
- std::time::SystemTime::now()
- .duration_since(std::time::UNIX_EPOCH)
- .unwrap()
- .as_millis() as u64
+ // SAFETY: Unless System clock goes backwards before UNIX_EPOCH, this
should never fail.
+ u64::try_from(Timestamp::now().into_inner().as_millisecond()).unwrap()
}
}
diff --git a/core/src/layers/timeout.rs b/core/src/layers/timeout.rs
index b74bd3f42..9750ac007 100644
--- a/core/src/layers/timeout.rs
+++ b/core/src/layers/timeout.rs
@@ -17,7 +17,6 @@
use std::future::Future;
use std::sync::Arc;
-use std::time::Duration;
use crate::raw::*;
use crate::*;
@@ -105,7 +104,7 @@ use crate::*;
///
/// This might introduce a bit overhead for IO operations, but it's the only
way to implement
/// timeout correctly. We used to implement timeout layer in zero cost way
that only stores
-/// a [`std::time::Instant`] and check the timeout by comparing the instant
with current time.
+/// a [`Instant`] and check the timeout by comparing the instant with current
time.
/// However, it doesn't work for all cases.
///
/// For examples, users TCP connection could be in [Busy
ESTAB](https://blog.cloudflare.com/when-tcp-sockets-refuse-to-die) state. In
this state, no IO event will be emitted. The runtime
@@ -356,7 +355,6 @@ mod tests {
use std::future::Future;
use std::future::pending;
use std::sync::Arc;
- use std::time::Duration;
use futures::StreamExt;
use tokio::time::sleep;
diff --git a/core/src/raw/futures_util.rs b/core/src/raw/futures_util.rs
index c34499355..17134f1e6 100644
--- a/core/src/raw/futures_util.rs
+++ b/core/src/raw/futures_util.rs
@@ -115,7 +115,7 @@ pub struct ConcurrentTasks<I, O> {
executor: Executor,
/// The factory to create the task.
///
- /// Caller of ConcurrentTasks must provides a factory to create the task
for executing.
+ /// Caller of ConcurrentTasks must provide a factory to create the task
for executing.
///
/// The factory must accept an input and return a future that resolves to
a tuple of input and
/// output result. If the given result is error, the error will be
returned to users and the
@@ -318,13 +318,12 @@ impl<I: Send + 'static, O: Send + 'static>
ConcurrentTasks<I, O> {
#[cfg(test)]
mod tests {
- use std::time::Duration;
-
use pretty_assertions::assert_eq;
use rand::Rng;
use tokio::time::sleep;
use super::*;
+ use crate::raw::Duration;
#[tokio::test]
async fn test_concurrent_tasks() {
diff --git a/core/src/raw/oio/write/block_write.rs
b/core/src/raw/oio/write/block_write.rs
index 91d0ee80d..793da2be7 100644
--- a/core/src/raw/oio/write/block_write.rs
+++ b/core/src/raw/oio/write/block_write.rs
@@ -245,7 +245,6 @@ where
mod tests {
use std::collections::HashMap;
use std::sync::Mutex;
- use std::time::Duration;
use pretty_assertions::assert_eq;
use rand::Rng;
diff --git a/core/src/raw/oio/write/multipart_write.rs
b/core/src/raw/oio/write/multipart_write.rs
index 403774826..e8b174b18 100644
--- a/core/src/raw/oio/write/multipart_write.rs
+++ b/core/src/raw/oio/write/multipart_write.rs
@@ -307,8 +307,6 @@ where
#[cfg(test)]
mod tests {
- use std::time::Duration;
-
use mea::mutex::Mutex;
use pretty_assertions::assert_eq;
use rand::Rng;
diff --git a/core/src/raw/oio/write/position_write.rs
b/core/src/raw/oio/write/position_write.rs
index 37c8ad686..c6333dbde 100644
--- a/core/src/raw/oio/write/position_write.rs
+++ b/core/src/raw/oio/write/position_write.rs
@@ -175,7 +175,6 @@ impl<W: PositionWrite> oio::Write for PositionWriter<W> {
mod tests {
use std::collections::HashSet;
use std::sync::Mutex;
- use std::time::Duration;
use pretty_assertions::assert_eq;
use rand::Rng;
diff --git a/core/src/raw/ops.rs b/core/src/raw/ops.rs
index 117cbd586..ae76a58f1 100644
--- a/core/src/raw/ops.rs
+++ b/core/src/raw/ops.rs
@@ -21,8 +21,8 @@
use crate::options;
use crate::raw::*;
+
use std::collections::HashMap;
-use std::time::Duration;
/// Args for `create` operation.
///
diff --git a/core/src/raw/time.rs b/core/src/raw/time.rs
index 9d67931b3..b43f61a82 100644
--- a/core/src/raw/time.rs
+++ b/core/src/raw/time.rs
@@ -22,7 +22,12 @@ use jiff::SignedDuration;
use std::fmt;
use std::ops::{Add, AddAssign, Sub, SubAssign};
use std::str::FromStr;
-use std::time::{Duration, SystemTime};
+
+pub use std::time::{Duration, UNIX_EPOCH};
+#[cfg(not(target_arch = "wasm32"))]
+pub use std::time::{Instant, SystemTime};
+#[cfg(target_arch = "wasm32")]
+pub use web_time::{Instant, SystemTime};
/// An instant in time represented as the number of nanoseconds since the Unix
epoch.
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -166,22 +171,45 @@ impl From<Timestamp> for jiff::Timestamp {
}
}
-impl From<Timestamp> for SystemTime {
- fn from(t: Timestamp) -> Self {
- t.0.into()
- }
-}
-
impl From<jiff::Timestamp> for Timestamp {
fn from(t: jiff::Timestamp) -> Self {
Timestamp(t)
}
}
+impl From<Timestamp> for SystemTime {
+ fn from(ts: Timestamp) -> Self {
+ #[cfg(not(target_arch = "wasm32"))]
+ {
+ SystemTime::from(ts.0)
+ }
+
+ #[cfg(target_arch = "wasm32")]
+ {
+ use std::time::SystemTime as StdSystemTime;
+
+ let t = StdSystemTime::from(ts.0);
+ <web_time::SystemTime as web_time::web::SystemTimeExt>::from_std(t)
+ }
+ }
+}
+
impl TryFrom<SystemTime> for Timestamp {
type Error = Error;
fn try_from(t: SystemTime) -> Result<Self> {
+ let t = {
+ #[cfg(not(target_arch = "wasm32"))]
+ {
+ t
+ }
+
+ #[cfg(target_arch = "wasm32")]
+ {
+ <web_time::SystemTime as
web_time::web::SystemTimeExt>::to_std(t)
+ }
+ };
+
jiff::Timestamp::try_from(t).map(Timestamp).map_err(|err| {
Error::new(ErrorKind::Unexpected, "input timestamp
overflow").set_source(err)
})
diff --git a/core/src/services/azblob/core.rs b/core/src/services/azblob/core.rs
index fe533807b..b2d615ff3 100644
--- a/core/src/services/azblob/core.rs
+++ b/core/src/services/azblob/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use base64::Engine;
use base64::prelude::BASE64_STANDARD;
diff --git a/core/src/services/b2/core.rs b/core/src/services/b2/core.rs
index b88a20598..a266d77be 100644
--- a/core/src/services/b2/core.rs
+++ b/core/src/services/b2/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Buf;
use http::Request;
diff --git a/core/src/services/cloudflare_kv/backend.rs
b/core/src/services/cloudflare_kv/backend.rs
index ec8a4ab13..76395829d 100644
--- a/core/src/services/cloudflare_kv/backend.rs
+++ b/core/src/services/cloudflare_kv/backend.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Buf;
use http::StatusCode;
diff --git a/core/src/services/cloudflare_kv/config.rs
b/core/src/services/cloudflare_kv/config.rs
index 34698f63f..27956d10a 100644
--- a/core/src/services/cloudflare_kv/config.rs
+++ b/core/src/services/cloudflare_kv/config.rs
@@ -16,13 +16,13 @@
// under the License.
use std::fmt::Debug;
-use std::time::Duration;
use serde::Deserialize;
use serde::Serialize;
use super::CLOUDFLARE_KV_SCHEME;
use super::backend::CloudflareKvBuilder;
+use crate::raw::*;
/// Cloudflare KV Service Support.
#[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
diff --git a/core/src/services/cloudflare_kv/core.rs
b/core/src/services/cloudflare_kv/core.rs
index 13797b587..fa1069b17 100644
--- a/core/src/services/cloudflare_kv/core.rs
+++ b/core/src/services/cloudflare_kv/core.rs
@@ -16,7 +16,6 @@
// under the License.
use std::sync::Arc;
-use std::time::Duration;
use http::Request;
use http::Response;
@@ -24,11 +23,7 @@ use http::header;
use http::request;
use serde_json::json;
-use crate::raw::Operation;
-use crate::raw::QueryPairsWriter;
-use crate::raw::new_json_serialize_error;
-use crate::raw::percent_encode_path;
-use crate::raw::{AccessorInfo, FormDataPart, Multipart,
new_request_build_error};
+use crate::raw::*;
use crate::services::cloudflare_kv::model::CfKvMetadata;
use crate::{Buffer, Result};
diff --git a/core/src/services/cos/core.rs b/core/src/services/cos/core.rs
index cb3c75b38..f601dc6ba 100644
--- a/core/src/services/cos/core.rs
+++ b/core/src/services/cos/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Bytes;
use http::Request;
diff --git a/core/src/services/dashmap/writer.rs
b/core/src/services/dashmap/writer.rs
index 54efe86cb..bb8409ba3 100644
--- a/core/src/services/dashmap/writer.rs
+++ b/core/src/services/dashmap/writer.rs
@@ -16,11 +16,10 @@
// under the License.
use std::sync::Arc;
-use std::time::SystemTime;
use super::core::DashmapCore;
use super::core::DashmapValue;
-use crate::raw::{OpWrite, Timestamp, oio};
+use crate::raw::*;
use crate::*;
pub struct DashmapWriter {
@@ -54,7 +53,7 @@ impl oio::Write for DashmapWriter {
let entry_mode = EntryMode::from_path(&self.path);
let mut meta = Metadata::new(entry_mode);
meta.set_content_length(content.len() as u64);
- meta.set_last_modified(Timestamp::try_from(SystemTime::now())?);
+ meta.set_last_modified(Timestamp::now());
if let Some(v) = self.op.content_type() {
meta.set_content_type(v);
diff --git a/core/src/services/dropbox/core.rs
b/core/src/services/dropbox/core.rs
index 396c73fe2..13545dde0 100644
--- a/core/src/services/dropbox/core.rs
+++ b/core/src/services/dropbox/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Buf;
use bytes::Bytes;
diff --git a/core/src/services/etcd/core.rs b/core/src/services/etcd/core.rs
index 24b6eea6e..2d458f27b 100644
--- a/core/src/services/etcd/core.rs
+++ b/core/src/services/etcd/core.rs
@@ -15,8 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-use crate::services::etcd::error::format_etcd_error;
-use crate::{Buffer, Error, ErrorKind, Result};
use etcd_client::Client;
use etcd_client::ConnectOptions;
use fastpool::ManageObject;
@@ -24,7 +22,10 @@ use fastpool::ObjectStatus;
use fastpool::bounded;
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
+
+use crate::raw::*;
+use crate::services::etcd::error::format_etcd_error;
+use crate::{Buffer, Error, ErrorKind, Result};
pub mod constants {
pub const DEFAULT_ETCD_ENDPOINTS: &str = "http://127.0.0.1:2379";
diff --git a/core/src/services/ftp/core.rs b/core/src/services/ftp/core.rs
index afe227add..5ff027701 100644
--- a/core/src/services/ftp/core.rs
+++ b/core/src/services/ftp/core.rs
@@ -17,9 +17,7 @@
use fastpool::{ManageObject, ObjectStatus, bounded};
use futures_rustls::TlsConnector;
-use raw::Operation;
use std::sync::Arc;
-use std::time::Duration;
use suppaftp::AsyncRustlsConnector;
use suppaftp::AsyncRustlsFtpStream;
use suppaftp::FtpError;
@@ -29,7 +27,7 @@ use suppaftp::rustls::ClientConfig;
use suppaftp::types::FileType;
use super::err::format_ftp_error;
-use crate::raw::AccessorInfo;
+use crate::raw::*;
use crate::*;
pub struct FtpCore {
diff --git a/core/src/services/gcs/core.rs b/core/src/services/gcs/core.rs
index f9e88406c..35838a410 100644
--- a/core/src/services/gcs/core.rs
+++ b/core/src/services/gcs/core.rs
@@ -20,7 +20,6 @@ use std::fmt::Debug;
use std::fmt::Write;
use std::sync::Arc;
use std::sync::LazyLock;
-use std::time::Duration;
use backon::ExponentialBuilder;
use backon::Retryable;
diff --git a/core/src/services/gdrive/core.rs b/core/src/services/gdrive/core.rs
index 0b89c14b3..b854969fc 100644
--- a/core/src/services/gdrive/core.rs
+++ b/core/src/services/gdrive/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Buf;
use bytes::Bytes;
diff --git a/core/src/services/memcached/backend.rs
b/core/src/services/memcached/backend.rs
index cbf6aa5c4..9544b0c7d 100644
--- a/core/src/services/memcached/backend.rs
+++ b/core/src/services/memcached/backend.rs
@@ -16,7 +16,6 @@
// under the License.
use std::sync::Arc;
-use std::time::Duration;
use super::MEMCACHED_SCHEME;
use super::config::MemcachedConfig;
diff --git a/core/src/services/memcached/config.rs
b/core/src/services/memcached/config.rs
index ac8990a1d..943f38ce8 100644
--- a/core/src/services/memcached/config.rs
+++ b/core/src/services/memcached/config.rs
@@ -16,13 +16,13 @@
// under the License.
use std::fmt::Debug;
-use std::time::Duration;
use serde::Deserialize;
use serde::Serialize;
use super::MEMCACHED_SCHEME;
use super::backend::MemcachedBuilder;
+use crate::raw::*;
/// Config for MemCached services support
#[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
diff --git a/core/src/services/memcached/core.rs
b/core/src/services/memcached/core.rs
index c88d7b0be..25b097314 100644
--- a/core/src/services/memcached/core.rs
+++ b/core/src/services/memcached/core.rs
@@ -17,7 +17,6 @@
use fastpool::{ManageObject, ObjectStatus, bounded};
use std::sync::Arc;
-use std::time::Duration;
use tokio::net::TcpStream;
use super::binary;
diff --git a/core/src/services/mini_moka/backend.rs
b/core/src/services/mini_moka/backend.rs
index 24a6b08ed..55da226cb 100644
--- a/core/src/services/mini_moka/backend.rs
+++ b/core/src/services/mini_moka/backend.rs
@@ -16,7 +16,6 @@
// under the License.
use std::sync::Arc;
-use std::time::Duration;
use log::debug;
diff --git a/core/src/services/moka/backend.rs
b/core/src/services/moka/backend.rs
index ee28e15b9..dc16c82a4 100644
--- a/core/src/services/moka/backend.rs
+++ b/core/src/services/moka/backend.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use log::debug;
@@ -27,8 +26,6 @@ use super::core::*;
use super::deleter::MokaDeleter;
use super::lister::MokaLister;
use super::writer::MokaWriter;
-use crate::raw::oio;
-use crate::raw::signed_to_duration;
use crate::raw::*;
use crate::*;
diff --git a/core/src/services/monoiofs/core.rs
b/core/src/services/monoiofs/core.rs
index eee84568c..009fbf2da 100644
--- a/core/src/services/monoiofs/core.rs
+++ b/core/src/services/monoiofs/core.rs
@@ -19,7 +19,6 @@ use std::mem;
use std::path::PathBuf;
use std::sync::Arc;
use std::sync::Mutex;
-use std::time::Duration;
use flume::Receiver;
use flume::Sender;
@@ -31,6 +30,7 @@ use monoio::RuntimeBuilder;
use super::MONOIOFS_SCHEME;
use crate::raw::*;
use crate::*;
+
pub const BUFFER_SIZE: usize = 2 * 1024 * 1024; // 2 MiB
/// a boxed function that spawns task in current monoio runtime
@@ -219,7 +219,6 @@ impl MonoiofsCore {
#[cfg(test)]
mod tests {
use std::sync::Arc;
- use std::time::Duration;
use futures::StreamExt;
use futures::channel::mpsc::UnboundedSender;
diff --git a/core/src/services/obs/core.rs b/core/src/services/obs/core.rs
index 33f03f549..9ed33e905 100644
--- a/core/src/services/obs/core.rs
+++ b/core/src/services/obs/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Bytes;
use http::Request;
diff --git a/core/src/services/onedrive/core.rs
b/core/src/services/onedrive/core.rs
index 1867fbb65..76b334d81 100644
--- a/core/src/services/onedrive/core.rs
+++ b/core/src/services/onedrive/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Buf;
use bytes::Bytes;
diff --git a/core/src/services/oss/core.rs b/core/src/services/oss/core.rs
index 78423dd76..7bdf5456d 100644
--- a/core/src/services/oss/core.rs
+++ b/core/src/services/oss/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
use bytes::Bytes;
use constants::X_OSS_META_PREFIX;
diff --git a/core/src/services/redis/backend.rs
b/core/src/services/redis/backend.rs
index e9b3d58a1..1b219f44f 100644
--- a/core/src/services/redis/backend.rs
+++ b/core/src/services/redis/backend.rs
@@ -17,7 +17,6 @@
use std::path::PathBuf;
use std::sync::Arc;
-use std::time::Duration;
use http::Uri;
use redis::Client;
diff --git a/core/src/services/redis/config.rs
b/core/src/services/redis/config.rs
index 1f07f4a04..7df08e87c 100644
--- a/core/src/services/redis/config.rs
+++ b/core/src/services/redis/config.rs
@@ -16,13 +16,13 @@
// under the License.
use std::fmt::Debug;
-use std::time::Duration;
use serde::Deserialize;
use serde::Serialize;
use super::REDIS_SCHEME;
use super::backend::RedisBuilder;
+use crate::raw::*;
/// Config for Redis services support.
#[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
diff --git a/core/src/services/redis/core.rs b/core/src/services/redis/core.rs
index f0f5de20a..08fedc5d3 100644
--- a/core/src/services/redis/core.rs
+++ b/core/src/services/redis/core.rs
@@ -17,9 +17,7 @@
use std::fmt::Debug;
use std::sync::Arc;
-use std::time::Duration;
-use crate::*;
use bytes::Bytes;
use fastpool::{ManageObject, ObjectStatus, bounded};
use redis::AsyncCommands;
@@ -34,6 +32,9 @@ use redis::aio::ConnectionManager;
use redis::cluster::ClusterClient;
use redis::cluster_async::ClusterConnection;
+use crate::raw::*;
+use crate::*;
+
#[derive(Clone)]
pub enum RedisConnection {
Normal(ConnectionManager),
diff --git a/core/src/services/s3/core.rs b/core/src/services/s3/core.rs
index 28576e4cd..6699dd2bf 100644
--- a/core/src/services/s3/core.rs
+++ b/core/src/services/s3/core.rs
@@ -19,7 +19,6 @@ use std::fmt::Debug;
use std::fmt::Display;
use std::fmt::Write;
use std::sync::Arc;
-use std::time::Duration;
use base64::Engine;
use base64::prelude::BASE64_STANDARD;
diff --git a/core/src/services/sftp/core.rs b/core/src/services/sftp/core.rs
index 2520a03d9..83ff99258 100644
--- a/core/src/services/sftp/core.rs
+++ b/core/src/services/sftp/core.rs
@@ -30,7 +30,6 @@ use std::fmt::Debug;
use std::path::Path;
use std::path::PathBuf;
use std::sync::Arc;
-use std::time::Duration;
pub struct SftpCore {
pub info: Arc<AccessorInfo>,
diff --git a/core/src/types/execute/executors/tokio_executor.rs
b/core/src/types/execute/executors/tokio_executor.rs
index 72f96b01b..afb02931c 100644
--- a/core/src/types/execute/executors/tokio_executor.rs
+++ b/core/src/types/execute/executors/tokio_executor.rs
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-use crate::raw::BoxedStaticFuture;
+use crate::raw::*;
use crate::*;
/// Executor that uses the [`tokio::task::spawn`] to execute futures.
@@ -34,7 +34,6 @@ mod tests {
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
use std::sync::atomic::Ordering;
- use std::time::Duration;
use tokio::time::sleep;
diff --git a/core/src/types/operator/operator.rs
b/core/src/types/operator/operator.rs
index c033e34c0..e81dd2475 100644
--- a/core/src/types/operator/operator.rs
+++ b/core/src/types/operator/operator.rs
@@ -16,7 +16,6 @@
// under the License.
use std::future::Future;
-use std::time::Duration;
use futures::Stream;
use futures::StreamExt;
diff --git a/core/src/types/operator/operator_futures.rs
b/core/src/types/operator/operator_futures.rs
index 4c67b6a5f..6726707fc 100644
--- a/core/src/types/operator/operator_futures.rs
+++ b/core/src/types/operator/operator_futures.rs
@@ -22,7 +22,6 @@
use std::collections::HashMap;
use std::future::IntoFuture;
use std::ops::RangeBounds;
-use std::time::Duration;
use crate::raw::*;
use crate::*;