Fix Store::get() to not check FS but internal hashmap

This commit is contained in:
Matthias Beyer 2016-09-20 16:52:14 +02:00
parent 4f2019a20a
commit babf74e1e5

View file

@ -459,11 +459,20 @@ impl Store {
/// ///
/// This executes the {pre,post}_retrieve_aspects hooks. /// This executes the {pre,post}_retrieve_aspects hooks.
pub fn get<'a, S: IntoStoreId + Clone>(&'a self, id: S) -> Result<Option<FileLockEntry<'a>>> { pub fn get<'a, S: IntoStoreId + Clone>(&'a self, id: S) -> Result<Option<FileLockEntry<'a>>> {
let id_copy = try!(id.clone().into_storeid()).with_base(self.path().clone()); let id = try!(id.into_storeid()).with_base(self.path().clone());
if !id_copy.exists() {
debug!("Does not exist: {:?}", id_copy); let exists = try!(self.entries
.read()
.map(|map| map.contains_key(&id))
.map_err(|_| SE::new(SEK::LockPoisoned, None))
.map_err_into(SEK::GetCallError)
);
if !exists && !id.exists() {
debug!("Does not exist in internal cache or filesystem: {:?}", id);
return Ok(None); return Ok(None);
} }
self.retrieve(id).map(Some).map_err_into(SEK::GetCallError) self.retrieve(id).map(Some).map_err_into(SEK::GetCallError)
} }