@@ -20,6 +20,7 @@ use crate::proto::metapb;
20
20
use crate :: region:: RegionId ;
21
21
use crate :: region:: RegionVerId ;
22
22
use crate :: region:: RegionWithLeader ;
23
+ use crate :: region:: StoreId ;
23
24
use crate :: region_cache:: RegionCache ;
24
25
use crate :: store:: KvConnect ;
25
26
use crate :: store:: RegionStore ;
@@ -84,7 +85,7 @@ pub trait PdClient: Send + Sync + 'static {
84
85
fn group_keys_by_region < K , K2 > (
85
86
self : Arc < Self > ,
86
87
keys : impl Iterator < Item = K > + Send + Sync + ' static ,
87
- ) -> BoxStream < ' static , Result < ( RegionWithLeader , Vec < K2 > ) > >
88
+ ) -> BoxStream < ' static , Result < ( Vec < K2 > , RegionWithLeader ) > >
88
89
where
89
90
K : AsRef < Key > + Into < K2 > + Send + Sync + ' static ,
90
91
K2 : Send + Sync + ' static ,
@@ -102,7 +103,7 @@ pub trait PdClient: Send + Sync + 'static {
102
103
}
103
104
grouped. push ( keys. next ( ) . unwrap ( ) . into ( ) ) ;
104
105
}
105
- Ok ( Some ( ( keys, ( region , grouped ) ) ) )
106
+ Ok ( Some ( ( keys, ( grouped , region ) ) ) )
106
107
} else {
107
108
Ok ( None )
108
109
}
@@ -112,10 +113,10 @@ pub trait PdClient: Send + Sync + 'static {
112
113
}
113
114
114
115
/// Returns a Stream which iterates over the contexts for each region covered by range.
115
- fn stores_for_range (
116
+ fn regions_for_range (
116
117
self : Arc < Self > ,
117
118
range : BoundRange ,
118
- ) -> BoxStream < ' static , Result < RegionStore > > {
119
+ ) -> BoxStream < ' static , Result < RegionWithLeader > > {
119
120
let ( start_key, end_key) = range. into_keys ( ) ;
120
121
stream_fn ( Some ( start_key) , move |start_key| {
121
122
let end_key = end_key. clone ( ) ;
@@ -128,15 +129,14 @@ pub trait PdClient: Send + Sync + 'static {
128
129
129
130
let region = this. region_for_key ( & start_key) . await ?;
130
131
let region_end = region. end_key ( ) ;
131
- let store = this. map_region_to_store ( region) . await ?;
132
132
if end_key
133
133
. map ( |x| x <= region_end && !x. is_empty ( ) )
134
134
. unwrap_or ( false )
135
135
|| region_end. is_empty ( )
136
136
{
137
- return Ok ( Some ( ( None , store ) ) ) ;
137
+ return Ok ( Some ( ( None , region ) ) ) ;
138
138
}
139
- Ok ( Some ( ( Some ( region_end) , store ) ) )
139
+ Ok ( Some ( ( Some ( region_end) , region ) ) )
140
140
}
141
141
} )
142
142
. boxed ( )
@@ -146,7 +146,7 @@ pub trait PdClient: Send + Sync + 'static {
146
146
fn group_ranges_by_region (
147
147
self : Arc < Self > ,
148
148
mut ranges : Vec < kvrpcpb:: KeyRange > ,
149
- ) -> BoxStream < ' static , Result < ( RegionWithLeader , Vec < kvrpcpb:: KeyRange > ) > > {
149
+ ) -> BoxStream < ' static , Result < ( Vec < kvrpcpb:: KeyRange > , RegionWithLeader ) > > {
150
150
ranges. reverse ( ) ;
151
151
stream_fn ( Some ( ranges) , move |ranges| {
152
152
let this = self . clone ( ) ;
@@ -166,7 +166,7 @@ pub trait PdClient: Send + Sync + 'static {
166
166
if !region_end. is_empty ( ) && ( end_key > region_end || end_key. is_empty ( ) ) {
167
167
grouped. push ( make_key_range ( start_key. into ( ) , region_end. clone ( ) . into ( ) ) ) ;
168
168
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 ) ) ) ) ;
170
170
}
171
171
grouped. push ( range) ;
172
172
@@ -181,11 +181,11 @@ pub trait PdClient: Send + Sync + 'static {
181
181
grouped
182
182
. push ( make_key_range ( start_key. into ( ) , region_end. clone ( ) . into ( ) ) ) ;
183
183
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 ) ) ) ) ;
185
185
}
186
186
grouped. push ( range) ;
187
187
}
188
- Ok ( Some ( ( Some ( ranges) , ( region , grouped ) ) ) )
188
+ Ok ( Some ( ( Some ( ranges) , ( grouped , region ) ) ) )
189
189
} else {
190
190
Ok ( None )
191
191
}
@@ -205,6 +205,8 @@ pub trait PdClient: Send + Sync + 'static {
205
205
async fn update_leader ( & self , ver_id : RegionVerId , leader : metapb:: Peer ) -> Result < ( ) > ;
206
206
207
207
async fn invalidate_region_cache ( & self , ver_id : RegionVerId ) ;
208
+
209
+ async fn invalidate_store_cache ( & self , store_id : StoreId ) ;
208
210
}
209
211
210
212
/// 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> {
271
273
self . region_cache . invalidate_region_cache ( ver_id) . await
272
274
}
273
275
276
+ async fn invalidate_store_cache ( & self , store_id : StoreId ) {
277
+ self . region_cache . invalidate_store_cache ( store_id) . await
278
+ }
279
+
274
280
async fn load_keyspace ( & self , keyspace : & str ) -> Result < keyspacepb:: KeyspaceMeta > {
275
281
self . pd . load_keyspace ( keyspace) . await
276
282
}
@@ -390,7 +396,7 @@ pub mod test {
390
396
let stream = Arc :: new ( client) . group_keys_by_region ( tasks. into_iter ( ) ) ;
391
397
let mut stream = executor:: block_on_stream ( stream) ;
392
398
393
- let result: Vec < Key > = stream. next ( ) . unwrap ( ) . unwrap ( ) . 1 ;
399
+ let result: Vec < Key > = stream. next ( ) . unwrap ( ) . unwrap ( ) . 0 ;
394
400
assert_eq ! (
395
401
result,
396
402
vec![
@@ -401,27 +407,27 @@ pub mod test {
401
407
]
402
408
) ;
403
409
assert_eq ! (
404
- stream. next( ) . unwrap( ) . unwrap( ) . 1 ,
410
+ stream. next( ) . unwrap( ) . unwrap( ) . 0 ,
405
411
vec![ vec![ 12 ] . into( ) , vec![ 11 , 4 ] . into( ) ]
406
412
) ;
407
413
assert ! ( stream. next( ) . is_none( ) ) ;
408
414
}
409
415
410
416
#[ test]
411
- fn test_stores_for_range ( ) {
417
+ fn test_regions_for_range ( ) {
412
418
let client = Arc :: new ( MockPdClient :: default ( ) ) ;
413
419
let k1: Key = vec ! [ 1 ] . into ( ) ;
414
420
let k2: Key = vec ! [ 5 , 2 ] . into ( ) ;
415
421
let k3: Key = vec ! [ 11 , 4 ] . into ( ) ;
416
422
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 ) ;
419
425
assert ! ( stream. next( ) . is_none( ) ) ;
420
426
421
427
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 ) ;
425
431
assert ! ( stream. next( ) . is_none( ) ) ;
426
432
}
427
433
@@ -446,20 +452,20 @@ pub mod test {
446
452
let ranges3 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
447
453
let ranges4 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
448
454
449
- assert_eq ! ( ranges1. 0 . id( ) , 1 ) ;
455
+ assert_eq ! ( ranges1. 1 . id( ) , 1 ) ;
450
456
assert_eq ! (
451
- ranges1. 1 ,
457
+ ranges1. 0 ,
452
458
vec![
453
459
make_key_range( k1. clone( ) , k2. clone( ) ) ,
454
460
make_key_range( k1. clone( ) , k_split. clone( ) ) ,
455
461
]
456
462
) ;
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( ) ) ] ) ;
463
469
assert ! ( stream. next( ) . is_none( ) ) ;
464
470
465
471
let range1 = make_key_range ( k1. clone ( ) , k2. clone ( ) ) ;
@@ -470,11 +476,11 @@ pub mod test {
470
476
let ranges1 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
471
477
let ranges2 = stream. next ( ) . unwrap ( ) . unwrap ( ) ;
472
478
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) ] ) ;
479
485
}
480
486
}
0 commit comments