code cleanup
This commit is contained in:
parent
022fb421b2
commit
12bb93b3ad
|
@ -50,6 +50,48 @@ fn u256_to_prefix(digest: &[u8; 32]) -> PathBuf {
|
||||||
path.into()
|
path.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn lock_file<P: AsRef<Path>>(filename: P, timeout: usize) -> Result<File, Error> {
|
||||||
|
|
||||||
|
let path = filename.as_ref();
|
||||||
|
let lockfile = match OpenOptions::new()
|
||||||
|
.create(true)
|
||||||
|
.append(true)
|
||||||
|
.open(path) {
|
||||||
|
Ok(file) => file,
|
||||||
|
Err(err) => bail!("Unable to open lock {:?} - {}",
|
||||||
|
path, err),
|
||||||
|
};
|
||||||
|
|
||||||
|
let fd = lockfile.as_raw_fd();
|
||||||
|
|
||||||
|
let now = std::time::SystemTime::now();
|
||||||
|
let mut print_msg = true;
|
||||||
|
loop {
|
||||||
|
match flock(fd, FlockArg::LockExclusiveNonblock) {
|
||||||
|
Ok(_) => break,
|
||||||
|
Err(_) => {
|
||||||
|
if print_msg {
|
||||||
|
print_msg = false;
|
||||||
|
eprintln!("trying to aquire lock...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match now.elapsed() {
|
||||||
|
Ok(elapsed) => {
|
||||||
|
if elapsed.as_secs() >= (timeout as u64) {
|
||||||
|
bail!("unable to aquire lock {:?} - got timeout", path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
bail!("unable to aquire lock {:?} - clock problems - {}", path, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::thread::sleep_ms(100);
|
||||||
|
}
|
||||||
|
Ok(lockfile)
|
||||||
|
}
|
||||||
|
|
||||||
impl ChunkStore {
|
impl ChunkStore {
|
||||||
|
|
||||||
fn chunk_dir<P: AsRef<Path>>(path: P) -> PathBuf {
|
fn chunk_dir<P: AsRef<Path>>(path: P) -> PathBuf {
|
||||||
|
@ -98,45 +140,7 @@ impl ChunkStore {
|
||||||
let mut lockfile_path = base.clone();
|
let mut lockfile_path = base.clone();
|
||||||
lockfile_path.push(".lock");
|
lockfile_path.push(".lock");
|
||||||
|
|
||||||
let lockfile = match OpenOptions::new()
|
let lockfile = lock_file(lockfile_path, 10)?;
|
||||||
.create(true)
|
|
||||||
.append(true)
|
|
||||||
.open(&lockfile_path) {
|
|
||||||
Ok(file) => file,
|
|
||||||
Err(err) => bail!("unable to open chunk store lock file {:?} - {}",
|
|
||||||
lockfile_path, err),
|
|
||||||
};
|
|
||||||
|
|
||||||
let fd = lockfile.as_raw_fd();
|
|
||||||
|
|
||||||
let now = std::time::SystemTime::now();
|
|
||||||
let timeout = 10;
|
|
||||||
let mut print_msg = true;
|
|
||||||
loop {
|
|
||||||
match flock(fd, FlockArg::LockExclusiveNonblock) {
|
|
||||||
Ok(_) => break,
|
|
||||||
Err(_) => {
|
|
||||||
if print_msg {
|
|
||||||
print_msg = false;
|
|
||||||
eprintln!("trying to aquire lock...");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
match now.elapsed() {
|
|
||||||
Ok(elapsed) => {
|
|
||||||
if elapsed.as_secs() >= timeout {
|
|
||||||
bail!("unable to aquire chunk store lock {:?} - got timeout",
|
|
||||||
lockfile_path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
bail!("unable to aquire chunk store lock {:?} - clock problems - {}",
|
|
||||||
lockfile_path, err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::thread::sleep_ms(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(ChunkStore {
|
Ok(ChunkStore {
|
||||||
base,
|
base,
|
||||||
|
|
Loading…
Reference in New Issue