Add option to not automatically resolve regions

Signed-off-by: Nick Cameron <nrc@ncameron.org>
This commit is contained in:
Nick Cameron 2020-12-22 10:58:50 +13:00
parent 59b4a8d32b
commit 5d584d93b3
2 changed files with 12 additions and 0 deletions

View File

@ -75,6 +75,9 @@ pub trait KvRequest: Request + Clone + Sync + Send + 'static + Sized {
})
.map_ok(move |(request, mut response)| {
if let Some(region_error) = response.region_error() {
if !retry.auto_resolve_regions {
return stream::once(future::err(region_error)).boxed();
}
return request.on_region_error(region_error, pd_client.clone(), retry.clone());
}
// Resolve locks
@ -169,6 +172,7 @@ pub struct RetryOptions {
pub region_backoff: Backoff,
pub lock_backoff: Backoff,
pub auto_resolve_locks: bool,
pub auto_resolve_regions: bool,
}
impl RetryOptions {
@ -177,6 +181,7 @@ impl RetryOptions {
region_backoff: DEFAULT_REGION_BACKOFF,
lock_backoff: OPTIMISTIC_BACKOFF,
auto_resolve_locks: true,
auto_resolve_regions: true,
}
}
@ -185,6 +190,7 @@ impl RetryOptions {
region_backoff: DEFAULT_REGION_BACKOFF,
lock_backoff: PESSIMISTIC_BACKOFF,
auto_resolve_locks: true,
auto_resolve_regions: true,
}
}
}
@ -369,6 +375,7 @@ mod test {
region_backoff: Backoff::no_jitter_backoff(1, 1, 3),
lock_backoff: Backoff::no_jitter_backoff(1, 1, 3),
auto_resolve_locks: true,
auto_resolve_regions: true,
};
let stream = request.retry_response_stream(pd_client, retry);

View File

@ -584,6 +584,11 @@ impl TransactionOptions {
self
}
pub fn no_resolve_regions(mut self) -> TransactionOptions {
self.retry_options.auto_resolve_regions = false;
self
}
pub fn no_retry(mut self) -> TransactionOptions {
self.retry_options.region_backoff = Backoff::no_backoff();
self.retry_options.lock_backoff = Backoff::no_backoff();