mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 06:18:07 +03:00
backingstore: add option to disable retries
Summary: EdenFS doesn't want to use retries while it has the hg import fallback. Let's allow disabling them. Once there is a config that controls the hg import fallback, we can enable retries when the fallback is disabled. Reviewed By: xavierd Differential Revision: D35020586 fbshipit-source-id: d51d7fb70d2627e55c1170f130c548d7b14a8e6e
This commit is contained in:
parent
6cbc0b6a9a
commit
21a3444dbf
@ -184,6 +184,7 @@ HgBackingStore::HgBackingStore(
|
||||
repository,
|
||||
useEdenApi_,
|
||||
config->getEdenConfig()->useAuxMetadata.getValue(),
|
||||
false, // allowRetries
|
||||
config),
|
||||
logger_(logger) {
|
||||
HgImporter importer(repository, stats);
|
||||
@ -208,7 +209,7 @@ HgBackingStore::HgBackingStore(
|
||||
config_(std::move(config)),
|
||||
serverThreadPool_{importThreadPool_.get()},
|
||||
useEdenApi_{false},
|
||||
datapackStore_(repository, false, false, config_),
|
||||
datapackStore_(repository, false, false, false, config_),
|
||||
logger_(nullptr) {
|
||||
const auto& options = importer->getOptions();
|
||||
repoName_ = options.repoName;
|
||||
|
@ -29,8 +29,9 @@ class HgDatapackStore {
|
||||
AbsolutePathPiece repository,
|
||||
bool useEdenApi,
|
||||
bool useAuxData,
|
||||
bool allowRetries,
|
||||
std::shared_ptr<ReloadableConfig> config)
|
||||
: store_{repository.stringPiece(), useEdenApi, useAuxData},
|
||||
: store_{repository.stringPiece(), useEdenApi, useAuxData, allowRetries},
|
||||
config_{std::move(config)} {}
|
||||
|
||||
/**
|
||||
|
@ -90,10 +90,15 @@ void getTreeBatchCallback(
|
||||
HgNativeBackingStore::HgNativeBackingStore(
|
||||
folly::StringPiece repository,
|
||||
bool useEdenApi,
|
||||
bool useAuxData) {
|
||||
bool useAuxData,
|
||||
bool allowRetries) {
|
||||
RustCFallible<RustBackingStore> store(
|
||||
rust_backingstore_new(
|
||||
repository.data(), repository.size(), useEdenApi, useAuxData),
|
||||
repository.data(),
|
||||
repository.size(),
|
||||
useEdenApi,
|
||||
useAuxData,
|
||||
allowRetries),
|
||||
rust_backingstore_free);
|
||||
|
||||
if (store.isError()) {
|
||||
|
@ -23,7 +23,8 @@ class HgNativeBackingStore {
|
||||
HgNativeBackingStore(
|
||||
folly::StringPiece repository,
|
||||
bool useEdenApi,
|
||||
bool useAuxData);
|
||||
bool useAuxData,
|
||||
bool allowRetries);
|
||||
|
||||
std::unique_ptr<folly::IOBuf>
|
||||
getBlob(folly::ByteRange name, folly::ByteRange node, bool local);
|
||||
|
@ -7,7 +7,7 @@
|
||||
* This file is generated with cbindgen. Please run `./tools/cbindgen.sh` to
|
||||
* update this file.
|
||||
*
|
||||
* @generated SignedSource<<bc02b8220fce28dacd7a4c231f794240>>
|
||||
* @generated SignedSource<<4380fbbc83996f112bc08c3fae87beab>>
|
||||
*
|
||||
*/
|
||||
|
||||
@ -136,7 +136,8 @@ extern "C" {
|
||||
RustCFallibleBase rust_backingstore_new(const char *repository,
|
||||
size_t repository_len,
|
||||
bool use_edenapi,
|
||||
bool aux_data);
|
||||
bool aux_data,
|
||||
bool allow_retries);
|
||||
|
||||
void rust_backingstore_free(RustBackingStore *store);
|
||||
|
||||
|
@ -27,9 +27,21 @@ pub enum BackingStore {
|
||||
use BackingStore::*;
|
||||
|
||||
impl BackingStore {
|
||||
pub fn new<P: AsRef<Path>>(repository: P, use_edenapi: bool, aux_data: bool) -> Result<Self> {
|
||||
pub fn new<P: AsRef<Path>>(
|
||||
repository: P,
|
||||
use_edenapi: bool,
|
||||
aux_data: bool,
|
||||
allow_retries: bool,
|
||||
) -> Result<Self> {
|
||||
let hg = repository.as_ref().join(".hg");
|
||||
let config = configparser::hg::load::<String, String>(Some(&hg), None)?;
|
||||
let mut config = configparser::hg::load::<String, String>(Some(&hg), None)?;
|
||||
|
||||
if !allow_retries {
|
||||
let source = configparser::config::Options::new().source("backingstore");
|
||||
config.set("lfs", "backofftimes", Some("0"), &source);
|
||||
config.set("lfs", "throttlebackofftimes", Some("0"), &source);
|
||||
config.set("edenapi", "max-retry-per-request", Some("0"), &source);
|
||||
}
|
||||
|
||||
Ok(if config.get_or_default("scmstore", "backingstore")? {
|
||||
New(BackingScmStores::new(&config, &hg, use_edenapi, aux_data)?)
|
||||
|
@ -37,12 +37,18 @@ fn backingstore_new(
|
||||
repository_len: size_t,
|
||||
use_edenapi: bool,
|
||||
aux_data: bool,
|
||||
allow_retries: bool,
|
||||
) -> Result<*mut BackingStore> {
|
||||
super::init::backingstore_global_init();
|
||||
|
||||
let repository = stringpiece_to_slice(repository, repository_len)?;
|
||||
let repo = str::from_utf8(repository)?;
|
||||
let store = Box::new(BackingStore::new(repo, use_edenapi, aux_data)?);
|
||||
let store = Box::new(BackingStore::new(
|
||||
repo,
|
||||
use_edenapi,
|
||||
aux_data,
|
||||
allow_retries,
|
||||
)?);
|
||||
|
||||
Ok(Box::into_raw(store))
|
||||
}
|
||||
@ -53,8 +59,16 @@ pub extern "C" fn rust_backingstore_new(
|
||||
repository_len: size_t,
|
||||
use_edenapi: bool,
|
||||
aux_data: bool,
|
||||
allow_retries: bool,
|
||||
) -> CFallible<BackingStore> {
|
||||
backingstore_new(repository, repository_len, use_edenapi, aux_data).into()
|
||||
backingstore_new(
|
||||
repository,
|
||||
repository_len,
|
||||
use_edenapi,
|
||||
aux_data,
|
||||
allow_retries,
|
||||
)
|
||||
.into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
Loading…
Reference in New Issue
Block a user