You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2026/05/11 18:35:26 UTC
(opendal) branch main updated: chore(deps): upgrade rand to 0.10.1 (#7510)
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 fbb432fd2 chore(deps): upgrade rand to 0.10.1 (#7510)
fbb432fd2 is described below
commit fbb432fd2e21a5187d79ed04e2f9d5959431e929
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue May 12 02:35:18 2026 +0800
chore(deps): upgrade rand to 0.10.1 (#7510)
* chore(deps): upgrade rand to 0.10.1
* fix(core): remove unused rand import
* fix(core): remove unused rand bench imports
---
core/Cargo.lock | 16 ++++++++--------
core/Cargo.toml | 2 +-
core/benches/ops/read.rs | 8 ++++----
core/benches/ops/write.rs | 8 ++++----
core/benches/vs_fs/src/main.rs | 3 ++-
core/benches/vs_s3/src/main.rs | 3 ++-
core/core/src/raw/futures_util.rs | 6 +++---
core/core/src/raw/oio/write/block_write.rs | 16 +++++++---------
core/core/src/raw/oio/write/multipart_write.rs | 18 ++++++++----------
core/core/src/raw/oio/write/position_write.rs | 10 ++++------
core/core/src/types/buffer.rs | 19 ++++++++++---------
core/core/src/types/context/write.rs | 20 +++++++++-----------
core/core/src/types/read/reader.rs | 10 ++++------
core/core/src/types/write/writer.rs | 8 +++-----
core/edge/file_write_on_full_disk/src/main.rs | 5 +++--
core/layers/chaos/src/lib.rs | 22 ++++++++++++----------
core/services/compfs/src/core.rs | 7 +++----
core/testkit/src/read.rs | 6 +++---
core/testkit/src/write.rs | 6 +++---
core/tests/behavior/utils.rs | 17 +++++++++--------
integrations/object_store/Cargo.toml | 2 +-
integrations/object_store/src/store.rs | 7 ++++---
integrations/parquet/Cargo.toml | 2 +-
integrations/parquet/src/async_reader.rs | 4 ++--
24 files changed, 110 insertions(+), 115 deletions(-)
diff --git a/core/Cargo.lock b/core/Cargo.lock
index a2851d815..74b6274cc 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -2814,7 +2814,7 @@ name = "edge_test_file_write_on_full_disk"
version = "0.56.0"
dependencies = [
"opendal",
- "rand 0.8.6",
+ "rand 0.10.1",
"tokio",
]
@@ -6308,7 +6308,7 @@ dependencies = [
"opendal-service-webhdfs",
"opendal-service-yandex-disk",
"opendal-testkit",
- "rand 0.8.6",
+ "rand 0.10.1",
"reqwest",
"sha2 0.11.0",
"size",
@@ -6322,7 +6322,7 @@ version = "0.56.0"
dependencies = [
"criterion",
"opendal",
- "rand 0.8.6",
+ "rand 0.10.1",
"tokio",
"uuid",
]
@@ -6338,7 +6338,7 @@ dependencies = [
"dotenvy",
"logforth",
"opendal",
- "rand 0.8.6",
+ "rand 0.10.1",
"tokio",
]
@@ -6361,7 +6361,7 @@ dependencies = [
"percent-encoding",
"pretty_assertions",
"quick-xml",
- "rand 0.8.6",
+ "rand 0.10.1",
"reqsign-core",
"reqwest",
"serde",
@@ -6439,7 +6439,7 @@ name = "opendal-layer-chaos"
version = "0.56.0"
dependencies = [
"opendal-core",
- "rand 0.8.6",
+ "rand 0.10.1",
]
[[package]]
@@ -6802,7 +6802,7 @@ dependencies = [
"bytes",
"compio",
"opendal-core",
- "rand 0.8.6",
+ "rand 0.10.1",
"serde",
]
@@ -7559,7 +7559,7 @@ dependencies = [
"opendal-layer-logging",
"opendal-layer-retry",
"opendal-layer-timeout",
- "rand 0.8.6",
+ "rand 0.10.1",
"sha2 0.11.0",
"tokio",
"uuid",
diff --git a/core/Cargo.toml b/core/Cargo.toml
index bb2533c49..5f4d4723d 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -50,7 +50,7 @@ log = { version = "0.4.29" }
logforth = { version = "0.29.1", features = ["starter-log"] }
mea = "0.6"
quick-xml = { version = "0.39.3", default-features = false }
-rand = "0.8"
+rand = "0.10.1"
serde = { version = "1", default-features = false }
serde_json = "1"
sha2 = "0.11.0"
diff --git a/core/benches/ops/read.rs b/core/benches/ops/read.rs
index f4cbfac7c..734ef6b66 100644
--- a/core/benches/ops/read.rs
+++ b/core/benches/ops/read.rs
@@ -19,7 +19,7 @@ use divan::Bencher;
use divan::counter::BytesCount;
use opendal::tests::TEST_RUNTIME;
use opendal::tests::init_test_service;
-use rand::prelude::*;
+use rand::rng;
use size::Size;
use super::utils::*;
@@ -35,7 +35,7 @@ use super::utils::*;
)]
fn whole(b: Bencher, size: Size) {
let op = init_test_service().unwrap().unwrap();
- let mut rng = thread_rng();
+ let mut rng = rng();
let content = gen_bytes(&mut rng, size.bytes() as usize);
let path = uuid::Uuid::new_v4().to_string();
let _temp_data = TempData::generate(op.clone(), &path, content.clone());
@@ -57,7 +57,7 @@ mod concurrent {
)]
fn baseline(b: Bencher) {
let op = init_test_service().unwrap().unwrap();
- let mut rng = thread_rng();
+ let mut rng = rng();
let content = gen_bytes(&mut rng, 1024 * 1024 * 1024);
let path = uuid::Uuid::new_v4().to_string();
let _temp_data = TempData::generate(op.clone(), &path, content.clone());
@@ -78,7 +78,7 @@ mod concurrent {
)]
fn concurrent(b: Bencher, concurrent: usize) {
let op = init_test_service().unwrap().unwrap();
- let mut rng = thread_rng();
+ let mut rng = rng();
let content = gen_bytes(&mut rng, 1024 * 1024 * 1024);
let path = uuid::Uuid::new_v4().to_string();
let _temp_data = TempData::generate(op.clone(), &path, content.clone());
diff --git a/core/benches/ops/write.rs b/core/benches/ops/write.rs
index a4a50f465..2541604a8 100644
--- a/core/benches/ops/write.rs
+++ b/core/benches/ops/write.rs
@@ -19,7 +19,7 @@ use divan::Bencher;
use divan::counter::BytesCount;
use opendal::tests::TEST_RUNTIME;
use opendal::tests::init_test_service;
-use rand::prelude::*;
+use rand::rng;
use size::Size;
use super::utils::*;
@@ -40,7 +40,7 @@ fn whole(b: Bencher, size: Size) {
b.counter(BytesCount::from(size.bytes() as u64))
.with_inputs(|| {
- let mut rng = thread_rng();
+ let mut rng = rng();
gen_bytes(&mut rng, size.bytes() as usize)
})
.bench_values(|content| {
@@ -65,7 +65,7 @@ mod concurrent {
let op = init_test_service().unwrap().unwrap();
let path = uuid::Uuid::new_v4().to_string();
let _temp_data = TempData::existing(op.clone(), &path);
- let mut rng = thread_rng();
+ let mut rng = rng();
let content = gen_bytes(&mut rng, SIZE);
b.counter(BytesCount::from(SIZE)).bench(|| {
@@ -86,7 +86,7 @@ mod concurrent {
let op = init_test_service().unwrap().unwrap();
let path = uuid::Uuid::new_v4().to_string();
let _temp_data = TempData::existing(op.clone(), &path);
- let mut rng = thread_rng();
+ let mut rng = rng();
let content = gen_bytes(&mut rng, SIZE);
b.counter(BytesCount::from(SIZE)).bench(|| {
diff --git a/core/benches/vs_fs/src/main.rs b/core/benches/vs_fs/src/main.rs
index 22e13d9e7..197522d8f 100644
--- a/core/benches/vs_fs/src/main.rs
+++ b/core/benches/vs_fs/src/main.rs
@@ -21,6 +21,7 @@ use opendal::blocking;
use opendal::options;
use opendal::services;
use rand::prelude::*;
+use rand::rng;
fn main() {
let mut c = Criterion::default().configure_from_args();
@@ -71,7 +72,7 @@ fn bench_vs_fs(c: &mut Criterion) {
}
fn prepare() -> String {
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut content = vec![0; 16 * 1024 * 1024];
rng.fill_bytes(&mut content);
diff --git a/core/benches/vs_s3/src/main.rs b/core/benches/vs_s3/src/main.rs
index c279b81e0..0305c3baa 100644
--- a/core/benches/vs_s3/src/main.rs
+++ b/core/benches/vs_s3/src/main.rs
@@ -25,6 +25,7 @@ use opendal::Operator;
use opendal::services;
use opendal::tests::TEST_RUNTIME;
use rand::prelude::*;
+use rand::rng;
use tokio::io::AsyncReadExt;
fn main() {
@@ -115,7 +116,7 @@ fn bench_read(c: &mut Criterion, op: Operator, s3_client: aws_sdk_s3::Client, bu
}
async fn prepare(op: &Operator) {
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut content = vec![0; 16 * 1024 * 1024];
rng.fill_bytes(&mut content);
diff --git a/core/core/src/raw/futures_util.rs b/core/core/src/raw/futures_util.rs
index 17134f1e6..c92722490 100644
--- a/core/core/src/raw/futures_util.rs
+++ b/core/core/src/raw/futures_util.rs
@@ -319,7 +319,7 @@ impl<I: Send + 'static, O: Send + 'static> ConcurrentTasks<I, O> {
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
- use rand::Rng;
+ use rand::RngExt;
use tokio::time::sleep;
use super::*;
@@ -334,7 +334,7 @@ mod tests {
sleep(dur).await;
// 5% rate to fail.
- if rand::thread_rng().gen_range(0..100) > 90 {
+ if rand::rng().random_range(0..100) > 90 {
return (
(i, dur),
Err(Error::new(ErrorKind::Unexpected, "I'm lucky").set_temporary()),
@@ -348,7 +348,7 @@ mod tests {
for i in 0..10240 {
// Sleep up to 10ms
- let dur = Duration::from_millis(rand::thread_rng().gen_range(0..10));
+ let dur = Duration::from_millis(rand::rng().random_range(0..10));
loop {
let res = tasks.execute((i, dur)).await;
if res.is_ok() {
diff --git a/core/core/src/raw/oio/write/block_write.rs b/core/core/src/raw/oio/write/block_write.rs
index 793da2be7..8bad7d91f 100644
--- a/core/core/src/raw/oio/write/block_write.rs
+++ b/core/core/src/raw/oio/write/block_write.rs
@@ -247,9 +247,7 @@ mod tests {
use std::sync::Mutex;
use pretty_assertions::assert_eq;
- use rand::Rng;
- use rand::RngCore;
- use rand::thread_rng;
+ use rand::{Rng, RngExt, rng};
use tokio::time::sleep;
use super::*;
@@ -277,7 +275,7 @@ mod tests {
async fn write_once(&self, size: u64, body: Buffer) -> Result<Metadata> {
sleep(Duration::from_nanos(50)).await;
- if thread_rng().gen_bool(1.0 / 10.0) {
+ if rng().random_bool(1.0 / 10.0) {
return Err(
Error::new(ErrorKind::Unexpected, "I'm a crazy monkey!").set_temporary()
);
@@ -294,7 +292,7 @@ mod tests {
sleep(Duration::from_millis(50)).await;
// We will have 10% percent rate for write part to fail.
- if thread_rng().gen_bool(1.0 / 10.0) {
+ if rng().random_bool(1.0 / 10.0) {
return Err(
Error::new(ErrorKind::Unexpected, "I'm a crazy monkey!").set_temporary()
);
@@ -325,14 +323,14 @@ mod tests {
#[tokio::test]
async fn test_block_writer_with_concurrent_errors() {
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut w = BlockWriter::new(Arc::default(), TestWrite::new(), 8);
let mut total_size = 0u64;
let mut expected_content = Vec::new();
for _ in 0..1000 {
- let size = rng.gen_range(1..1024);
+ let size = rng.random_range(1..1024);
total_size += size as u64;
let mut bs = vec![0; size];
@@ -368,12 +366,12 @@ mod tests {
#[tokio::test]
async fn test_block_writer_with_retry_when_write_once_error() {
- let mut rng = thread_rng();
+ let mut rng = rng();
for _ in 1..100 {
let mut w = BlockWriter::new(Arc::default(), TestWrite::new(), 8);
- let size = rng.gen_range(1..1024);
+ let size = rng.random_range(1..1024);
let mut bs = vec![0; size];
rng.fill_bytes(&mut bs);
diff --git a/core/core/src/raw/oio/write/multipart_write.rs b/core/core/src/raw/oio/write/multipart_write.rs
index 4afb9756a..2e733a526 100644
--- a/core/core/src/raw/oio/write/multipart_write.rs
+++ b/core/core/src/raw/oio/write/multipart_write.rs
@@ -311,9 +311,7 @@ where
mod tests {
use mea::mutex::Mutex;
use pretty_assertions::assert_eq;
- use rand::Rng;
- use rand::RngCore;
- use rand::thread_rng;
+ use rand::{Rng, RngExt, rng};
use tokio::time::sleep;
use tokio::time::timeout;
@@ -344,7 +342,7 @@ mod tests {
async fn write_once(&self, size: u64, body: Buffer) -> Result<Metadata> {
sleep(Duration::from_nanos(50)).await;
- if thread_rng().gen_bool(1.0 / 10.0) {
+ if rng().random_bool(1.0 / 10.0) {
return Err(
Error::new(ErrorKind::Unexpected, "I'm a crazy monkey!").set_temporary()
);
@@ -377,7 +375,7 @@ mod tests {
sleep(Duration::from_nanos(50)).await;
// We will have 10% percent rate for write part to fail.
- if thread_rng().gen_bool(1.0 / 10.0) {
+ if rng().random_bool(1.0 / 10.0) {
return Err(
Error::new(ErrorKind::Unexpected, "I'm a crazy monkey!").set_temporary()
);
@@ -435,14 +433,14 @@ mod tests {
}
fn timeout(&self) -> Option<BoxedStaticFuture<()>> {
- let time = thread_rng().gen_range(0..100);
+ let time = rng().random_range(0..100);
Some(Box::pin(tokio::time::sleep(Duration::from_nanos(time))))
}
}
#[tokio::test]
async fn test_multipart_upload_writer_with_concurrent_errors() {
- let mut rng = thread_rng();
+ let mut rng = rng();
let info = Arc::new(AccessorInfo::default());
info.update_executor(|_| Executor::with(TimeoutExecutor::new()));
@@ -451,7 +449,7 @@ mod tests {
let mut total_size = 0u64;
for _ in 0..1000 {
- let size = rng.gen_range(1..1024);
+ let size = rng.random_range(1..1024);
total_size += size as u64;
let mut bs = vec![0; size];
@@ -488,11 +486,11 @@ mod tests {
#[tokio::test]
async fn test_multipart_writer_with_retry_when_write_once_error() {
- let mut rng = thread_rng();
+ let mut rng = rng();
for _ in 0..100 {
let mut w = MultipartWriter::new(Arc::default(), TestWrite::new(), 200);
- let size = rng.gen_range(1..1024);
+ let size = rng.random_range(1..1024);
let mut bs = vec![0; size];
rng.fill_bytes(&mut bs);
diff --git a/core/core/src/raw/oio/write/position_write.rs b/core/core/src/raw/oio/write/position_write.rs
index c6333dbde..56010cf90 100644
--- a/core/core/src/raw/oio/write/position_write.rs
+++ b/core/core/src/raw/oio/write/position_write.rs
@@ -177,9 +177,7 @@ mod tests {
use std::sync::Mutex;
use pretty_assertions::assert_eq;
- use rand::Rng;
- use rand::RngCore;
- use rand::thread_rng;
+ use rand::{Rng, RngExt, rng};
use tokio::time::sleep;
use super::*;
@@ -207,7 +205,7 @@ mod tests {
sleep(Duration::from_millis(50)).await;
// We will have 10% percent rate for write part to fail.
- if thread_rng().gen_bool(1.0 / 10.0) {
+ if rng().random_bool(1.0 / 10.0) {
return Err(
Error::new(ErrorKind::Unexpected, "I'm a crazy monkey!").set_temporary()
);
@@ -239,13 +237,13 @@ mod tests {
#[tokio::test]
async fn test_position_writer_with_concurrent_errors() {
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut w = PositionWriter::new(Arc::default(), TestWrite::new(), 200);
let mut total_size = 0u64;
for _ in 0..1000 {
- let size = rng.gen_range(1..1024);
+ let size = rng.random_range(1..1024);
total_size += size as u64;
let mut bs = vec![0; size];
diff --git a/core/core/src/types/buffer.rs b/core/core/src/types/buffer.rs
index e2effd2d4..0b2dfdeec 100644
--- a/core/core/src/types/buffer.rs
+++ b/core/core/src/types/buffer.rs
@@ -750,6 +750,7 @@ mod tests {
use pretty_assertions::assert_eq;
use rand::prelude::*;
+ use rand::rng;
use super::*;
@@ -900,11 +901,11 @@ mod tests {
/// - Total size of this buffer.
/// - Total content of this buffer.
fn setup_buffer() -> (Buffer, usize, Bytes) {
- let mut rng = thread_rng();
+ let mut rng = rng();
let bs = (0..100)
.map(|_| {
- let len = rng.gen_range(1..100);
+ let len = rng.random_range(1..100);
let mut buf = vec![0; len];
rng.fill(&mut buf[..]);
Bytes::from(buf)
@@ -920,7 +921,7 @@ mod tests {
#[test]
fn fuzz_buffer_advance() {
- let mut rng = thread_rng();
+ let mut rng = rng();
let (mut buf, total_size, total_content) = setup_buffer();
assert_eq!(buf.remaining(), total_size);
@@ -932,7 +933,7 @@ mod tests {
while !buf.is_empty() && times > 0 {
times -= 1;
- let cnt = rng.gen_range(0..total_size - cur);
+ let cnt = rng.random_range(0..total_size - cur);
cur += cnt;
buf.advance(cnt);
@@ -943,7 +944,7 @@ mod tests {
#[test]
fn fuzz_buffer_iter() {
- let mut rng = thread_rng();
+ let mut rng = rng();
let (mut buf, total_size, total_content) = setup_buffer();
assert_eq!(buf.remaining(), total_size);
@@ -951,7 +952,7 @@ mod tests {
let mut cur = 0;
while buf.is_empty() {
- let cnt = rng.gen_range(0..total_size - cur);
+ let cnt = rng.random_range(0..total_size - cur);
cur += cnt;
buf.advance(cnt);
@@ -972,7 +973,7 @@ mod tests {
#[test]
fn fuzz_buffer_truncate() {
- let mut rng = thread_rng();
+ let mut rng = rng();
let (mut buf, total_size, total_content) = setup_buffer();
assert_eq!(buf.remaining(), total_size);
@@ -980,7 +981,7 @@ mod tests {
let mut cur = 0;
while buf.is_empty() {
- let cnt = rng.gen_range(0..total_size - cur);
+ let cnt = rng.random_range(0..total_size - cur);
cur += cnt;
buf.advance(cnt);
@@ -988,7 +989,7 @@ mod tests {
assert_eq!(buf.remaining(), total_size - cur);
assert_eq!(buf.to_bytes(), total_content.slice(cur..));
- let truncate_size = rng.gen_range(0..total_size - cur);
+ let truncate_size = rng.random_range(0..total_size - cur);
buf.truncate(truncate_size);
// After truncate
diff --git a/core/core/src/types/context/write.rs b/core/core/src/types/context/write.rs
index e6c0772ae..6e5ce5ee2 100644
--- a/core/core/src/types/context/write.rs
+++ b/core/core/src/types/context/write.rs
@@ -215,9 +215,7 @@ mod tests {
use logforth::layout::TextLayout;
use mea::mutex::Mutex;
use pretty_assertions::assert_eq;
- use rand::Rng;
- use rand::RngCore;
- use rand::thread_rng;
+ use rand::{Rng, RngExt, rng};
use sha2::Digest;
use sha2::Sha256;
@@ -275,7 +273,7 @@ mod tests {
async fn test_exact_buf_writer_short_write() -> Result<()> {
setup();
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut expected = vec![0; 5];
rng.fill_bytes(&mut expected);
@@ -317,7 +315,7 @@ mod tests {
false,
);
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut expected = vec![0; 15];
rng.fill_bytes(&mut expected);
@@ -348,7 +346,7 @@ mod tests {
false,
);
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut expected = vec![];
let mut new_content = |size| {
@@ -391,7 +389,7 @@ mod tests {
false,
);
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut expected = vec![];
let mut new_content = |size| {
@@ -426,11 +424,11 @@ mod tests {
async fn test_fuzz_exact_buf_writer() -> Result<()> {
setup();
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut expected = vec![];
let buf = Arc::new(Mutex::new(vec![]));
- let buffer_size = rng.gen_range(1..10);
+ let buffer_size = rng.random_range(1..10);
let mut writer = WriteGenerator::new(
Box::new(MockWriter {
buf: buf.clone(),
@@ -442,7 +440,7 @@ mod tests {
debug!("test_fuzz_exact_buf_writer: buffer size: {buffer_size}");
for _ in 0..1000 {
- let size = rng.gen_range(1..20);
+ let size = rng.random_range(1..20);
debug!("test_fuzz_exact_buf_writer: write size: {size}");
let mut content = vec![0; size];
rng.fill_bytes(&mut content);
@@ -486,7 +484,7 @@ mod tests {
true, // exact mode
);
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut expected = vec![0; large_buffer_size];
rng.fill_bytes(&mut expected);
diff --git a/core/core/src/types/read/reader.rs b/core/core/src/types/read/reader.rs
index a2af93390..f54e604a1 100644
--- a/core/core/src/types/read/reader.rs
+++ b/core/core/src/types/read/reader.rs
@@ -433,9 +433,7 @@ impl Reader {
#[cfg(test)]
mod tests {
use bytes::Bytes;
- use rand::Rng;
- use rand::RngCore;
- use rand::rngs::ThreadRng;
+ use rand::{Rng, RngExt};
use super::*;
use crate::Operator;
@@ -460,16 +458,16 @@ mod tests {
}
fn gen_random_bytes() -> Vec<u8> {
- let mut rng = ThreadRng::default();
+ let mut rng = rand::rng();
// Generate size between 1B..16MB.
- let size = rng.gen_range(1..16 * 1024 * 1024);
+ let size = rng.random_range(1..16 * 1024 * 1024);
let mut content = vec![0; size];
rng.fill_bytes(&mut content);
content
}
fn gen_fixed_bytes(size: usize) -> Vec<u8> {
- let mut rng = ThreadRng::default();
+ let mut rng = rand::rng();
let mut content = vec![0; size];
rng.fill_bytes(&mut content);
content
diff --git a/core/core/src/types/write/writer.rs b/core/core/src/types/write/writer.rs
index 98743c1c6..ae9c71837 100644
--- a/core/core/src/types/write/writer.rs
+++ b/core/core/src/types/write/writer.rs
@@ -380,17 +380,15 @@ impl Writer {
#[cfg(test)]
mod tests {
use bytes::{Buf, Bytes};
- use rand::Rng;
- use rand::RngCore;
- use rand::rngs::ThreadRng;
+ use rand::{Rng, RngExt};
use crate::Operator;
use crate::services;
fn gen_random_bytes() -> Vec<u8> {
- let mut rng = ThreadRng::default();
+ let mut rng = rand::rng();
// Generate size between 1B..16MB.
- let size = rng.gen_range(1..16 * 1024 * 1024);
+ let size = rng.random_range(1..16 * 1024 * 1024);
let mut content = vec![0; size];
rng.fill_bytes(&mut content);
content
diff --git a/core/edge/file_write_on_full_disk/src/main.rs b/core/edge/file_write_on_full_disk/src/main.rs
index ffd2298de..c823b8e5f 100644
--- a/core/edge/file_write_on_full_disk/src/main.rs
+++ b/core/edge/file_write_on_full_disk/src/main.rs
@@ -21,6 +21,7 @@ use opendal::Operator;
use opendal::Result;
use opendal::services::Fs;
use rand::prelude::*;
+use rand::rng;
#[tokio::main]
async fn main() -> Result<()> {
@@ -28,9 +29,9 @@ async fn main() -> Result<()> {
Fs::default().root(&env::var("OPENDAL_FS_ROOT").expect("root must be set for this test"));
let op = Operator::new(builder)?.finish();
- let size = thread_rng().gen_range(512 * 1024 + 1..4 * 1024 * 1024);
+ let size = rng().random_range(512 * 1024 + 1..4 * 1024 * 1024);
let mut bs = vec![0; size];
- thread_rng().fill_bytes(&mut bs);
+ rng().fill_bytes(&mut bs);
let result = op.write("/test", bs).await;
// Write file with size > 512KB should fail
diff --git a/core/layers/chaos/src/lib.rs b/core/layers/chaos/src/lib.rs
index 5fcf891a9..c382961c4 100644
--- a/core/layers/chaos/src/lib.rs
+++ b/core/layers/chaos/src/lib.rs
@@ -86,7 +86,7 @@ impl<A: Access> Layer<A> for ChaosLayer {
fn layer(&self, inner: A) -> Self::LayeredAccess {
ChaosAccessor {
inner,
- rng: StdRng::from_entropy(),
+ rng: Arc::new(Mutex::new(rand::make_rng())),
error_ratio: self.error_ratio,
}
}
@@ -96,7 +96,7 @@ impl<A: Access> Layer<A> for ChaosLayer {
#[derive(Debug)]
pub struct ChaosAccessor<A> {
inner: A,
- rng: StdRng,
+ rng: Arc<Mutex<StdRng>>,
error_ratio: f64,
}
@@ -113,10 +113,12 @@ impl<A: Access> LayeredAccess for ChaosAccessor<A> {
}
async fn read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::Reader)> {
- self.inner
- .read(path, args)
- .await
- .map(|(rp, r)| (rp, ChaosReader::new(r, self.rng.clone(), self.error_ratio)))
+ self.inner.read(path, args).await.map(|(rp, r)| {
+ (
+ rp,
+ ChaosReader::new(r, Arc::clone(&self.rng), self.error_ratio),
+ )
+ })
}
async fn write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::Writer)> {
@@ -141,10 +143,10 @@ pub struct ChaosReader<R> {
}
impl<R> ChaosReader<R> {
- fn new(inner: R, rng: StdRng, error_ratio: f64) -> Self {
+ fn new(inner: R, rng: Arc<Mutex<StdRng>>, error_ratio: f64) -> Self {
Self {
inner,
- rng: Arc::new(Mutex::new(rng)),
+ rng,
error_ratio,
}
}
@@ -152,8 +154,8 @@ impl<R> ChaosReader<R> {
/// If I feel lucky, we can return the correct response. Otherwise,
/// we need to generate an error.
fn i_feel_lucky(&self) -> bool {
- let point = self.rng.lock().unwrap().gen_range(0..100);
- point >= (self.error_ratio * 100.0) as i32
+ let point: u32 = self.rng.lock().unwrap().random_range(0..100);
+ point >= (self.error_ratio * 100.0) as u32
}
fn unexpected_eof() -> Error {
diff --git a/core/services/compfs/src/core.rs b/core/services/compfs/src/core.rs
index 1f30ad327..1fcb13d56 100644
--- a/core/services/compfs/src/core.rs
+++ b/core/services/compfs/src/core.rs
@@ -97,17 +97,16 @@ impl CompfsCore {
#[cfg(test)]
mod tests {
use bytes::Bytes;
- use rand::Rng;
- use rand::thread_rng;
+ use rand::{RngExt, rng};
use super::*;
fn setup_buffer() -> (CompfsBuffer, usize, Bytes) {
- let mut rng = thread_rng();
+ let mut rng = rng();
let bs = (0..100)
.map(|_| {
- let len = rng.gen_range(1..100);
+ let len = rng.random_range(1..100);
let mut buf = vec![0; len];
rng.fill(&mut buf[..]);
Bytes::from(buf)
diff --git a/core/testkit/src/read.rs b/core/testkit/src/read.rs
index 66b046d95..5454edb28 100644
--- a/core/testkit/src/read.rs
+++ b/core/testkit/src/read.rs
@@ -17,8 +17,8 @@
use bytes::Bytes;
use opendal_core::*;
-use rand::RngCore;
-use rand::thread_rng;
+use rand::Rng;
+use rand::rng;
use crate::utils::sha256_digest;
@@ -45,7 +45,7 @@ impl ReadChecker {
/// It's by design that we use a random generator to generate the raw data. The content of data
/// is not important, we only care about the correctness of the read process.
pub fn new(size: usize) -> Self {
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut data = vec![0; size];
rng.fill_bytes(&mut data);
diff --git a/core/testkit/src/write.rs b/core/testkit/src/write.rs
index 821401a1d..13925eb1f 100644
--- a/core/testkit/src/write.rs
+++ b/core/testkit/src/write.rs
@@ -17,8 +17,8 @@
use bytes::Bytes;
use bytes::BytesMut;
-use rand::RngCore;
-use rand::thread_rng;
+use rand::Rng;
+use rand::rng;
use crate::utils::sha256_digest;
@@ -42,7 +42,7 @@ pub struct WriteChecker {
impl WriteChecker {
/// Create a new WriteChecker with given size.
pub fn new(size: Vec<usize>) -> Self {
- let mut rng = thread_rng();
+ let mut rng = rng();
let mut chunks = Vec::with_capacity(size.len());
diff --git a/core/tests/behavior/utils.rs b/core/tests/behavior/utils.rs
index 78ecf82ae..73f2c54a0 100644
--- a/core/tests/behavior/utils.rs
+++ b/core/tests/behavior/utils.rs
@@ -24,8 +24,9 @@ use libtest_mimic::Trial;
use opendal::raw::*;
use opendal::tests::TEST_RUNTIME;
use opendal::*;
-use rand::distributions::uniform::SampleRange;
+use rand::distr::uniform::SampleRange;
use rand::prelude::*;
+use rand::rng;
use sha2::Digest;
use sha2::Sha256;
@@ -41,9 +42,9 @@ pub fn sha256_digest(data: impl AsRef<[u8]>) -> String {
}
pub fn gen_bytes_with_range(range: impl SampleRange<usize>) -> (Vec<u8>, usize) {
- let mut rng = thread_rng();
+ let mut rng = rng();
- let size = rng.gen_range(range);
+ let size = rng.random_range(range);
let mut content = vec![0; size];
rng.fill_bytes(&mut content);
@@ -62,11 +63,11 @@ pub fn gen_fixed_bytes(size: usize) -> Vec<u8> {
}
pub fn gen_offset_length(size: usize) -> (u64, u64) {
- let mut rng = thread_rng();
+ let mut rng = rng();
// Make sure at least one byte is read.
- let offset = rng.gen_range(0..size - 1);
- let length = rng.gen_range(1..(size - offset));
+ let offset = rng.random_range(0..size - 1);
+ let length = rng.random_range(1..(size - offset));
(offset as u64, length as u64)
}
@@ -171,9 +172,9 @@ impl Fixture {
let path = path.into();
self.paths.lock().unwrap().push(path.clone());
- let mut rng = thread_rng();
+ let mut rng = rng();
- let size = rng.gen_range(range);
+ let size = rng.random_range(range);
let mut content = vec![0; size];
rng.fill_bytes(&mut content);
diff --git a/integrations/object_store/Cargo.toml b/integrations/object_store/Cargo.toml
index d3c6b88f9..29c8fea07 100644
--- a/integrations/object_store/Cargo.toml
+++ b/integrations/object_store/Cargo.toml
@@ -58,7 +58,7 @@ opendal = { version = "0.56.0", path = "../../core", features = [
"services-s3",
"tests",
] }
-rand = "0.8.5"
+rand = "0.10.1"
tokio = { version = "1", features = ["fs", "macros", "rt-multi-thread"] }
url = "2.5.2"
uuid = "1.11.0"
diff --git a/integrations/object_store/src/store.rs b/integrations/object_store/src/store.rs
index e9a5bbf77..ed8f43732 100644
--- a/integrations/object_store/src/store.rs
+++ b/integrations/object_store/src/store.rs
@@ -714,6 +714,7 @@ mod tests {
use object_store::{ObjectStore, ObjectStoreExt, WriteMultipart};
use opendal::services;
use rand::prelude::*;
+ use rand::rng;
use std::sync::Arc;
use super::*;
@@ -765,7 +766,7 @@ mod tests {
let op = Operator::new(services::Memory::default()).unwrap().finish();
let object_store: Arc<dyn ObjectStore> = Arc::new(OpendalStore::new(op));
- let mut rng = thread_rng();
+ let mut rng = rng();
// Case complete
let path: Path = "data/test_complete.txt".into();
@@ -774,9 +775,9 @@ mod tests {
let mut write = WriteMultipart::new(upload);
let mut all_bytes = vec![];
- let round = rng.gen_range(1..=1024);
+ let round = rng.random_range(1..=1024);
for _ in 0..round {
- let size = rng.gen_range(1..=1024);
+ let size = rng.random_range(1..=1024);
let mut bytes = vec![0; size];
rng.fill_bytes(&mut bytes);
diff --git a/integrations/parquet/Cargo.toml b/integrations/parquet/Cargo.toml
index 2cd1df3dc..3c282e306 100644
--- a/integrations/parquet/Cargo.toml
+++ b/integrations/parquet/Cargo.toml
@@ -43,7 +43,7 @@ opendal = { version = "0.56.0", path = "../../core", features = [
"services-memory",
"services-s3",
] }
-rand = "0.8.5"
+rand = "0.10.1"
tokio = { version = "1", features = ["fs", "macros", "rt-multi-thread"] }
[[example]]
diff --git a/integrations/parquet/src/async_reader.rs b/integrations/parquet/src/async_reader.rs
index 13821fdf7..cd47f8912 100644
--- a/integrations/parquet/src/async_reader.rs
+++ b/integrations/parquet/src/async_reader.rs
@@ -171,7 +171,7 @@ impl AsyncFileReader for AsyncReader {
mod tests {
use futures::StreamExt;
use opendal::{Operator, services};
- use rand::{Rng, distributions::Alphanumeric};
+ use rand::{RngExt, distr::Alphanumeric};
use crate::{AsyncReader, AsyncWriter, async_reader::PREFETCH_FOOTER_SIZE};
use std::sync::Arc;
@@ -208,7 +208,7 @@ mod tests {
}
fn gen_fixed_string(size: usize) -> String {
- rand::thread_rng()
+ rand::rng()
.sample_iter(&Alphanumeric)
.take(size)
.map(char::from)