Restructured cache. Added Redis|Valkey|Dragonfly support.

This commit is contained in:
Ara Sadoyan
2026-10-19 19:13:24 +02:00
parent a2b14b0dea
commit f895ba4554
13 changed files with 426 additions and 45 deletions
+12 -12
View File
@@ -2,7 +2,7 @@ use crate::utils::deser::{send_to_worker, serialize_config};
use crate::utils::healthcheck;
use crate::utils::lazylock::{DOMAINS, GLOBAL_PARAMS, IM_A_MASTER, MASTER_KEY, NODE_STATUS, REVERSE_STORE, WORKERS};
use crate::utils::state::{is_first_run, mark_not_first_run};
use crate::utils::tools::clone_dashmap_into;
use crate::utils::tools::{Die, clone_dashmap_into};
use crate::utils::types::*;
use dashmap::DashMap;
use log::{error, info, warn};
@@ -245,7 +245,7 @@ async fn populate_file_upstreams(config: &mut Configuration, parsed: &Config) {
}
{
let mut config_guard = GLOBAL_PARAMS.write().expect("Global config lock poisoned");
let mut config_guard = GLOBAL_PARAMS.write().die("Global config lock poisoned");
config_guard.client_headers = config.client_headers.clone();
config_guard.server_headers = config.server_headers.clone();
config_guard.extraparams = config.extraparams.clone();
@@ -274,8 +274,8 @@ async fn populate_file_upstreams(config: &mut Configuration, parsed: &Config) {
}
}
pub fn parce_main_config(path: &str) -> AppConfig {
let data = fs::read_to_string(path).expect("Failed to read main config file");
let mut cfo: AppConfig = noyalib::from_str(&data).expect("Failed to parse main config file");
let data = fs::read_to_string(path).die("Failed to read main config file");
let mut cfo: AppConfig = noyalib::from_str(&data).die("Failed to parse main config file");
if let Ok(jwt_key) = env::var("MASTER_KEY") {
cfo.master_key = Some(jwt_key);
} else if let Ok(jwt_key) = env::var("JWT_KEY") {
@@ -301,19 +301,19 @@ pub fn parce_main_config(path: &str) -> AppConfig {
cfo.proxy_tls_grade = parce_tls_grades(cfo.proxy_tls_grade.clone());
if let Some(member) = cfo.cluster_member.clone() {
NODE_STATUS.set(Some(Arc::from(member.as_str()))).expect("Config can only be initialized once");
let mk = cfo.master_key.clone().expect("In CLuster mode master key must be set");
MASTER_KEY.set(Some(Arc::from(mk.as_str()))).expect("Config can only be initialized once");
NODE_STATUS.set(Some(Arc::from(member.as_str()))).die("Config can only be initialized once");
let mk = cfo.master_key.clone().die("In CLuster mode master key must be set");
MASTER_KEY.set(Some(Arc::from(mk.as_str()))).die("Config can only be initialized once");
if member == "master" {
IM_A_MASTER.set(true).expect("Master status can only be initialized once");
let worker_str = cfo.worker_nodes.as_deref().expect("At least one worker must be set in master mode");
IM_A_MASTER.set(true).die("Master status can only be initialized once");
let worker_str = cfo.worker_nodes.as_deref().die("At least one worker must be set in master mode");
let mut wks = Vec::new();
for worker in worker_str.split(',') {
let clean = worker.replace("//", "");
let wk_vec = clean.trim().split(':').collect::<Vec<&str>>();
let wk = WorkerNodes {
address: Arc::from(wk_vec[1]),
port: wk_vec[2].parse::<u16>().expect("Invalid worker port number"),
port: wk_vec[2].parse::<u16>().die("Invalid worker port number"),
tls: match wk_vec[0] {
"https" => true,
"http" => false,
@@ -324,13 +324,13 @@ pub fn parce_main_config(path: &str) -> AppConfig {
wks.push(wk);
// println!("{:?}", wk);
// if let Some((host, port_str)) = worker.trim().split_once(':') {
// let port = port_str.parse::<u16>().expect("Invalid worker port number");
// let port = port_str.parse::<u16>().die("Invalid worker port number");
// wks.push((host.to_string(), port));
// } else {
// panic!("Invalid worker format, expected host:port");
// }
}
WORKERS.set(wks).expect("Workers list can only be initialized once");
WORKERS.set(wks).die("Workers list can only be initialized once");
}
}
cfo