Listen for responses of supervisors
Signed-off-by: Lee Smet <lee.smet@hotmail.com>
This commit is contained in:
@@ -751,4 +751,80 @@ impl RedisDriver {
|
||||
out.sort_unstable();
|
||||
Ok(out)
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Supervisor correlation mapping (DB 0)
|
||||
// Key: "supcorr:{inner_id_decimal}"
|
||||
// Value: JSON {"context_id":u32,"caller_id":u32,"job_id":u32,"message_id":u32}
|
||||
// TTL: 1 hour to avoid leaks in case of crashes
|
||||
pub async fn supcorr_set(
|
||||
&self,
|
||||
inner_id: u64,
|
||||
context_id: u32,
|
||||
caller_id: u32,
|
||||
job_id: u32,
|
||||
message_id: u32,
|
||||
) -> Result<()> {
|
||||
let mut cm = self.manager_for_db(0).await?;
|
||||
let key = format!("supcorr:{}", inner_id);
|
||||
let val = serde_json::json!({
|
||||
"context_id": context_id,
|
||||
"caller_id": caller_id,
|
||||
"job_id": job_id,
|
||||
"message_id": message_id,
|
||||
})
|
||||
.to_string();
|
||||
// SET key val EX 3600
|
||||
let _: () = redis::cmd("SET")
|
||||
.arg(&key)
|
||||
.arg(&val)
|
||||
.arg("EX")
|
||||
.arg(3600)
|
||||
.query_async(&mut cm)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
error!(db=0, key=%key, error=%e, "SET supcorr_set failed");
|
||||
e
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn supcorr_get(
|
||||
&self,
|
||||
inner_id: u64,
|
||||
) -> Result<Option<(u32, u32, u32, u32)>> {
|
||||
let mut cm = self.manager_for_db(0).await?;
|
||||
let key = format!("supcorr:{}", inner_id);
|
||||
let res: Option<String> = redis::cmd("GET")
|
||||
.arg(&key)
|
||||
.query_async(&mut cm)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
error!(db=0, key=%key, error=%e, "GET supcorr_get failed");
|
||||
e
|
||||
})?;
|
||||
if let Some(s) = res {
|
||||
let v: Value = serde_json::from_str(&s)?;
|
||||
let ctx = v.get("context_id").and_then(|x| x.as_u64()).unwrap_or(0) as u32;
|
||||
let caller = v.get("caller_id").and_then(|x| x.as_u64()).unwrap_or(0) as u32;
|
||||
let job = v.get("job_id").and_then(|x| x.as_u64()).unwrap_or(0) as u32;
|
||||
let msg = v.get("message_id").and_then(|x| x.as_u64()).unwrap_or(0) as u32;
|
||||
return Ok(Some((ctx, caller, job, msg)));
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
pub async fn supcorr_del(&self, inner_id: u64) -> Result<()> {
|
||||
let mut cm = self.manager_for_db(0).await?;
|
||||
let key = format!("supcorr:{}", inner_id);
|
||||
let _: i64 = redis::cmd("DEL")
|
||||
.arg(&key)
|
||||
.query_async(&mut cm)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
error!(db=0, key=%key, error=%e, "DEL supcorr_del failed");
|
||||
e
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user