summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-11-06 18:22:11 +0100
committerMatthias Beyer <mail@beyermatthias.de>2018-11-06 18:35:17 +0100
commit88a4eee08760fcb59453f7b69f5d0b7ff300705d (patch)
treed91c25318c8caa362807d9bc5a1f0e34b1edb4a8
parentbecfcd41807bf65fb6f8543800bb57d7e8e93d7a (diff)
downloadimag-88a4eee08760fcb59453f7b69f5d0b7ff300705d.zip
imag-88a4eee08760fcb59453f7b69f5d0b7ff300705d.tar.gz
Adapt Store::get()/Store::create() to check cache before FS
With this change, the cache is tested before accessing the filesystem, which probably increases the speed if the cache has the entry, because we avoid the slow IO operation. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--lib/core/libimagstore/src/store.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/core/libimagstore/src/store.rs b/lib/core/libimagstore/src/store.rs
index 91cee86..36904a3 100644
--- a/lib/core/libimagstore/src/store.rs
+++ b/lib/core/libimagstore/src/store.rs
@@ -223,12 +223,12 @@ impl Store {
debug!("Creating id: '{}'", id);
let exists =
- self.backend.exists(&id.clone().into_pathbuf()?)? ||
self.entries
.read()
.map(|map| map.contains_key(&id))
.map_err(|_| Error::from(EM::LockError))
- .context(format_err!("CreateCallError: {}", id))?;
+ .context(format_err!("CreateCallError: {}", id))? ||
+ self.backend.exists(&id.clone().into_pathbuf()?)?;
if exists {
debug!("Entry exists: {:?}", id);
@@ -307,12 +307,13 @@ impl Store {
debug!("Getting id: '{}'", id);
let exists =
- self.backend.exists(&id.clone().into_pathbuf()?)? ||
self.entries
.read()
.map(|map| map.contains_key(&id))
.map_err(|_| Error::from(EM::LockError))
- .context(format_err!("CreateCallError: {}", id))?;
+ .context(format_err!("CreateCallError: {}", id))? ||
+ self.backend.exists(&id.clone().into_pathbuf()?)?;
+
if !exists {
debug!("Does not exist in internal cache or filesystem: {:?}", id);