mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
revisionstore: search in local lfs store on prefetch
Summary: The pointer for a blob might very well be in the local store, so let's search in it. Reviewed By: DurhamG Differential Revision: D22565608 fbshipit-source-id: 925dd5718fc19e11a1ccaa0887bf5c477e85b2e5
This commit is contained in:
parent
e9b3f79b70
commit
f22575657c
@ -1375,18 +1375,27 @@ impl RemoteDataStore for LfsRemoteStore {
|
||||
fn prefetch(&self, keys: &[StoreKey]) -> Result<Vec<StoreKey>> {
|
||||
let mut not_found = Vec::new();
|
||||
|
||||
let stores = if let Some(local_store) = self.remote.local.as_ref() {
|
||||
vec![self.remote.shared.clone(), local_store.clone()]
|
||||
} else {
|
||||
vec![self.remote.shared.clone()]
|
||||
};
|
||||
|
||||
let mut obj_set = HashMap::new();
|
||||
let objs = keys
|
||||
.iter()
|
||||
.map(|k| {
|
||||
if let Some(pointer) = self.remote.shared.pointers.read().entry(k)? {
|
||||
if let Some(content_hash) = pointer.content_hashes.get(&ContentHashType::Sha256)
|
||||
{
|
||||
obj_set.insert(content_hash.clone().unwrap_sha256(), k.clone());
|
||||
return Ok(Some((
|
||||
content_hash.clone().unwrap_sha256(),
|
||||
pointer.size.try_into()?,
|
||||
)));
|
||||
for store in &stores {
|
||||
if let Some(pointer) = store.pointers.read().entry(k)? {
|
||||
if let Some(content_hash) =
|
||||
pointer.content_hashes.get(&ContentHashType::Sha256)
|
||||
{
|
||||
obj_set.insert(content_hash.clone().unwrap_sha256(), k.clone());
|
||||
return Ok(Some((
|
||||
content_hash.clone().unwrap_sha256(),
|
||||
pointer.size.try_into()?,
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user