diff --git a/editoast/src/redis_utils.rs b/editoast/src/redis_utils.rs index 34cf0767b67..88a59154906 100644 --- a/editoast/src/redis_utils.rs +++ b/editoast/src/redis_utils.rs @@ -2,6 +2,7 @@ use crate::client::RedisConfig; use crate::error::Result; use futures::future; use futures::FutureExt; +use opentelemetry::Key; use redis::aio::{ConnectionLike, ConnectionManager}; use redis::cluster::ClusterClient; use redis::cluster_async::ClusterConnection; @@ -83,6 +84,10 @@ impl RedisConnection { &mut self, keys: &[K], ) -> Result>> { + // Avoid mget to fail if keys is empty + if keys.is_empty() { + return Ok(vec![]); + } let values: Vec> = self.mget(keys).await?; values .into_iter() @@ -145,24 +150,26 @@ impl RedisConnection { &mut self, items: &[(K, T)], ) -> Result<()> { + // Avoid mset to fail if keys is empty if items.is_empty() { return Ok(()); } - let mut ser_items = vec![]; - for (key, value) in items.iter() { - let str_value = match serde_json::to_string(value) { - Ok(value) => value, - Err(_) => { - return Err(RedisError::from(( - ErrorKind::IoError, - "An error occured serializing to json", - )) - .into()) - } - }; - ser_items.push((key, str_value)); - } - self.mset(&ser_items).await?; + let serialized_items = items + .iter() + .map(|(key, value)| { + serde_json::to_string(value) + .map(|str_value| (key, str_value)) + .map_err(|_| { + RedisError::from(( + ErrorKind::IoError, + "An error occured serializing to json", + )) + .into() + }) + }) + .collect::>>()?; + + self.mset(&serialized_items).await?; Ok(()) } }