src/backup/fixed_index.rs: store reference to file

Keep it open and locked while index is in use.
This commit is contained in:
Dietmar Maurer 2019-03-27 10:17:03 +01:00
parent c597a92c81
commit 10eea49d81
1 changed files with 4 additions and 1 deletions

View File

@ -7,6 +7,7 @@ use super::chunk_store::*;
use std::sync::Arc; use std::sync::Arc;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::fs::File;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::os::unix::io::AsRawFd; use std::os::unix::io::AsRawFd;
use uuid::Uuid; use uuid::Uuid;
@ -29,6 +30,7 @@ pub struct FixedIndexHeader {
pub struct FixedIndexReader { pub struct FixedIndexReader {
store: Arc<ChunkStore>, store: Arc<ChunkStore>,
_file: File,
filename: PathBuf, filename: PathBuf,
chunk_size: usize, chunk_size: usize,
pub size: usize, pub size: usize,
@ -55,7 +57,7 @@ impl FixedIndexReader {
let full_path = store.relative_path(path); 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) { 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); bail!("unable to get shared lock on {:?} - {}", full_path, err);
@ -110,6 +112,7 @@ impl FixedIndexReader {
Ok(Self { Ok(Self {
store, store,
filename: full_path, filename: full_path,
_file: file,
chunk_size, chunk_size,
size, size,
index: data, index: data,