src/backup/fixed_index.rs: store reference to file
Keep it open and locked while index is in use.
This commit is contained in:
		@ -7,6 +7,7 @@ use super::chunk_store::*;
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use std::io::{Read, Write};
 | 
			
		||||
use std::fs::File;
 | 
			
		||||
use std::path::{Path, PathBuf};
 | 
			
		||||
use std::os::unix::io::AsRawFd;
 | 
			
		||||
use uuid::Uuid;
 | 
			
		||||
@ -29,6 +30,7 @@ pub struct FixedIndexHeader {
 | 
			
		||||
 | 
			
		||||
pub struct FixedIndexReader {
 | 
			
		||||
    store: Arc<ChunkStore>,
 | 
			
		||||
    _file: File,
 | 
			
		||||
    filename: PathBuf,
 | 
			
		||||
    chunk_size: usize,
 | 
			
		||||
    pub size: usize,
 | 
			
		||||
@ -55,7 +57,7 @@ impl FixedIndexReader {
 | 
			
		||||
 | 
			
		||||
        let full_path = store.relative_path(path);
 | 
			
		||||
 | 
			
		||||
        let mut file = std::fs::File::open(&full_path)?;
 | 
			
		||||
        let mut file = File::open(&full_path)?;
 | 
			
		||||
 | 
			
		||||
        if let Err(err) = nix::fcntl::flock(file.as_raw_fd(), nix::fcntl::FlockArg::LockSharedNonblock) {
 | 
			
		||||
            bail!("unable to get shared lock on {:?} - {}", full_path, err);
 | 
			
		||||
@ -110,6 +112,7 @@ impl FixedIndexReader {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            store,
 | 
			
		||||
            filename: full_path,
 | 
			
		||||
            _file: file,
 | 
			
		||||
            chunk_size,
 | 
			
		||||
            size,
 | 
			
		||||
            index: data,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user