use goosefs_sdk::client::MasterClient;
use goosefs_sdk::config::GoosefsConfig;
use goosefs_sdk::error::Result;
use goosefs_sdk::proto::grpc::file::CreateFilePOptions;
#[tokio::main]
async fn main() -> Result<()> {
println!("Connecting to Goosefs Master...");
let config = GoosefsConfig::new("127.0.0.1:9200");
let master = MasterClient::connect(&config).await?;
println!("Connected!");
println!("\nCreating test-demo directory...");
match master.create_directory("/test-demo", true).await {
Ok(_) => println!("Directory /test-demo created"),
Err(e) => println!("Failed to create directory or it already exists: {:?}", e),
}
println!("\nCleaning up existing files...");
match master.delete("/test-demo/world.txt", false).await {
Ok(_) => println!("Deleted existing world.txt"),
Err(e) => println!("Failed to delete world.txt or file does not exist: {:?}", e),
}
println!("\nCreating world.txt...");
let mut create_options = CreateFilePOptions::default();
create_options.block_size_bytes = Some(64 * 1024 * 1024); master
.create_file("/test-demo/world.txt", create_options)
.await?;
println!("File /test-demo/world.txt created");
let fake_length = 169i64;
println!("\nMarking file as complete (metadata only)...");
master
.complete_file("/test-demo/world.txt", Some(fake_length), None)
.await?;
println!(
"File metadata marked complete, length set to {} bytes",
fake_length
);
println!("\nGetting file status...");
let file_info = master.get_status("/test-demo/world.txt").await?;
println!(
"File length: {:?} bytes (note: this is metadata-only length, no actual data blocks on Workers)",
file_info.length
);
println!("\n✅ world.txt file metadata created!");
println!(
"⚠️ Note: this example only demonstrates CreateFile + CompleteFile metadata operations."
);
println!(
" The file exists in the Master namespace, but has no actual data blocks on Workers."
);
println!(" Running `goosefs fs cat /test-demo/world.txt` will hang because no data blocks can be read.");
println!(" To create a readable/writable file, use the highlevel_file_rw example:");
println!(" cargo run --example highlevel_file_rw");
Ok(())
}