@@ -179,11 +179,7 @@ fn get_index(ctx: &Context, args: Vec<String>) -> RedisResult {
179
179
let index_name = format ! ( "{}.{}" , PREFIX , name_suffix) ;
180
180
181
181
let index = load_index ( ctx, & index_name) ?;
182
- let index = match index. try_read ( ) {
183
- Ok ( index) => index,
184
- Err ( e) => return Err ( e. to_string ( ) . into ( ) ) ,
185
- } ;
186
-
182
+ let index = index. try_read ( ) . map_err ( |e| e. to_string ( ) ) ?;
187
183
ctx. log_debug ( format ! ( "Index: {:?}" , index) . as_str ( ) ) ;
188
184
ctx. log_debug ( format ! ( "Layers: {:?}" , index. layers. len( ) ) . as_str ( ) ) ;
189
185
ctx. log_debug ( format ! ( "Nodes: {:?}" , index. nodes. len( ) ) . as_str ( ) ) ;
@@ -201,6 +197,18 @@ fn delete_index(ctx: &Context, args: Vec<String>) -> RedisResult {
201
197
let name_suffix = parsed. remove ( "name" ) . unwrap ( ) . as_string ( ) ?;
202
198
let index_name = format ! ( "{}.{}" , PREFIX , name_suffix) ;
203
199
200
+ // get index from global hashmap
201
+ load_index ( ctx, & index_name) ?;
202
+ let mut indices = INDICES . write ( ) . unwrap ( ) ;
203
+ let index = indices
204
+ . remove ( & index_name)
205
+ . ok_or_else ( || format ! ( "Index: {} does not exist" , name_suffix) ) ?;
206
+ let index = index. try_read ( ) . map_err ( |e| e. to_string ( ) ) ?;
207
+
208
+ for ( node_name, _) in index. nodes . iter ( ) {
209
+ delete_node_redis ( ctx, & node_name) ?;
210
+ }
211
+
204
212
// get index from redis
205
213
ctx. log_debug ( format ! ( "deleting index: {}" , & index_name) . as_str ( ) ) ;
206
214
let rkey = ctx. open_key_writable ( & index_name) ;
@@ -215,20 +223,6 @@ fn delete_index(ctx: &Context, args: Vec<String>) -> RedisResult {
215
223
}
216
224
} ;
217
225
218
- // get index from global hashmap
219
- let mut indices = INDICES . write ( ) . unwrap ( ) ;
220
- let index = indices
221
- . remove ( & index_name)
222
- . ok_or_else ( || format ! ( "Index: {} does not exist" , name_suffix) ) ?;
223
- let index = match index. try_read ( ) {
224
- Ok ( index) => index,
225
- Err ( e) => return Err ( e. to_string ( ) . into ( ) ) ,
226
- } ;
227
-
228
- for ( node_name, _) in index. nodes . iter ( ) {
229
- delete_node_redis ( ctx, & node_name) ?;
230
- }
231
-
232
226
Ok ( 1_usize . into ( ) )
233
227
}
234
228
@@ -243,10 +237,10 @@ fn load_index(ctx: &Context, index_name: &str) -> Result<IndexArc, RedisError> {
243
237
ctx. log_debug ( format ! ( "get key: {}" , & index_name) . as_str ( ) ) ;
244
238
let rkey = ctx. open_key ( & index_name) ;
245
239
246
- let index_redis = match rkey. get_value :: < IndexRedis > ( & HNSW_INDEX_REDIS_TYPE ) ? {
247
- Some ( index ) => index ,
248
- None => return Err ( format ! ( "Index: {} does not exist" , index_name) . into ( ) ) ,
249
- } ;
240
+ let index_redis = rkey
241
+ . get_value :: < IndexRedis > ( & HNSW_INDEX_REDIS_TYPE ) ?
242
+ . ok_or_else ( || format ! ( "Index: {} does not exist" , index_name) ) ? ;
243
+
250
244
let index = make_index ( ctx, index_redis) ?;
251
245
v. insert ( Arc :: new ( RwLock :: new ( index) ) )
252
246
}
@@ -262,10 +256,10 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
262
256
for node_name in & ir. nodes {
263
257
let key = ctx. open_key ( & node_name) ;
264
258
265
- let nr = match key. get_value :: < NodeRedis > ( & HNSW_NODE_REDIS_TYPE ) ? {
266
- Some ( n ) => n ,
267
- None => return Err ( format ! ( "Node: {} does not exist" , node_name) . into ( ) ) ,
268
- } ;
259
+ let nr = key
260
+ . get_value :: < NodeRedis > ( & HNSW_NODE_REDIS_TYPE ) ?
261
+ . ok_or_else ( || format ! ( "Node: {} does not exist" , node_name) ) ? ;
262
+
269
263
let node = Node :: new ( node_name, & nr. data , index. m_max_0 ) ;
270
264
index. nodes . insert ( node_name. to_owned ( ) , node) ;
271
265
}
@@ -276,17 +270,16 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
276
270
277
271
let key = ctx. open_key ( & node_name) ;
278
272
279
- let nr = match key. get_value :: < NodeRedis > ( & HNSW_NODE_REDIS_TYPE ) ? {
280
- Some ( n) => n,
281
- None => return Err ( format ! ( "Node: {} does not exist" , node_name) . into ( ) ) ,
282
- } ;
273
+ let nr = key
274
+ . get_value :: < NodeRedis > ( & HNSW_NODE_REDIS_TYPE ) ?
275
+ . ok_or_else ( || format ! ( "Node: {} does not exist" , node_name) ) ?;
283
276
for layer in & nr. neighbors {
284
277
let mut node_layer = Vec :: with_capacity ( layer. len ( ) ) ;
285
278
for neighbor in layer {
286
- let nn = match index. nodes . get ( neighbor ) {
287
- Some ( node ) => node ,
288
- None => return Err ( format ! ( "Node: {} does not exist" , node_name ) . into ( ) ) ,
289
- } ;
279
+ let nn = index
280
+ . nodes
281
+ . get ( neighbor )
282
+ . ok_or_else ( || format ! ( "Node: {} does not exist" , neighbor ) ) ? ;
290
283
node_layer. push ( nn. downgrade ( ) ) ;
291
284
}
292
285
target. write ( ) . neighbors . push ( node_layer) ;
@@ -297,10 +290,10 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
297
290
for layer in & ir. layers {
298
291
let mut node_layer = HashSet :: with_capacity ( layer. len ( ) ) ;
299
292
for node_name in layer {
300
- let node = match index. nodes . get ( node_name ) {
301
- Some ( n ) => n ,
302
- None => return Err ( format ! ( "Node: {} does not exist" , node_name) . into ( ) ) ,
303
- } ;
293
+ let node = index
294
+ . nodes
295
+ . get ( node_name)
296
+ . ok_or_else ( || format ! ( "Node: {} does not exist" , node_name ) ) ? ;
304
297
node_layer. insert ( node. downgrade ( ) ) ;
305
298
}
306
299
index. layers . push ( node_layer) ;
@@ -309,10 +302,10 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
309
302
// set enterpoint
310
303
index. enterpoint = match & ir. enterpoint {
311
304
Some ( node_name) => {
312
- let node = match index. nodes . get ( node_name ) {
313
- Some ( n ) => n ,
314
- None => return Err ( format ! ( "Node: {} does not exist" , node_name) . into ( ) ) ,
315
- } ;
305
+ let node = index
306
+ . nodes
307
+ . get ( node_name)
308
+ . ok_or_else ( || format ! ( "Node: {} does not exist" , node_name ) ) ? ;
316
309
Some ( node. downgrade ( ) )
317
310
}
318
311
None => None ,
@@ -353,19 +346,16 @@ fn add_node(ctx: &Context, args: Vec<String>) -> RedisResult {
353
346
let data = dataf64. iter ( ) . map ( |d| * d as f32 ) . collect :: < Vec < f32 > > ( ) ;
354
347
355
348
let index = load_index ( ctx, & index_name) ?;
356
- let mut index = match index. try_write ( ) {
357
- Ok ( index) => index,
358
- Err ( e) => return Err ( e. to_string ( ) . into ( ) ) ,
359
- } ;
349
+ let mut index = index. try_write ( ) . map_err ( |e| e. to_string ( ) ) ?;
360
350
361
351
let up = |name : String , node : Node < f32 > | {
362
352
write_node ( ctx, & name, ( & node) . into ( ) ) . unwrap ( ) ;
363
353
} ;
364
354
365
355
ctx. log_debug ( format ! ( "Adding node: {} to Index: {}" , & node_name, & index_name) . as_str ( ) ) ;
366
- if let Err ( e ) = index. add_node ( & node_name , & data , up ) {
367
- return Err ( e . error_string ( ) . into ( ) ) ;
368
- }
356
+ index
357
+ . add_node ( & node_name , & data , up )
358
+ . map_err ( |e| e . error_string ( ) ) ? ;
369
359
370
360
// write node to redis
371
361
let node = index. nodes . get ( & node_name) . unwrap ( ) ;
@@ -389,10 +379,7 @@ fn delete_node(ctx: &Context, args: Vec<String>) -> RedisResult {
389
379
let node_name = format ! ( "{}.{}.{}" , PREFIX , index_suffix, node_suffix) ;
390
380
391
381
let index = load_index ( ctx, & index_name) ?;
392
- let mut index = match index. try_write ( ) {
393
- Ok ( index) => index,
394
- Err ( e) => return Err ( e. to_string ( ) . into ( ) ) ,
395
- } ;
382
+ let mut index = index. try_write ( ) . map_err ( |e| e. to_string ( ) ) ?;
396
383
397
384
let node = index. nodes . get ( & node_name) . unwrap ( ) ;
398
385
if Arc :: strong_count ( & node. 0 ) > 1 {
@@ -407,9 +394,9 @@ fn delete_node(ctx: &Context, args: Vec<String>) -> RedisResult {
407
394
write_node ( ctx, & name, ( & node) . into ( ) ) . unwrap ( ) ;
408
395
} ;
409
396
410
- if let Err ( e ) = index. delete_node ( & node_name , up ) {
411
- return Err ( e . error_string ( ) . into ( ) ) ;
412
- }
397
+ index
398
+ . delete_node ( & node_name , up )
399
+ . map_err ( |e| e . error_string ( ) ) ? ;
413
400
414
401
delete_node_redis ( ctx, & node_name) ?;
415
402
@@ -449,17 +436,11 @@ fn get_node(ctx: &Context, args: Vec<String>) -> RedisResult {
449
436
450
437
let key = ctx. open_key ( & node_name) ;
451
438
452
- let value = match key. get_value :: < NodeRedis > ( & HNSW_NODE_REDIS_TYPE ) ? {
453
- Some ( node) => node. into ( ) ,
454
- None => {
455
- return Err ( RedisError :: String ( format ! (
456
- "Node: {} does not exist" ,
457
- & node_name
458
- ) ) ) ;
459
- }
460
- } ;
439
+ let value = key
440
+ . get_value :: < NodeRedis > ( & HNSW_NODE_REDIS_TYPE ) ?
441
+ . ok_or_else ( || format ! ( "Node: {} does not exist" , & node_name) ) ?;
461
442
462
- Ok ( value)
443
+ Ok ( value. into ( ) )
463
444
}
464
445
465
446
fn write_node < ' a > ( ctx : & ' a Context , key : & str , node : NodeRedis ) -> RedisResult {
@@ -490,10 +471,7 @@ fn search_knn(ctx: &Context, args: Vec<String>) -> RedisResult {
490
471
491
472
let index_name = format ! ( "{}.{}" , PREFIX , index_suffix) ;
492
473
let index = load_index ( ctx, & index_name) ?;
493
- let index = match index. try_read ( ) {
494
- Ok ( index) => index,
495
- Err ( e) => return Err ( e. to_string ( ) . into ( ) ) ,
496
- } ;
474
+ let index = index. try_read ( ) . map_err ( |e| e. to_string ( ) ) ?;
497
475
498
476
ctx. log_debug (
499
477
format ! (
0 commit comments