Improved tracing (closes #180 closes #417 closes #376 closes #418 closes #517)

This commit is contained in:
mdecimus
2024-07-30 16:12:34 +02:00
parent a45eb50231
commit d29d21692e
65 changed files with 2005 additions and 1112 deletions

View File

@@ -29,7 +29,7 @@ use ::managesieve::core::ManageSieveSessionManager;
use common::{
config::{
server::{ServerProtocol, Servers},
tracers::Tracer,
tracers::Tracers,
},
Core, Ipc, IPC_CHANNEL_BUFFER,
};
@@ -47,7 +47,6 @@ use tokio::{
net::TcpStream,
sync::{mpsc, watch},
};
use trc::collector::Collector;
use utils::config::Config;
use crate::{add_test_certs, directory::DirectoryStore, store::TempDir, AssertConfig};
@@ -313,7 +312,13 @@ async fn init_imap_tests(store_id: &str, delete_if_exists: bool) -> IMAPTest {
let ipc = Ipc { delivery_tx };
// Init servers
let smtp = SMTP::init(&mut config, shared_core.clone(), ipc).await;
let smtp = SMTP::init(
&mut config,
shared_core.clone(),
ipc,
servers.span_id_gen.clone(),
)
.await;
let jmap = JMAP::init(
&mut config,
delivery_rx,
@@ -411,14 +416,7 @@ async fn init_imap_tests(store_id: &str, delete_if_exists: bool) -> IMAPTest {
#[tokio::test]
pub async fn imap_tests() {
if let Ok(level) = std::env::var("LOG") {
let level = level.parse().unwrap();
Collector::set_level(level);
Tracer::Stdout {
id: "stdout".to_string(),
level,
ansi: true,
}
.spawn();
Tracers::test_tracer(level.parse().unwrap());
}
// Prepare settings

View File

@@ -13,7 +13,7 @@ use base64::{
use common::{
config::{
server::{ServerProtocol, Servers},
tracers::Tracer,
tracers::Tracers,
},
manager::config::{ConfigManager, Patterns},
Core, Ipc, IPC_CHANNEL_BUFFER,
@@ -35,7 +35,6 @@ use store::{
IterateParams, Stores, SUBSPACE_PROPERTY,
};
use tokio::sync::{mpsc, watch};
use trc::collector::Collector;
use utils::config::Config;
use webhooks::{spawn_mock_webhook_endpoint, MockWebhookEndpoint};
@@ -289,14 +288,7 @@ throttle = "100ms"
#[tokio::test(flavor = "multi_thread")]
pub async fn jmap_tests() {
if let Ok(level) = std::env::var("LOG") {
let level = level.parse().unwrap();
Collector::set_level(level);
Tracer::Stdout {
id: "stdout".to_string(),
level,
ansi: true,
}
.spawn();
Tracers::test_tracer(level.parse().unwrap());
}
let delete = true;
@@ -343,14 +335,7 @@ pub async fn jmap_tests() {
#[ignore]
pub async fn jmap_stress_tests() {
if let Ok(level) = std::env::var("LOG") {
let level = level.parse().unwrap();
Collector::set_level(level);
Tracer::Stdout {
id: "stdout".to_string(),
level,
ansi: true,
}
.spawn();
Tracers::test_tracer(level.parse().unwrap());
}
let params = init_jmap_tests(
@@ -481,7 +466,13 @@ async fn init_jmap_tests(store_id: &str, delete_if_exists: bool) -> JMAPTest {
let ipc = Ipc { delivery_tx };
// Init servers
let smtp = SMTP::init(&mut config, shared_core.clone(), ipc).await;
let smtp = SMTP::init(
&mut config,
shared_core.clone(),
ipc,
servers.span_id_gen.clone(),
)
.await;
let jmap = JMAP::init(
&mut config,
delivery_rx,

View File

@@ -317,7 +317,7 @@ fn parse_servers() {
}],
max_connections: 8192,
proxy_networks: vec![],
id_generator: id_generator.clone(),
span_id_gen: id_generator.clone(),
},
Server {
id: "smtps".to_string(),
@@ -342,7 +342,7 @@ fn parse_servers() {
],
max_connections: 1024,
proxy_networks: vec![],
id_generator: id_generator.clone(),
span_id_gen: id_generator.clone(),
},
Server {
id: "submission".to_string(),
@@ -357,7 +357,7 @@ fn parse_servers() {
}],
max_connections: 8192,
proxy_networks: vec![],
id_generator: id_generator.clone(),
span_id_gen: id_generator.clone(),
},
];

View File

@@ -133,7 +133,7 @@ impl QueueReceiver {
pub async fn expect_message_then_deliver(&mut self) -> DeliveryAttempt {
let message = self.expect_message().await;
self.delivery_attempt(message.id).await
self.delivery_attempt(message.queue_id).await
}
pub async fn delivery_attempt(&mut self, queue_id: u64) -> DeliveryAttempt {
@@ -183,7 +183,7 @@ impl QueueReceiver {
IterateParams::new(from_key, to_key).descending(),
|key, value| {
let value = Bincode::<Message>::deserialize(value)?;
assert_eq!(key.deserialize_be_u64(0)?, value.inner.id);
assert_eq!(key.deserialize_be_u64(0)?, value.inner.queue_id);
messages.push(value.inner);
Ok(true)
},
@@ -243,7 +243,8 @@ impl QueueReceiver {
}
pub async fn last_queued_due(&self) -> u64 {
self.message_due(self.last_queued_message().await.id).await
self.message_due(self.last_queued_message().await.queue_id)
.await
}
pub async fn message_due(&self, queue_id: QueueId) -> u64 {
@@ -262,7 +263,7 @@ impl QueueReceiver {
pub async fn clear_queue(&self, core: &SMTP) {
for message in self.read_queued_messages().await {
let due = self.message_due(message.id).await;
let due = self.message_due(message.queue_id).await;
message.remove(core, due).await;
}
}

View File

@@ -101,7 +101,7 @@ async fn fallback_relay() {
let mut retry = local.qr.expect_message().await;
let prev_due = retry.domains[0].retry.due;
let next_due = now();
let queue_id = retry.id;
let queue_id = retry.queue_id;
retry.domains[0].retry.due = next_due;
retry
.save_changes(&core, prev_due.into(), next_due.into())

View File

@@ -133,7 +133,7 @@ async fn smtp_delivery() {
assert_eq!(num_domains, 3);
local
.qr
.delivery_attempt(message.id)
.delivery_attempt(message.queue_id)
.await
.try_deliver(core.clone())
.await;

View File

@@ -90,7 +90,7 @@ async fn starttls_optional() {
let mut retry = local.qr.expect_message().await;
let prev_due = retry.domains[0].retry.due;
let next_due = now();
let queue_id = retry.id;
let queue_id = retry.queue_id;
retry.domains[0].retry.due = next_due;
retry
.save_changes(&core, prev_due.into(), next_due.into())

View File

@@ -45,7 +45,8 @@ async fn generate_dsn() {
let flags = RCPT_NOTIFY_FAILURE | RCPT_NOTIFY_DELAY | RCPT_NOTIFY_SUCCESS;
let mut message = Message {
size,
id: 0,
queue_id: 0,
span_id: 0,
created: SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.map_or(0, |d| d.as_secs()),

View File

@@ -123,10 +123,11 @@ fn delivery_events() {
assert!(message.next_event().is_none());
}
pub fn new_message(id: u64) -> Message {
pub fn new_message(queue_id: u64) -> Message {
Message {
size: 0,
id,
queue_id,
span_id: 0,
created: 0,
return_path: "sender@foobar.org".to_string(),
return_path_lcase: "".to_string(),

View File

@@ -165,7 +165,7 @@ async fn queue_retry() {
.await;
let now_ = now();
let message = qr.expect_message().await;
assert!([59, 60].contains(&(qr.message_due(message.id).await - now_)));
assert!([59, 60].contains(&(qr.message_due(message.queue_id).await - now_)));
assert!([59, 60].contains(&(message.next_delivery_event() - now_)));
assert!([3599, 3600].contains(&(message.domains.first().unwrap().expires - now_)));
assert!([54059, 54060].contains(&(message.domains.first().unwrap().notify.due - now_)));

View File

@@ -258,7 +258,8 @@ impl TestSession for Session<DummyIo> {
dsn_info: None,
},
],
self.core.inner.snowflake_id.generate().unwrap(),
self.core.inner.queue_id_gen.generate().unwrap(),
0,
)
.await;
assert_eq!(
@@ -360,7 +361,7 @@ impl TestServerInstance for ServerInstance {
limiter: ConcurrencyLimiter::new(100),
shutdown_rx,
proxy_networks: vec![],
id_generator: Arc::new(SnowflakeIdGenerator::new()),
span_id_gen: Arc::new(SnowflakeIdGenerator::new()),
}
}
}