@@ -20,6 +20,7 @@ use crate::proto::metapb;
2020use crate :: region:: RegionId ;
2121use crate :: region:: RegionVerId ;
2222use crate :: region:: RegionWithLeader ;
23+ use crate :: region:: StoreId ;
2324use crate :: region_cache:: RegionCache ;
2425use crate :: store:: KvConnect ;
2526use crate :: store:: RegionStore ;
@@ -84,7 +85,7 @@ pub trait PdClient: Send + Sync + 'static {
8485 fn group_keys_by_region < K , K2 > (
8586 self : Arc < Self > ,
8687 keys : impl Iterator < Item = K > + Send + Sync + ' static ,
87- ) -> BoxStream < ' static , Result < ( RegionWithLeader , Vec < K2 > ) > >
88+ ) -> BoxStream < ' static , Result < ( Vec < K2 > , RegionWithLeader ) > >
8889 where
8990 K : AsRef < Key > + Into < K2 > + Send + Sync + ' static ,
9091 K2 : Send + Sync + ' static ,
@@ -102,7 +103,7 @@ pub trait PdClient: Send + Sync + 'static {
102103 }
103104 grouped. push ( keys. next ( ) . unwrap ( ) . into ( ) ) ;
104105 }
105- Ok ( Some ( ( keys, ( region , grouped ) ) ) )
106+ Ok ( Some ( ( keys, ( grouped , region ) ) ) )
106107 } else {
107108 Ok ( None )
108109 }
@@ -112,10 +113,10 @@ pub trait PdClient: Send + Sync + 'static {
112113 }
113114
114115 /// Returns a Stream which iterates over the contexts for each region covered by range.
115- fn stores_for_range (
116+ fn regions_for_range (
116117 self : Arc < Self > ,
117118 range : BoundRange ,
118- ) -> BoxStream < ' static , Result < RegionStore > > {
119+ ) -> BoxStream < ' static , Result < RegionWithLeader > > {
119120 let ( start_key, end_key) = range. into_keys ( ) ;
120121 stream_fn ( Some ( start_key) , move |start_key| {
121122 let end_key = end_key. clone ( ) ;
@@ -128,15 +129,14 @@ pub trait PdClient: Send + Sync + 'static {
128129
129130 let region = this. region_for_key ( & start_key) . await ?;
130131 let region_end = region. end_key ( ) ;
131- let store = this. map_region_to_store ( region) . await ?;
132132 if end_key
133133 . map ( |x| x <= region_end && !x. is_empty ( ) )
134134 . unwrap_or ( false )
135135 || region_end. is_empty ( )
136136 {
137- return Ok ( Some ( ( None , store ) ) ) ;
137+ return Ok ( Some ( ( None , region ) ) ) ;
138138 }
139- Ok ( Some ( ( Some ( region_end) , store ) ) )
139+ Ok ( Some ( ( Some ( region_end) , region ) ) )
140140 }
141141 } )
142142 . boxed ( )
@@ -146,7 +146,7 @@ pub trait PdClient: Send + Sync + 'static {
146146 fn group_ranges_by_region (
147147 self : Arc < Self > ,
148148 mut ranges : Vec < kvrpcpb:: KeyRange > ,
149- ) -> BoxStream < ' static , Result < ( RegionWithLeader , Vec < kvrpcpb:: KeyRange > ) > > {
149+ ) -> BoxStream < ' static , Result < ( Vec < kvrpcpb:: KeyRange > , RegionWithLeader ) > > {
150150 ranges. reverse ( ) ;
151151 stream_fn ( Some ( ranges) , move |ranges| {
152152 let this = self . clone ( ) ;
@@ -166,7 +166,7 @@ pub trait PdClient: Send + Sync + 'static {
166166 if !region_end. is_empty ( ) && ( end_key > region_end || end_key. is_empty ( ) ) {
167167 grouped. push ( make_key_range ( start_key. into ( ) , region_end. clone ( ) . into ( ) ) ) ;
168168 ranges. push ( make_key_range ( region_end. into ( ) , end_key. into ( ) ) ) ;
169- return Ok ( Some ( ( Some ( ranges) , ( region , grouped ) ) ) ) ;
169+ return Ok ( Some ( ( Some ( ranges) , ( grouped , region ) ) ) ) ;
170170 }
171171 grouped. push ( range) ;
172172
@@ -181,11 +181,11 @@ pub trait PdClient: Send + Sync + 'static {
181181 grouped
182182 . push ( make_key_range ( start_key. into ( ) , region_end. clone ( ) . into ( ) ) ) ;
183183 ranges. push ( make_key_range ( region_end. into ( ) , end_key. into ( ) ) ) ;
184- return Ok ( Some ( ( Some ( ranges) , ( region , grouped ) ) ) ) ;
184+ return Ok ( Some ( ( Some ( ranges) , ( grouped , region ) ) ) ) ;
185185 }
186186 grouped. push ( range) ;
187187 }
188- Ok ( Some ( ( Some ( ranges) , ( region , grouped ) ) ) )
188+ Ok ( Some ( ( Some ( ranges) , ( grouped , region ) ) ) )
189189 } else {
190190 Ok ( None )
191191 }
@@ -205,6 +205,8 @@ pub trait PdClient: Send + Sync + 'static {
205205 async fn update_leader ( & self , ver_id : RegionVerId , leader : metapb:: Peer ) -> Result < ( ) > ;
206206
207207 async fn invalidate_region_cache ( & self , ver_id : RegionVerId ) ;
208+
209+ async fn invalidate_store_cache ( & self , store_id : StoreId ) ;
208210}
209211
210212/// This client converts requests for the logical TiKV cluster into requests
@@ -271,6 +273,10 @@ impl<KvC: KvConnect + Send + Sync + 'static> PdClient for PdRpcClient<KvC> {
271273 self . region_cache . invalidate_region_cache ( ver_id) . await
272274 }
273275
276+ async fn invalidate_store_cache ( & self , store_id : StoreId ) {
277+ self . region_cache . invalidate_store_cache ( store_id) . await
278+ }
279+
274280 async fn load_keyspace ( & self , keyspace : & str ) -> Result < keyspacepb:: KeyspaceMeta > {
275281 self . pd . load_keyspace ( keyspace) . await
276282 }
@@ -390,7 +396,7 @@ pub mod test {
390396 let stream = Arc :: new ( client) . group_keys_by_region ( tasks. into_iter ( ) ) ;
391397 let mut stream = executor:: block_on_stream ( stream) ;
392398
393- let result: Vec < Key > = stream. next ( ) . unwrap ( ) . unwrap ( ) . 1 ;
399+ let result: Vec < Key > = stream. next ( ) . unwrap ( ) . unwrap ( ) . 0 ;
394400 assert_eq ! (
395401 result,
396402 vec![
@@ -401,27 +407,27 @@ pub mod test {
401407 ]
402408 ) ;
403409 assert_eq ! (
404- stream. next( ) . unwrap( ) . unwrap( ) . 1 ,
410+ stream. next( ) . unwrap( ) . unwrap( ) . 0 ,
405411 vec![ vec![ 12 ] . into( ) , vec![ 11 , 4 ] . into( ) ]
406412 ) ;
407413 assert ! ( stream. next( ) . is_none( ) ) ;
408414 }
409415
410416 #[ test]
411- fn test_stores_for_range ( ) {
417+ fn test_regions_for_range ( ) {
412418 let client = Arc :: new ( MockPdClient :: default ( ) ) ;
413419 let k1: Key = vec ! [ 1 ] . into ( ) ;
414420 let k2: Key = vec ! [ 5 , 2 ] . into ( ) ;
415421 let k3: Key = vec ! [ 11 , 4 ] . into ( ) ;
416422 let range1 = ( k1, k2. clone ( ) ) . into ( ) ;
417- let mut stream = executor:: block_on_stream ( client. clone ( ) . stores_for_range ( range1) ) ;
418- assert_eq ! ( stream. next( ) . unwrap( ) . unwrap( ) . region_with_leader . id( ) , 1 ) ;
423+ let mut stream = executor:: block_on_stream ( client. clone ( ) . regions_for_range ( range1) ) ;
424+ assert_eq ! ( stream. next( ) . unwrap( ) . unwrap( ) . id( ) , 1 ) ;
419425 assert ! ( stream. next( ) . is_none( ) ) ;
420426
421427 let range2 = ( k2, k3) . into ( ) ;
422- let mut stream = executor:: block_on_stream ( client. stores_for_range ( range2) ) ;
423- assert_eq ! ( stream. next( ) . unwrap( ) . unwrap( ) . region_with_leader . id( ) , 1 ) ;
424- assert_eq ! ( stream. next( ) . unwrap( ) . unwrap( ) . region_with_leader . id( ) , 2 ) ;
428+ let mut stream = executor:: block_on_stream ( client. regions_for_range ( range2) ) ;
429+ assert_eq ! ( stream. next( ) . unwrap( ) . unwrap( ) . id( ) , 1 ) ;
430+ assert_eq ! ( stream. next( ) . unwrap( ) . unwrap( ) . id( ) , 2 ) ;
425431 assert ! ( stream. next( ) . is_none( ) ) ;
426432 }
427433
@@ -446,20 +452,20 @@ pub mod test {
446452 let ranges3 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
447453 let ranges4 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
448454
449- assert_eq ! ( ranges1. 0 . id( ) , 1 ) ;
455+ assert_eq ! ( ranges1. 1 . id( ) , 1 ) ;
450456 assert_eq ! (
451- ranges1. 1 ,
457+ ranges1. 0 ,
452458 vec![
453459 make_key_range( k1. clone( ) , k2. clone( ) ) ,
454460 make_key_range( k1. clone( ) , k_split. clone( ) ) ,
455461 ]
456462 ) ;
457- assert_eq ! ( ranges2. 0 . id( ) , 2 ) ;
458- assert_eq ! ( ranges2. 1 , vec![ make_key_range( k_split. clone( ) , k3. clone( ) ) ] ) ;
459- assert_eq ! ( ranges3. 0 . id( ) , 1 ) ;
460- assert_eq ! ( ranges3. 1 , vec![ make_key_range( k2. clone( ) , k_split. clone( ) ) ] ) ;
461- assert_eq ! ( ranges4. 0 . id( ) , 2 ) ;
462- assert_eq ! ( ranges4. 1 , vec![ make_key_range( k_split, k4. clone( ) ) ] ) ;
463+ assert_eq ! ( ranges2. 1 . id( ) , 2 ) ;
464+ assert_eq ! ( ranges2. 0 , vec![ make_key_range( k_split. clone( ) , k3. clone( ) ) ] ) ;
465+ assert_eq ! ( ranges3. 1 . id( ) , 1 ) ;
466+ assert_eq ! ( ranges3. 0 , vec![ make_key_range( k2. clone( ) , k_split. clone( ) ) ] ) ;
467+ assert_eq ! ( ranges4. 1 . id( ) , 2 ) ;
468+ assert_eq ! ( ranges4. 0 , vec![ make_key_range( k_split, k4. clone( ) ) ] ) ;
463469 assert ! ( stream. next( ) . is_none( ) ) ;
464470
465471 let range1 = make_key_range ( k1. clone ( ) , k2. clone ( ) ) ;
@@ -470,11 +476,11 @@ pub mod test {
470476 let ranges1 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
471477 let ranges2 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
472478 let ranges3 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
473- assert_eq ! ( ranges1. 0 . id( ) , 1 ) ;
474- assert_eq ! ( ranges1. 1 , vec![ make_key_range( k1, k2) ] ) ;
475- assert_eq ! ( ranges2. 0 . id( ) , 2 ) ;
476- assert_eq ! ( ranges2. 1 , vec![ make_key_range( k3, k4) ] ) ;
477- assert_eq ! ( ranges3. 0 . id( ) , 3 ) ;
478- assert_eq ! ( ranges3. 1 , vec![ make_key_range( k5, k6) ] ) ;
479+ assert_eq ! ( ranges1. 1 . id( ) , 1 ) ;
480+ assert_eq ! ( ranges1. 0 , vec![ make_key_range( k1, k2) ] ) ;
481+ assert_eq ! ( ranges2. 1 . id( ) , 2 ) ;
482+ assert_eq ! ( ranges2. 0 , vec![ make_key_range( k3, k4) ] ) ;
483+ assert_eq ! ( ranges3. 1 . id( ) , 3 ) ;
484+ assert_eq ! ( ranges3. 0 , vec![ make_key_range( k5, k6) ] ) ;
479485 }
480486}
0 commit comments