|
1 | 1 | use datalake::{ |
2 | 2 | data_manager::DataManagerImpl, |
3 | 3 | rocksdb_storage_engine::StorageEngineImpl, |
4 | | - StorageEngine, |
5 | | - DataChunkRef |
| 4 | + DataChunkRef, StorageEngine, |
6 | 5 | }; |
7 | 6 |
|
8 | 7 | enum Commands { |
@@ -33,30 +32,33 @@ fn prompt() -> requestty::Result<Commands> { |
33 | 32 |
|
34 | 33 | #[tokio::main] |
35 | 34 | async fn main() { |
36 | | - // TODO: Read conf from TOML file |
| 35 | + // TODO: Read conf from TOML file |
37 | 36 |
|
38 | 37 | // Initialize the data manager |
39 | 38 | let storage = |
40 | 39 | StorageEngineImpl::from_conf(Default::default()); |
41 | 40 |
|
42 | | - let data_manager: DataManagerImpl<StorageEngineImpl> = DataManagerImpl::new(storage); |
| 41 | + let data_manager: DataManagerImpl<StorageEngineImpl> = |
| 42 | + DataManagerImpl::new(storage); |
43 | 43 |
|
44 | 44 | // Assigned subset of data chunks in S3 |
45 | 45 | let vec_buckets_and_keys = [ |
46 | 46 | ("bucket1".to_string(), "key1".to_string()), |
47 | 47 | ("bucket2".to_string(), "key2".to_string()), |
48 | 48 | ("bucket3".to_string(), "key3".to_string()), |
| 49 | + ("bucket4".to_string(), "key4".to_string()), |
49 | 50 | ]; |
50 | 51 |
|
51 | 52 | // Spawn tasks to concurrently download and persist chunks |
52 | | - vec_buckets_and_keys.iter().for_each( |
53 | | - |(bucket, key)| { |
| 53 | + let mut tasks = vec_buckets_and_keys |
| 54 | + .iter() |
| 55 | + .map(|(bucket, key)| { |
54 | 56 | data_manager.spawn_download_chunk( |
55 | 57 | bucket.clone(), |
56 | 58 | key.clone(), |
57 | | - ); |
58 | | - }, |
59 | | - ); |
| 59 | + ) |
| 60 | + }) |
| 61 | + .collect::<Vec<_>>(); |
60 | 62 |
|
61 | 63 | // Serve queries for the downloaded data chunks |
62 | 64 | loop { |
@@ -95,16 +97,25 @@ async fn main() { |
95 | 97 | } |
96 | 98 | Commands::ScheduledDelete => { |
97 | 99 | // TODO: Read input from user |
| 100 | + |
98 | 101 | // schedule a chunk for deletion |
99 | 102 | let chunk_id = [0u8; 32]; |
100 | | - data_manager |
| 103 | + |
| 104 | + if let Some(handle) = data_manager |
101 | 105 | .spawn_delete_chunk(chunk_id) |
102 | | - .await; |
| 106 | + .await |
| 107 | + { |
| 108 | + tasks.push(handle); |
| 109 | + } |
103 | 110 | } |
104 | 111 | Commands::Exit => { |
105 | | - // Implement a graceful shutdown |
106 | | - todo!() |
| 112 | + break; |
107 | 113 | } |
108 | 114 | } |
109 | 115 | } |
| 116 | + |
| 117 | + // Wait until all spawned tasks complete |
| 118 | + for task in tasks { |
| 119 | + task.await.unwrap(); |
| 120 | + } |
110 | 121 | } |
0 commit comments