Skip to content

Commit 988f660

Browse files
committed
add handle operation toward rpc err in scan_inner
1 parent 7c78aad commit 988f660

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/raw/client.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use crate::Key;
3131
use crate::KvPair;
3232
use crate::Result;
3333
use crate::Value;
34+
use crate::request::plan::is_grpc_error;
3435

3536
const MAX_RAW_KV_SCAN_LIMIT: u32 = 10240;
3637

@@ -835,6 +836,17 @@ impl<PdC: PdClient> Client<PdC> {
835836
}
836837
Ok((Some(r), region.end_key()))
837838
}
839+
Err(err) if is_grpc_error(&err) => {
840+
debug!("retryable_scan: grpc error: {:?}", err);
841+
plan::handle_rpc_error(self.rpc.clone(), store.clone()).await;
842+
843+
if let Some(duration) = scan_args.backoff.next_delay_duration() {
844+
sleep(duration).await;
845+
continue;
846+
} else {
847+
return Err(err);
848+
}
849+
}
838850
Err(err) => Err(err),
839851
};
840852
}

src/request/plan.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl<Req: KvRequest + StoreRequest> StoreRequest for Dispatch<Req> {
8787
const MULTI_REGION_CONCURRENCY: usize = 16;
8888
const MULTI_STORES_CONCURRENCY: usize = 16;
8989

90-
fn is_grpc_error(e: &Error) -> bool {
90+
pub(crate) fn is_grpc_error(e: &Error) -> bool {
9191
matches!(e, Error::GrpcAPI(_) | Error::Grpc(_))
9292
}
9393

@@ -345,6 +345,18 @@ pub(crate) async fn handle_region_error<PdC: PdClient>(
345345
}
346346
}
347347

348+
pub(crate) async fn handle_rpc_error<PdC: PdClient>(
349+
pd_client: Arc<PdC>,
350+
region_store: RegionStore,
351+
) {
352+
let ver_id = region_store.region_with_leader.ver_id();
353+
let store_id = region_store.region_with_leader.get_store_id();
354+
pd_client.invalidate_region_cache(ver_id).await;
355+
if let Ok(store_id) = store_id {
356+
pd_client.invalidate_store_cache(store_id).await;
357+
}
358+
}
359+
348360
// Returns
349361
// 1. Ok(true): error has been resolved, retry immediately
350362
// 2. Ok(false): backoff, and then retry

0 commit comments

Comments
 (0)