ensure the target folder doesn't exist before renaming (#2074)

This commit is contained in:
Robert Habermeier 2016-09-13 10:33:03 +02:00 committed by Arkadiy Paronyan
parent bc9b7cbcc1
commit 83ddce011d

View File

@ -354,6 +354,10 @@ impl Service {
// destroy the old snapshot reader. // destroy the old snapshot reader.
*reader = None; *reader = None;
if snapshot_dir.exists() {
try!(fs::remove_dir_all(&snapshot_dir));
}
try!(fs::rename(temp_dir, &snapshot_dir)); try!(fs::rename(temp_dir, &snapshot_dir));
*reader = Some(try!(LooseReader::new(snapshot_dir))); *reader = Some(try!(LooseReader::new(snapshot_dir)));
@ -428,16 +432,11 @@ impl Service {
let snapshot_dir = self.snapshot_dir(); let snapshot_dir = self.snapshot_dir();
trace!(target: "snapshot", "removing old snapshot dir at {}", snapshot_dir.to_string_lossy()); if snapshot_dir.exists() {
if let Err(e) = fs::remove_dir_all(&snapshot_dir) { trace!(target: "snapshot", "removing old snapshot dir at {}", snapshot_dir.to_string_lossy());
match e.kind() { try!(fs::remove_dir_all(&snapshot_dir));
ErrorKind::NotFound => {}
_ => return Err(e.into()),
}
} }
try!(fs::create_dir(&snapshot_dir));
trace!(target: "snapshot", "copying restored snapshot files over"); trace!(target: "snapshot", "copying restored snapshot files over");
try!(fs::rename(self.temp_recovery_dir(), &snapshot_dir)); try!(fs::rename(self.temp_recovery_dir(), &snapshot_dir));