diff --git a/Cargo.lock b/Cargo.lock index d683cb5..c40f330 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -103,7 +103,7 @@ dependencies = [ [[package]] name = "affinidi-messaging-didcomm" -version = "0.8.3" +version = "0.8.4" dependencies = [ "affinidi-did-resolver-cache-sdk", "anyhow", @@ -130,7 +130,7 @@ dependencies = [ [[package]] name = "affinidi-messaging-helpers" -version = "0.8.3" +version = "0.8.4" dependencies = [ "affinidi-did-resolver-cache-sdk", "affinidi-messaging-didcomm", @@ -160,7 +160,7 @@ dependencies = [ [[package]] name = "affinidi-messaging-mediator" -version = "0.8.3" +version = "0.8.4" dependencies = [ "affinidi-did-resolver-cache-sdk", "affinidi-messaging-didcomm", @@ -192,6 +192,7 @@ dependencies = [ "reqwest 0.12.9", "ring", "rustls 0.23.20", + "semver", "serde", "serde_json", "sha256", @@ -208,14 +209,14 @@ dependencies = [ [[package]] name = "affinidi-messaging-processor" -version = "0.8.3" +version = "0.8.4" dependencies = [ "tokio", ] [[package]] name = "affinidi-messaging-sdk" -version = "0.8.3" +version = "0.8.4" dependencies = [ "affinidi-did-resolver-cache-sdk", "affinidi-messaging-didcomm", @@ -253,7 +254,7 @@ dependencies = [ [[package]] name = "affinidi-messaging-text-client" -version = "0.8.3" +version = "0.8.4" dependencies = [ "affinidi-did-resolver-cache-sdk", "affinidi-messaging-didcomm", diff --git a/Cargo.toml b/Cargo.toml index fb97199..0e74c8f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ members = [ resolver = "2" [workspace.package] -version = '0.8.3' +version = '0.8.4' edition = "2021" authors = ["Glenn Gore "] description = "Affinidi Messaging" @@ -105,3 +105,4 @@ tui-logger = { version = "0.14", features = ["tracing-support"] } url = "2.5" uuid = { version = "1.11", features = ["v4", "fast-rng"] } varint = "0.9" +semver = "1.0.24" \ No newline at end of file diff --git a/affinidi-messaging-mediator/Cargo.toml b/affinidi-messaging-mediator/Cargo.toml index a3fc537..34be8ce 100644 --- a/affinidi-messaging-mediator/Cargo.toml +++ b/affinidi-messaging-mediator/Cargo.toml @@ -49,6 +49,7 @@ tower-http.workspace = true tracing.workspace = true tracing-subscriber.workspace = true uuid.workspace = true +semver.workspace = true [dev-dependencies] console.workspace = true diff --git a/affinidi-messaging-mediator/src/database/handlers.rs b/affinidi-messaging-mediator/src/database/handlers.rs index 1238fab..376bac2 100644 --- a/affinidi-messaging-mediator/src/database/handlers.rs +++ b/affinidi-messaging-mediator/src/database/handlers.rs @@ -2,10 +2,11 @@ use super::DatabaseHandler; use crate::common::{config::Config, errors::MediatorError}; use deadpool_redis::Connection; use redis::aio::PubSub; +use semver::{Version, VersionReq}; use std::{fs::read_to_string, thread::sleep, time::Duration}; use tracing::{error, event, info, Level}; -const REDIS_VERSION: &str = "7.2"; // required Redis version +const REDIS_VERSION_REQ: &str = ">=7.1, <8.0"; impl DatabaseHandler { pub async fn new(config: &Config) -> Result { @@ -124,6 +125,11 @@ impl DatabaseHandler { /// Helper function to check the version of the Redis Server async fn _check_server_version(database: &DatabaseHandler) -> Result { + let redis_version_req: VersionReq = match VersionReq::parse(REDIS_VERSION_REQ) { + Ok(result) => result, + Err(err) => panic!("Couldn't process required Redis version. Reason: {}", err), + }; + let mut conn = database.get_async_connection().await?; let server_info: String = match deadpool_redis::redis::cmd("INFO") .arg("SERVER") @@ -156,19 +162,29 @@ async fn _check_server_version(database: &DatabaseHandler) -> Result result, + Err(err) => { + error!("Cannot parse Redis version ({}). Reason: {}", version, err); + return Err(MediatorError::DatabaseError( + "NA".into(), + format!("Cannot parse Redis version ({}). Reason: {}", version, err), + )); + } + }; + if redis_version_req.matches(&semver_version) { info!("Redis version is compatible: {}", version); Ok(version.to_owned()) } else { error!( - "Redis version ({}) must be equal to major.minor: ({})", - version, REDIS_VERSION + "Redis version ({}) must match ({})", + version, REDIS_VERSION_REQ ); Err(MediatorError::DatabaseError( "NA".into(), format!( - "Redis version ({}) must be equal to major.minor: ({})", - version, REDIS_VERSION + "Redis version ({}) must match ({})", + version, REDIS_VERSION_REQ ), )) }