Skip to content

Commit 8b0a9fe

Browse files
committed
cleanup code
1 parent ba90480 commit 8b0a9fe

File tree

1 file changed

+49
-71
lines changed

1 file changed

+49
-71
lines changed

src/lib.rs

Lines changed: 49 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,7 @@ fn get_index(ctx: &Context, args: Vec<String>) -> RedisResult {
179179
let index_name = format!("{}.{}", PREFIX, name_suffix);
180180

181181
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())?;
187183
ctx.log_debug(format!("Index: {:?}", index).as_str());
188184
ctx.log_debug(format!("Layers: {:?}", index.layers.len()).as_str());
189185
ctx.log_debug(format!("Nodes: {:?}", index.nodes.len()).as_str());
@@ -201,6 +197,18 @@ fn delete_index(ctx: &Context, args: Vec<String>) -> RedisResult {
201197
let name_suffix = parsed.remove("name").unwrap().as_string()?;
202198
let index_name = format!("{}.{}", PREFIX, name_suffix);
203199

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+
204212
// get index from redis
205213
ctx.log_debug(format!("deleting index: {}", &index_name).as_str());
206214
let rkey = ctx.open_key_writable(&index_name);
@@ -215,20 +223,6 @@ fn delete_index(ctx: &Context, args: Vec<String>) -> RedisResult {
215223
}
216224
};
217225

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-
232226
Ok(1_usize.into())
233227
}
234228

@@ -243,10 +237,10 @@ fn load_index(ctx: &Context, index_name: &str) -> Result<IndexArc, RedisError> {
243237
ctx.log_debug(format!("get key: {}", &index_name).as_str());
244238
let rkey = ctx.open_key(&index_name);
245239

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+
250244
let index = make_index(ctx, index_redis)?;
251245
v.insert(Arc::new(RwLock::new(index)))
252246
}
@@ -262,10 +256,10 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
262256
for node_name in &ir.nodes {
263257
let key = ctx.open_key(&node_name);
264258

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+
269263
let node = Node::new(node_name, &nr.data, index.m_max_0);
270264
index.nodes.insert(node_name.to_owned(), node);
271265
}
@@ -276,17 +270,16 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
276270

277271
let key = ctx.open_key(&node_name);
278272

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))?;
283276
for layer in &nr.neighbors {
284277
let mut node_layer = Vec::with_capacity(layer.len());
285278
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))?;
290283
node_layer.push(nn.downgrade());
291284
}
292285
target.write().neighbors.push(node_layer);
@@ -297,10 +290,10 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
297290
for layer in &ir.layers {
298291
let mut node_layer = HashSet::with_capacity(layer.len());
299292
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))?;
304297
node_layer.insert(node.downgrade());
305298
}
306299
index.layers.push(node_layer);
@@ -309,10 +302,10 @@ fn make_index(ctx: &Context, ir: &IndexRedis) -> Result<IndexT, RedisError> {
309302
// set enterpoint
310303
index.enterpoint = match &ir.enterpoint {
311304
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))?;
316309
Some(node.downgrade())
317310
}
318311
None => None,
@@ -353,19 +346,16 @@ fn add_node(ctx: &Context, args: Vec<String>) -> RedisResult {
353346
let data = dataf64.iter().map(|d| *d as f32).collect::<Vec<f32>>();
354347

355348
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())?;
360350

361351
let up = |name: String, node: Node<f32>| {
362352
write_node(ctx, &name, (&node).into()).unwrap();
363353
};
364354

365355
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())?;
369359

370360
// write node to redis
371361
let node = index.nodes.get(&node_name).unwrap();
@@ -389,10 +379,7 @@ fn delete_node(ctx: &Context, args: Vec<String>) -> RedisResult {
389379
let node_name = format!("{}.{}.{}", PREFIX, index_suffix, node_suffix);
390380

391381
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())?;
396383

397384
let node = index.nodes.get(&node_name).unwrap();
398385
if Arc::strong_count(&node.0) > 1 {
@@ -407,9 +394,9 @@ fn delete_node(ctx: &Context, args: Vec<String>) -> RedisResult {
407394
write_node(ctx, &name, (&node).into()).unwrap();
408395
};
409396

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())?;
413400

414401
delete_node_redis(ctx, &node_name)?;
415402

@@ -449,17 +436,11 @@ fn get_node(ctx: &Context, args: Vec<String>) -> RedisResult {
449436

450437
let key = ctx.open_key(&node_name);
451438

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))?;
461442

462-
Ok(value)
443+
Ok(value.into())
463444
}
464445

465446
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 {
490471

491472
let index_name = format!("{}.{}", PREFIX, index_suffix);
492473
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())?;
497475

498476
ctx.log_debug(
499477
format!(

0 commit comments

Comments
 (0)