Fix: async RwLock read ennen Mutex-scopea (Send-yhteensopivuus)
This commit is contained in:
@@ -1310,12 +1310,13 @@ async fn api_chat_completions(
|
|||||||
|
|
||||||
// Etsitään vapaa solmu — älykäs reititys kyvykkyyden mukaan
|
// Etsitään vapaa solmu — älykäs reititys kyvykkyyden mukaan
|
||||||
let want_heavy = payload.capability.as_deref() == Some("heavy");
|
let want_heavy = payload.capability.as_deref() == Some("heavy");
|
||||||
|
// Haetaan param_b-snapshot ennen Mutex-lukituksia (async RwLock ei saa olla Mutex-scopen sisällä)
|
||||||
|
let param_b_snapshot: HashMap<u64, u32> = state.node_max_param_b.read().await.clone();
|
||||||
let (target_node, _total_matching) = {
|
let (target_node, _total_matching) = {
|
||||||
let tasks = state.node_tasks.lock().unwrap();
|
let tasks = state.node_tasks.lock().unwrap();
|
||||||
let _busy = state.node_busy.lock().unwrap();
|
let _busy = state.node_busy.lock().unwrap();
|
||||||
let node_types = state.node_types.lock().unwrap();
|
let node_types = state.node_types.lock().unwrap();
|
||||||
let paused = state.node_paused.lock().unwrap();
|
let paused = state.node_paused.lock().unwrap();
|
||||||
let param_b = state.node_max_param_b.read().await;
|
|
||||||
let matching: Vec<u64> = tasks.iter().filter(|(k, task)| {
|
let matching: Vec<u64> = tasks.iter().filter(|(k, task)| {
|
||||||
if paused.contains(k) { return false; } // Ei sallita tauotettuja
|
if paused.contains(k) { return false; } // Ei sallita tauotettuja
|
||||||
// Eksakti match tai qwen-perheen yhteensopivuus (selain: qwen-coder-05b, natiivi: qwen2.5-coder:7b)
|
// Eksakti match tai qwen-perheen yhteensopivuus (selain: qwen-coder-05b, natiivi: qwen2.5-coder:7b)
|
||||||
@@ -1333,7 +1334,7 @@ async fn api_chat_completions(
|
|||||||
let any = if want_heavy {
|
let any = if want_heavy {
|
||||||
// Heavy: priorisoi solmu jolla on suurin malli (B-parametrit)
|
// Heavy: priorisoi solmu jolla on suurin malli (B-parametrit)
|
||||||
let mut ranked: Vec<(u64, u32)> = matching.iter().map(|id| {
|
let mut ranked: Vec<(u64, u32)> = matching.iter().map(|id| {
|
||||||
(*id, param_b.get(id).copied().unwrap_or(0))
|
(*id, param_b_snapshot.get(id).copied().unwrap_or(0))
|
||||||
}).collect();
|
}).collect();
|
||||||
ranked.sort_by(|a, b| b.1.cmp(&a.1)); // suurin ensin
|
ranked.sort_by(|a, b| b.1.cmp(&a.1)); // suurin ensin
|
||||||
if let Some((best_id, best_b)) = ranked.first() {
|
if let Some((best_id, best_b)) = ranked.first() {
|
||||||
|
|||||||
Reference in New Issue
Block a user