This is an automated email from the ASF dual-hosted git repository.

tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new 65c24d6cee Faster stream_get test (#4685)
65c24d6cee is described below

commit 65c24d6cee94b1e08647e096a53fbf5237f91002
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Fri Aug 11 16:19:14 2023 +0100

    Faster stream_get test (#4685)
---
 object_store/src/lib.rs | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/object_store/src/lib.rs b/object_store/src/lib.rs
index bb4ba5c7d9..cf7e47998a 100644
--- a/object_store/src/lib.rs
+++ b/object_store/src/lib.rs
@@ -959,8 +959,7 @@ mod test_util {
 mod tests {
     use super::*;
     use crate::test_util::flatten_list_stream;
-    use bytes::{BufMut, BytesMut};
-    use itertools::Itertools;
+    use rand::{thread_rng, Rng};
     use tokio::io::AsyncWriteExt;
 
     pub(crate) async fn put_get_delete_list(storage: &DynObjectStore) {
@@ -1380,27 +1379,27 @@ mod tests {
         }
     }
 
-    fn get_random_bytes(len: usize) -> Bytes {
-        use rand::Rng;
-        let mut rng = rand::thread_rng();
-        let mut bytes = BytesMut::with_capacity(len);
-        for _ in 0..len {
-            bytes.put_u8(rng.gen());
+    /// Returns a chunk of length `chunk_length`
+    fn get_chunk(chunk_length: usize) -> Bytes {
+        let mut data = vec![0_u8; chunk_length];
+        let mut rng = thread_rng();
+        // Set a random selection of bytes
+        for _ in 0..1000 {
+            data[rng.gen_range(0..chunk_length)] = rng.gen();
         }
-        bytes.freeze()
+        data.into()
     }
 
-    fn get_vec_of_bytes(chunk_length: usize, num_chunks: usize) -> Vec<Bytes> {
-        std::iter::repeat(get_random_bytes(chunk_length))
-            .take(num_chunks)
-            .collect()
+    /// Returns `num_chunks` of length `chunks`
+    fn get_chunks(chunk_length: usize, num_chunks: usize) -> Vec<Bytes> {
+        (0..num_chunks).map(|_| get_chunk(chunk_length)).collect()
     }
 
     pub(crate) async fn stream_get(storage: &DynObjectStore) {
         let location = Path::from("test_dir/test_upload_file.txt");
 
         // Can write to storage
-        let data = get_vec_of_bytes(5_000, 10);
+        let data = get_chunks(5_000, 10);
         let bytes_expected = data.concat();
         let (_, mut writer) = storage.put_multipart(&location).await.unwrap();
         for chunk in &data {
@@ -1427,7 +1426,7 @@ mod tests {
 
         // Can overwrite some storage
         // Sizes chosen to ensure we write three parts
-        let data = (0..7).map(|_| get_random_bytes(3_200_000)).collect_vec();
+        let data = get_chunks(3_200_000, 7);
         let bytes_expected = data.concat();
         let (_, mut writer) = storage.put_multipart(&location).await.unwrap();
         for chunk in &data {

Reply via email to