historypack: implement get_missing

Summary: Implements another piece of the HistoryStore API.

Reviewed By: markbt

Differential Revision: D9231396

fbshipit-source-id: b2949396eab999c46cf1a2c24fa7a329a5971682
This commit is contained in:
Durham Goode 2018-08-15 15:06:06 -07:00 committed by Facebook Github Bot
parent e41732f1e7
commit faa6b7a152

View File

@ -225,8 +225,11 @@ impl HistoryStore for HistoryPack {
unimplemented!();
}
fn get_missing(&self, _keys: &[Key]) -> Result<Vec<Key>> {
unimplemented!();
fn get_missing(&self, keys: &[Key]) -> Result<Vec<Key>> {
Ok(keys.iter()
.filter(|k| self.index.get_node_entry(k).is_err())
.map(|k| k.clone())
.collect())
}
fn get_node_info(&self, key: &Key) -> Result<NodeInfo> {
@ -329,6 +332,23 @@ mod tests {
}
}
#[test]
fn test_get_missing() {
let mut rng = ChaChaRng::from_seed([0u8; 32]);
let tempdir = TempDir::new().unwrap();
let (nodes, _) = get_nodes(&mut rng);
let pack = make_pack(&tempdir, &nodes);
let mut test_keys: Vec<Key> = nodes.keys().map(|k| k.clone()).collect();
let missing_key = Key::new(Box::new([9]), Node::random(&mut rng));
test_keys.push(missing_key.clone());
let missing = pack.get_missing(&test_keys[..]).unwrap();
assert_eq!(vec![missing_key], missing);
}
quickcheck! {
fn test_file_section_header_serialization(name: Vec<u8>, count: u32) -> bool {
let header = FileSectionHeader {