parallel_processor/memory_fs/
flushable_buffer.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::memory_fs::allocator::AllocatedChunk;
use crate::memory_fs::file::internal::FileChunk;
use parking_lot::lock_api::ArcRwLockWriteGuard;
use parking_lot::{Mutex, RawRwLock};
use std::sync::Arc;

use super::file::handle::FileHandle;

pub struct FlushableItem {
    pub underlying_file: Arc<Mutex<FileHandle>>,
    pub mode: FileFlushMode,
}
pub enum FileFlushMode {
    Append {
        chunk: ArcRwLockWriteGuard<RawRwLock, FileChunk>,
    },
    WriteAt {
        buffer: AllocatedChunk,
        offset: u64,
    },
}

// impl Drop for FlushableItem {
//     fn drop(&mut self) {
//         if Arc::strong_count(&self.underlying_file) == 1 {
//             unsafe {
//                 FILES_FLUSH_HASH_MAP
//                     .as_mut()
//                     .unwrap()
//                     .lock()
//                     .entry(self.underlying_file.0.clone())
//                     .or_insert(Vec::new())
//                     .push(self.underlying_file.clone())
//             }
//         }
//
//         BUFFER_MANAGER.notify_drop()
//     }
// }