Skip to content

Commit f314f94

Browse files
committed
editoast: adapt valkey wrappers to ensure unicity of the CacheOperations stored in valkey
Signed-off-by: SarrahElm <[email protected]>
1 parent 17617b3 commit f314f94

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

editoast/src/valkey_utils.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use deadpool_redis::redis::aio::ConnectionLike;
1818
use deadpool_redis::redis::cmd;
1919
use futures::FutureExt;
2020
use futures::future;
21+
use serde::Deserialize;
2122
use serde::Serialize;
2223
use serde::de::DeserializeOwned;
2324
use tracing::Level;
@@ -99,6 +100,19 @@ impl ConnectionLike for ValkeyConnection {
99100
}
100101
}
101102

103+
#[derive(Clone, Serialize)]
104+
struct ZaddWrapper<'a, M: Serialize> {
105+
member: &'a M,
106+
nonce: u64,
107+
}
108+
109+
#[derive(Clone, Deserialize)]
110+
struct ZrangebyscoreWrapper<M> {
111+
member: M,
112+
#[expect(dead_code)]
113+
nonce: u64,
114+
}
115+
102116
impl ValkeyConnection {
103117
/// Get a deserializable value from valkey
104118
#[tracing::instrument(name = "cache:json_get", skip(self), err)]
@@ -278,14 +292,15 @@ impl ValkeyConnection {
278292
pub async fn json_zadd<
279293
K: Debug + ToRedisArgs + Send + Sync,
280294
S: ToRedisArgs + Send + Sync,
281-
M: Serialize,
295+
M: Serialize + ToOwned,
282296
>(
283297
&mut self,
284298
key: K,
285299
member: &M,
286300
score: S,
287301
) -> Result<()> {
288-
let str_member = match serde_json::to_string(member) {
302+
let member = ZaddWrapper{member, nonce: rand::random()};
303+
let str_member = match serde_json::to_string(&member) {
289304
Ok(member) => member,
290305
Err(_) => {
291306
return Err(RedisError::from((
@@ -317,8 +332,8 @@ impl ValkeyConnection {
317332
let deserialized_members =
318333
serialized_members
319334
.into_iter()
320-
.filter_map(|value| match serde_json::from_str(&value) {
321-
Ok(value) => Some(value),
335+
.map(|value| match serde_json::from_str::<ZrangebyscoreWrapper<T>>(&value) {
336+
Ok(value) => Some(value.member),
322337
Err(e) => {
323338
tracing::warn!(
324339
"the cached value is not a valid JSON for type '{}': {e}",

0 commit comments

Comments
 (0)