#[cfg(feature = "rados_striper")]
use {ceph::ceph as ceph_helpers, ceph::error::RadosError, nix::errno::Errno, std::env, std::str};
#[cfg(not(feature = "rados_striper"))]
fn main() {}
#[cfg(feature = "rados_striper")]
fn main() {
let user_id = "admin";
let config_file = env::var("CEPH_CONF").unwrap_or("/etc/ceph/ceph.conf".to_string());
let pool_name = "ceph-rust-test";
println!("Connecting to ceph");
let cluster = ceph_helpers::connect_to_ceph(user_id, &config_file).unwrap();
println!("Creating pool {}", pool_name);
match cluster.rados_create_pool(pool_name) {
Ok(_) => {}
Err(RadosError::ApiError(Errno::EEXIST)) => {
cluster.rados_delete_pool(pool_name).unwrap();
cluster.rados_create_pool(pool_name).unwrap();
}
Err(err) => panic!("{:?}", err),
}
let object_name = "ceph-rust-test-object";
{
println!("Creating ioctx");
let ioctx = cluster.get_rados_ioctx(pool_name).unwrap();
println!("Creating rados striper");
let rados_striper = ioctx.get_rados_striper().unwrap();
println!("Writing test object");
rados_striper
.rados_object_write(object_name, "lorem".as_bytes(), 0)
.unwrap();
rados_striper
.rados_object_write(object_name, " ipsum".as_bytes(), 5)
.unwrap();
}
{
println!("Creating ioctx");
let ioctx = cluster.get_rados_ioctx(pool_name).unwrap();
println!("Creating rados striper");
let rados_striper = ioctx.get_rados_striper().unwrap();
println!("Getting test object stat");
let (size, _) = rados_striper.rados_object_stat(object_name).unwrap();
let mut read_buf = vec![0; size as usize];
println!("Reading test object");
rados_striper
.rados_object_read(object_name, &mut read_buf, 0)
.unwrap();
let read_buf_str = str::from_utf8(&read_buf).unwrap();
assert_eq!(read_buf_str, "lorem ipsum");
}
println!("Deleting pool {}", pool_name);
cluster.rados_delete_pool(pool_name).unwrap();
}