This commit is contained in:
weisd
2024-12-26 09:30:40 +08:00
parent 1af62dafa4
commit d2c71a5a47
+215 -215
View File
@@ -1090,260 +1090,260 @@ fn calc_common_counter(infos: &[DiskInfo], read_quorum: usize) -> u64 {
// list_path_raw // list_path_raw
#[cfg(test)] // #[cfg(test)]
mod test { // mod test {
use std::sync::Arc; // use std::sync::Arc;
use crate::cache_value::metacache_set::list_path_raw; // use crate::cache_value::metacache_set::list_path_raw;
use crate::cache_value::metacache_set::ListPathRawOptions; // use crate::cache_value::metacache_set::ListPathRawOptions;
use crate::disk::endpoint::Endpoint; // use crate::disk::endpoint::Endpoint;
use crate::disk::error::is_err_eof; // use crate::disk::error::is_err_eof;
use crate::disk::format::FormatV3; // use crate::disk::format::FormatV3;
use crate::disk::new_disk; // use crate::disk::new_disk;
use crate::disk::DiskAPI; // use crate::disk::DiskAPI;
use crate::disk::DiskOption; // use crate::disk::DiskOption;
use crate::disk::MetaCacheEntries; // use crate::disk::MetaCacheEntries;
use crate::disk::MetaCacheEntry; // use crate::disk::MetaCacheEntry;
use crate::disk::WalkDirOptions; // use crate::disk::WalkDirOptions;
use crate::endpoints::EndpointServerPools; // use crate::endpoints::EndpointServerPools;
use crate::error::Error; // use crate::error::Error;
use crate::metacache::writer::MetacacheReader; // use crate::metacache::writer::MetacacheReader;
use crate::set_disk::SetDisks; // use crate::set_disk::SetDisks;
use crate::store::ECStore; // use crate::store::ECStore;
use crate::store_list_objects::ListPathOptions; // use crate::store_list_objects::ListPathOptions;
use futures::future::join_all; // use futures::future::join_all;
use lock::namespace_lock::NsLockMap; // use lock::namespace_lock::NsLockMap;
use tokio::sync::broadcast; // use tokio::sync::broadcast;
use tokio::sync::mpsc; // use tokio::sync::mpsc;
use tokio::sync::RwLock; // use tokio::sync::RwLock;
use uuid::Uuid; // use uuid::Uuid;
#[tokio::test] // #[tokio::test]
async fn test_walk_dir() { // async fn test_walk_dir() {
let mut ep = Endpoint::try_from("/Users/weisd/project/weisd/s3-rustfs/target/volume/test").unwrap(); // let mut ep = Endpoint::try_from("/Users/weisd/project/weisd/s3-rustfs/target/volume/test").unwrap();
ep.pool_idx = 0; // ep.pool_idx = 0;
ep.set_idx = 0; // ep.set_idx = 0;
ep.disk_idx = 0; // ep.disk_idx = 0;
ep.is_local = true; // ep.is_local = true;
let disk = new_disk(&ep, &DiskOption::default()).await.expect("init disk fail"); // let disk = new_disk(&ep, &DiskOption::default()).await.expect("init disk fail");
// let disk = match LocalDisk::new(&ep, false).await { // // let disk = match LocalDisk::new(&ep, false).await {
// Ok(res) => res, // // Ok(res) => res,
// Err(err) => { // // Err(err) => {
// println!("LocalDisk::new err {:?}", err); // // println!("LocalDisk::new err {:?}", err);
// return; // // return;
// } // // }
// }; // // };
let (rd, mut wr) = tokio::io::duplex(64); // let (rd, mut wr) = tokio::io::duplex(64);
let job = tokio::spawn(async move { // let job = tokio::spawn(async move {
let opts = WalkDirOptions { // let opts = WalkDirOptions {
bucket: "dada".to_owned(), // bucket: "dada".to_owned(),
base_dir: "".to_owned(), // base_dir: "".to_owned(),
recursive: true, // recursive: true,
..Default::default() // ..Default::default()
}; // };
println!("walk opts {:?}", opts); // println!("walk opts {:?}", opts);
if let Err(err) = disk.walk_dir(opts, &mut wr).await { // if let Err(err) = disk.walk_dir(opts, &mut wr).await {
println!("walk_dir err {:?}", err); // println!("walk_dir err {:?}", err);
} // }
}); // });
let job2 = tokio::spawn(async move { // let job2 = tokio::spawn(async move {
let mut mrd = MetacacheReader::new(rd); // let mut mrd = MetacacheReader::new(rd);
loop { // loop {
match mrd.peek().await { // match mrd.peek().await {
Ok(res) => { // Ok(res) => {
if let Some(info) = res { // if let Some(info) = res {
println!("info {:?}", info.name) // println!("info {:?}", info.name)
} else { // } else {
break; // break;
} // }
} // }
Err(err) => { // Err(err) => {
if is_err_eof(&err) { // if is_err_eof(&err) {
break; // break;
} // }
println!("get err {:?}", err); // println!("get err {:?}", err);
break; // break;
} // }
} // }
} // }
}); // });
join_all(vec![job, job2]).await; // join_all(vec![job, job2]).await;
} // }
#[tokio::test] // #[tokio::test]
async fn test_list_path_raw() { // async fn test_list_path_raw() {
let mut ep = Endpoint::try_from("/Users/weisd/project/weisd/s3-rustfs/target/volume/test").unwrap(); // let mut ep = Endpoint::try_from("/Users/weisd/project/weisd/s3-rustfs/target/volume/test").unwrap();
ep.pool_idx = 0; // ep.pool_idx = 0;
ep.set_idx = 0; // ep.set_idx = 0;
ep.disk_idx = 0; // ep.disk_idx = 0;
ep.is_local = true; // ep.is_local = true;
let disk = new_disk(&ep, &DiskOption::default()).await.expect("init disk fail"); // let disk = new_disk(&ep, &DiskOption::default()).await.expect("init disk fail");
// let disk = match LocalDisk::new(&ep, false).await { // // let disk = match LocalDisk::new(&ep, false).await {
// Ok(res) => res, // // Ok(res) => res,
// Err(err) => { // // Err(err) => {
// println!("LocalDisk::new err {:?}", err); // // println!("LocalDisk::new err {:?}", err);
// return; // // return;
// } // // }
// }; // // };
let (_, rx) = broadcast::channel(1); // let (_, rx) = broadcast::channel(1);
let bucket = "dada".to_owned(); // let bucket = "dada".to_owned();
let forward_to = None; // let forward_to = None;
let disks = vec![Some(disk)]; // let disks = vec![Some(disk)];
let fallback_disks = Vec::new(); // let fallback_disks = Vec::new();
list_path_raw( // list_path_raw(
rx, // rx,
ListPathRawOptions { // ListPathRawOptions {
disks, // disks,
fallback_disks, // fallback_disks,
bucket, // bucket,
path: "".to_owned(), // path: "".to_owned(),
recursice: true, // recursice: true,
forward_to, // forward_to,
min_disks: 1, // min_disks: 1,
report_not_found: false, // report_not_found: false,
agreed: Some(Box::new(move |entry: MetaCacheEntry| { // agreed: Some(Box::new(move |entry: MetaCacheEntry| {
Box::pin(async move { println!("get entry: {}", entry.name) }) // Box::pin(async move { println!("get entry: {}", entry.name) })
})), // })),
partial: Some(Box::new(move |entries: MetaCacheEntries, _: &[Option<Error>]| { // partial: Some(Box::new(move |entries: MetaCacheEntries, _: &[Option<Error>]| {
Box::pin(async move { println!("get entries: {:?}", entries) }) // Box::pin(async move { println!("get entries: {:?}", entries) })
})), // })),
finished: None, // finished: None,
..Default::default() // ..Default::default()
}, // },
) // )
.await // .await
.unwrap(); // .unwrap();
} // }
#[tokio::test] // #[tokio::test]
async fn test_set_list_path() { // async fn test_set_list_path() {
let mut ep = Endpoint::try_from("/Users/weisd/project/weisd/s3-rustfs/target/volume/test").unwrap(); // let mut ep = Endpoint::try_from("/Users/weisd/project/weisd/s3-rustfs/target/volume/test").unwrap();
ep.pool_idx = 0; // ep.pool_idx = 0;
ep.set_idx = 0; // ep.set_idx = 0;
ep.disk_idx = 0; // ep.disk_idx = 0;
ep.is_local = true; // ep.is_local = true;
let disk = new_disk(&ep, &DiskOption::default()).await.expect("init disk fail"); // let disk = new_disk(&ep, &DiskOption::default()).await.expect("init disk fail");
let _ = disk.set_disk_id(Some(Uuid::new_v4())).await; // let _ = disk.set_disk_id(Some(Uuid::new_v4())).await;
let set = SetDisks { // let set = SetDisks {
lockers: Vec::new(), // lockers: Vec::new(),
locker_owner: String::new(), // locker_owner: String::new(),
ns_mutex: Arc::new(RwLock::new(NsLockMap::new(false))), // ns_mutex: Arc::new(RwLock::new(NsLockMap::new(false))),
disks: RwLock::new(vec![Some(disk)]), // disks: RwLock::new(vec![Some(disk)]),
set_endpoints: Vec::new(), // set_endpoints: Vec::new(),
set_drive_count: 1, // set_drive_count: 1,
default_parity_count: 0, // default_parity_count: 0,
set_index: 0, // set_index: 0,
pool_index: 0, // pool_index: 0,
format: FormatV3::new(1, 1), // format: FormatV3::new(1, 1),
}; // };
let (_tx, rx) = broadcast::channel(1); // let (_tx, rx) = broadcast::channel(1);
let bucket = "dada".to_owned(); // let bucket = "dada".to_owned();
let opts = ListPathOptions { // let opts = ListPathOptions {
bucket, // bucket,
recursive: true, // recursive: true,
..Default::default() // ..Default::default()
}; // };
let (sender, mut recv) = mpsc::channel(10); // let (sender, mut recv) = mpsc::channel(10);
set.list_path(rx, opts, sender).await.unwrap(); // set.list_path(rx, opts, sender).await.unwrap();
while let Some(entry) = recv.recv().await { // while let Some(entry) = recv.recv().await {
println!("get entry {:?}", entry.name) // println!("get entry {:?}", entry.name)
} // }
} // }
#[tokio::test] // #[tokio::test]
async fn test_list_merged() { // async fn test_list_merged() {
let server_address = "localhost:9000"; // let server_address = "localhost:9000";
let (endpoint_pools, _setup_type) = EndpointServerPools::from_volumes( // let (endpoint_pools, _setup_type) = EndpointServerPools::from_volumes(
server_address, // server_address,
vec!["/Users/weisd/project/weisd/s3-rustfs/target/volume/test".to_string()], // vec!["/Users/weisd/project/weisd/s3-rustfs/target/volume/test".to_string()],
) // )
.unwrap(); // .unwrap();
let store = ECStore::new(server_address.to_string(), endpoint_pools.clone()) // let store = ECStore::new(server_address.to_string(), endpoint_pools.clone())
.await // .await
.unwrap(); // .unwrap();
let (_tx, rx) = broadcast::channel(1); // let (_tx, rx) = broadcast::channel(1);
let bucket = "dada".to_owned(); // let bucket = "dada".to_owned();
let opts = ListPathOptions { // let opts = ListPathOptions {
bucket, // bucket,
recursive: true, // recursive: true,
..Default::default() // ..Default::default()
}; // };
let (sender, mut recv) = mpsc::channel(10); // let (sender, mut recv) = mpsc::channel(10);
store.list_merged(rx, opts, sender).await.unwrap(); // store.list_merged(rx, opts, sender).await.unwrap();
while let Some(entry) = recv.recv().await { // while let Some(entry) = recv.recv().await {
println!("get entry {:?}", entry.name) // println!("get entry {:?}", entry.name)
} // }
} // }
#[tokio::test] // #[tokio::test]
async fn test_list_path() { // async fn test_list_path() {
let server_address = "localhost:9000"; // let server_address = "localhost:9000";
let (endpoint_pools, _setup_type) = EndpointServerPools::from_volumes( // let (endpoint_pools, _setup_type) = EndpointServerPools::from_volumes(
server_address, // server_address,
vec!["/Users/weisd/project/weisd/s3-rustfs/target/volume/test".to_string()], // vec!["/Users/weisd/project/weisd/s3-rustfs/target/volume/test".to_string()],
) // )
.unwrap(); // .unwrap();
let store = ECStore::new(server_address.to_string(), endpoint_pools.clone()) // let store = ECStore::new(server_address.to_string(), endpoint_pools.clone())
.await // .await
.unwrap(); // .unwrap();
let bucket = "dada".to_owned(); // let bucket = "dada".to_owned();
let opts = ListPathOptions { // let opts = ListPathOptions {
bucket, // bucket,
recursive: true, // recursive: true,
limit: 100, // limit: 100,
..Default::default() // ..Default::default()
}; // };
let ret = store.list_path(&opts).await.unwrap(); // let ret = store.list_path(&opts).await.unwrap();
println!("ret {:?}", ret); // println!("ret {:?}", ret);
} // }
// #[tokio::test] // // #[tokio::test]
// async fn test_list_objects_v2() { // // async fn test_list_objects_v2() {
// let server_address = "localhost:9000"; // // let server_address = "localhost:9000";
// let (endpoint_pools, _setup_type) = EndpointServerPools::from_volumes( // // let (endpoint_pools, _setup_type) = EndpointServerPools::from_volumes(
// server_address, // // server_address,
// vec!["/Users/weisd/project/weisd/s3-rustfs/target/volume/test".to_string()], // // vec!["/Users/weisd/project/weisd/s3-rustfs/target/volume/test".to_string()],
// ) // // )
// .unwrap(); // // .unwrap();
// let store = ECStore::new(server_address.to_string(), endpoint_pools.clone()) // // let store = ECStore::new(server_address.to_string(), endpoint_pools.clone())
// .await // // .await
// .unwrap(); // // .unwrap();
// let ret = store.list_objects_v2("data", "", "", "", 100, false, "").await.unwrap(); // // let ret = store.list_objects_v2("data", "", "", "", 100, false, "").await.unwrap();
// println!("ret {:?}", ret); // // println!("ret {:?}", ret);
// } // // }
} // }