mononoke: start myrouter before creating blobrepo

Summary:
Apiserver was failing to start up after D15762598. In this diff we started to
read censored blobs from xdb table. The problem was in that in apiserver we
didn't wait for myrouter to start up before we read censored blbos from the
table.

This diff fixes it

Reviewed By: krallin

Differential Revision: D15873817

fbshipit-source-id: 98550289a3c135c5f4a472206c6654e818ed54f4
This commit is contained in:
Stanislau Hlebik 2019-06-18 09:26:12 -07:00 committed by Facebook Github Bot
parent 5e4c97bb17
commit 7bf91fab61
3 changed files with 84 additions and 42 deletions

View File

@ -42,6 +42,7 @@ use prefixblob::PrefixBlobstore;
use rocksblob::Rocksblob;
use rocksdb;
use scuba::ScubaClient;
use sql_ext::myrouter_ready;
use sqlblob::Sqlblob;
use sqlfilenodes::{SqlConstructors, SqlFilenodes};
use std::iter::FromIterator;
@ -60,50 +61,56 @@ pub fn open_blobrepo(
myrouter_port: Option<u16>,
bookmarks_cache_ttl: Option<Duration>,
) -> BoxFuture<BlobRepo, Error> {
let uncensored_blobstore = make_blobstore(
repoid,
&storage_config.blobstore,
&storage_config.dbconfig,
myrouter_port,
);
myrouter_ready(storage_config.dbconfig.get_db_address(), myrouter_port)
.and_then(move |()| {
let uncensored_blobstore = make_blobstore(
repoid,
&storage_config.blobstore,
&storage_config.dbconfig,
myrouter_port,
);
let censored_blobs_store = result(match storage_config.dbconfig.clone() {
MetadataDBConfig::LocalDB { ref path } => {
SqlCensoredContentStore::with_sqlite_path(path.join("censored_contents"))
.map(|item| Arc::new(item))
}
MetadataDBConfig::Mysql {
db_address,
sharded_filenodes: _,
} => open_xdb::<SqlCensoredContentStore>(&db_address, myrouter_port),
});
let censored_blobs = censored_blobs_store.and_then(move |censored_store| {
censored_store
.get_all_censored_blobs()
.map_err(Error::from)
.map(HashMap::from_iter)
});
uncensored_blobstore
.join(censored_blobs)
.and_then(move |(uncensored_blobstore, censored_blobs)| {
let blobstore = Arc::new(CensoredBlob::new(uncensored_blobstore, censored_blobs));
match storage_config.dbconfig {
MetadataDBConfig::LocalDB { path } => new_local(logger, &path, blobstore, repoid),
let censored_blobs_store = result(match storage_config.dbconfig.clone() {
MetadataDBConfig::LocalDB { ref path } => {
SqlCensoredContentStore::with_sqlite_path(path.join("censored_contents"))
.map(|item| Arc::new(item))
}
MetadataDBConfig::Mysql {
db_address,
sharded_filenodes,
} => new_remote(
logger,
db_address,
sharded_filenodes,
blobstore,
repoid,
myrouter_port,
bookmarks_cache_ttl,
),
}
sharded_filenodes: _,
} => open_xdb::<SqlCensoredContentStore>(&db_address, myrouter_port),
});
let censored_blobs = censored_blobs_store.and_then(move |censored_store| {
censored_store
.get_all_censored_blobs()
.map_err(Error::from)
.map(HashMap::from_iter)
});
uncensored_blobstore.join(censored_blobs).and_then(
move |(uncensored_blobstore, censored_blobs)| {
let blobstore =
Arc::new(CensoredBlob::new(uncensored_blobstore, censored_blobs));
match storage_config.dbconfig {
MetadataDBConfig::LocalDB { path } => {
new_local(logger, &path, blobstore, repoid)
}
MetadataDBConfig::Mysql {
db_address,
sharded_filenodes,
} => new_remote(
logger,
db_address,
sharded_filenodes,
blobstore,
repoid,
myrouter_port,
bookmarks_cache_ttl,
),
}
},
)
})
.boxify()
}

View File

@ -42,7 +42,8 @@ def no_db_helper():
EPHEMERAL_DB = "USE_EPHEMERAL_DB"
EPHEMERAL_DB_WHITELIST = {
"test-init.t",
"test-lookup.t"
"test-lookup.t",
"test-mononoke-admin.t",
}
TESTDIR_PATH = "scm/mononoke/tests/integration"

View File

@ -0,0 +1,34 @@
$ . $TESTDIR/library.sh
setup configuration
$ setup_common_config
$ cd $TESTTMP
setup common configuration
$ cat >> $HGRCPATH <<EOF
> [ui]
> ssh="$DUMMYSSH"
> EOF
setup repo
$ hg init repo-hg
$ cd repo-hg
$ setup_hg_server
$ hg debugdrawdag <<EOF
> C
> |
> B
> |
> A
> EOF
create master bookmark
$ hg bookmark master_bookmark -r tip
blobimport them into Mononoke storage and start Mononoke
$ cd ..
$ blobimport repo-hg/.hg repo
$ mononoke_admin bookmarks log master_bookmark 2>&1 | grep master_bookmark
(master_bookmark) 26805aba1e600a82e93661149f2313866a221a7b blobimport * (glob)