mononoke: add ManifoldBlobState

Summary:
Blobrepo state with file-based bookmarks and heads and manifold blobstore.
It will be used for eden server testing.

Reviewed By: sid0

Differential Revision: D6063728

fbshipit-source-id: f0542265af015d5c20db225ed6bf85cae954a3ab
This commit is contained in:
Stanislau Hlebik 2017-10-18 01:34:40 -07:00 committed by Facebook Github Bot
parent 13823f0f7e
commit d408fab739
2 changed files with 33 additions and 1 deletions

View File

@ -12,6 +12,7 @@ extern crate error_chain;
extern crate futures;
extern crate bincode;
extern crate bytes;
extern crate serde;
#[macro_use]
extern crate serde_derive;
@ -27,12 +28,14 @@ extern crate filebookmarks;
extern crate fileheads;
extern crate futures_ext;
extern crate heads;
extern crate manifoldblob;
extern crate memblob;
extern crate membookmarks;
extern crate memheads;
extern crate mercurial;
extern crate mercurial_types;
extern crate rocksblob;
extern crate tokio_core;
mod repo;
mod changeset;
@ -47,7 +50,7 @@ pub use errors::*;
pub use changeset::BlobChangeset;
pub use manifest::BlobManifest;
pub use repo::BlobRepo;
pub use state::{BlobState, FilesBlobState, MemBlobState, RocksBlobState};
pub use state::{BlobState, FilesBlobState, ManifoldBlobState, MemBlobState, RocksBlobState};
//
// TODO: (jsgf) T21597565 This is exposed here for blobimport -- don't use it for anything else.

View File

@ -9,15 +9,18 @@ use std::sync::Arc;
use blobstore::Blobstore;
use bookmarks::Bookmarks;
use bytes::Bytes;
use fileblob::Fileblob;
use filebookmarks::FileBookmarks;
use fileheads::FileHeads;
use heads::Heads;
use manifoldblob::ManifoldBlob;
use memblob::Memblob;
use membookmarks::MemBookmarks;
use memheads::MemHeads;
use mercurial_types::NodeHash;
use rocksblob::Rocksblob;
use tokio_core::reactor::Remote;
use errors::*;
@ -144,3 +147,29 @@ impl MemBlobState {
}
}
}
impl_blob_state! {
ManifoldBlobState {
heads: FileHeads<NodeHash>,
bookmarks: Arc<FileBookmarks<NodeHash>>,
blobstore: ManifoldBlob<String, Bytes>,
}
}
impl ManifoldBlobState {
pub fn new(path: &Path, remote: &Remote) -> Result<Self> {
let heads = FileHeads::open(path.join("heads"))
.chain_err(|| ErrorKind::StateOpen(StateOpenError::Heads))?;
let bookmarks = Arc::new(
FileBookmarks::open(path.join("books"))
.chain_err(|| ErrorKind::StateOpen(StateOpenError::Bookmarks))?,
);
// TODO(stash): is new_may_panic is the best option?
let blobstore = ManifoldBlob::new_may_panic("mononoke", remote);
Ok(ManifoldBlobState {
heads,
bookmarks,
blobstore,
})
}
}