From 69dcdbd00bcb30710312d994fe92c8a75ddaf969 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 7 Aug 2022 13:48:37 +0200 Subject: [PATCH] fix: update logs even if last new log was < 500ms --- backend/src/worker.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/backend/src/worker.rs b/backend/src/worker.rs index 714c4b5275..82eab3e099 100644 --- a/backend/src/worker.rs +++ b/backend/src/worker.rs @@ -1002,7 +1002,16 @@ async fn handle_child( tx.send(out).await } }, - Ok(Some(err)) = stderr_reader.next_line() => tx.send(err).await, + Ok(Some(err)) = stderr_reader.next_line() => { + if err.len() > MAX_LOG_SIZE as usize { + tracing::info!("Line is too big"); + let _ = tx.send(format!("Line is too big")).await; + done4.store(true, Ordering::Relaxed); + break; + } else { + tx.send(err).await + } + }, else => { break }, @@ -1034,10 +1043,18 @@ async fn handle_child( }); let mut start = logs.chars().count(); + let mut last_update = chrono::Utc::now().timestamp_millis(); while !done.load(Ordering::Relaxed) { + let diff = 500 - (chrono::Utc::now().timestamp_millis() - last_update); + let sleeping_future = if diff > 0 as i64 { + tokio::time::sleep(Duration::from_millis(diff as u64)) + } else { + //TODO make it just resolve immediately + tokio::time::sleep(Duration::from_millis(0)) + }; tokio::select! { - _ = tokio::time::sleep(Duration::from_millis(500)) => { + _ = sleeping_future => { let end = logs.chars().count(); let to_send = logs.chars().skip(start).collect::(); @@ -1077,8 +1094,10 @@ async fn handle_child( tracing::error!("error setting canceled for id {}", id); } } + last_update = chrono::Utc::now().timestamp_millis(); }, nl = rx.recv() => { + if let Some(nl) = nl { if logs.chars().count() > MAX_LOG_SIZE as usize{ tracing::info!("Too many logs lines: {}", job.id);