Improved cache memory layout

This commit is contained in:
mdecimus
2025-04-13 08:40:40 +02:00
parent 15651c26a1
commit 0568456d29
51 changed files with 716 additions and 590 deletions

View File

@@ -8,7 +8,7 @@ use std::time::Duration;
use email::{
mailbox::{INBOX_ID, JUNK_ID},
message::cache::{MessageCache, MessageCacheAccess},
message::cache::{MessageCacheAccess, MessageCacheFetch},
};
use jmap_proto::types::{collection::Collection, id::Id};

View File

@@ -148,7 +148,7 @@ pub async fn test(params: &mut JMAPTest) {
batch.update_document(id as u32).log_delete(None);
}
LogAction::UpdateChild(id) => {
batch.log_child_update(Collection::Email, id as u32);
batch.log_parent_update(Collection::Email, id as u32);
}
LogAction::Move(old_id, new_id) => {
batch

View File

@@ -11,7 +11,7 @@ use crate::{
store::{deflate_test_resource, query::FIELDS},
};
use ::email::{mailbox::Mailbox, message::cache::MessageCache};
use ::email::{mailbox::Mailbox, message::cache::MessageCacheFetch};
use ahash::AHashSet;
use common::{config::jmap::settings::SpecialUse, storage::index::ObjectIndexBuilder};
use jmap_client::{
@@ -19,12 +19,12 @@ use jmap_client::{
core::query::{Comparator, Filter},
email,
};
use jmap_proto::types::{collection::Collection, id::Id, property::Property};
use jmap_proto::types::{collection::Collection, id::Id};
use mail_parser::{DateTime, HeaderName};
use store::{
ahash::AHashMap,
write::{BatchBuilder, ValueClass, now},
write::{BatchBuilder, now},
};
use super::JMAPTest;
@@ -73,24 +73,6 @@ pub async fn test(params: &mut JMAPTest, insert: bool) {
println!("Inserting JMAP Mail query test messages...");
create(client).await;
// Remove mailboxes
let mut batch = BatchBuilder::new();
batch
.with_account_id(account_id)
.with_collection(Collection::Mailbox);
for mailbox_id in 1545..3010 {
batch
.delete_document(mailbox_id)
.clear(ValueClass::Property(Property::EmailIds.into()));
}
server
.core
.storage
.data
.write(batch.build_all())
.await
.unwrap();
assert_eq!(
params
.server
@@ -98,7 +80,7 @@ pub async fn test(params: &mut JMAPTest, insert: bool) {
.await
.unwrap()
.items
.values()
.iter()
.map(|m| m.thread_id)
.collect::<AHashSet<_>>()
.len(),
@@ -797,6 +779,27 @@ pub async fn create(client: &mut Client) {
total_messages += 1;
let mut keywords = Vec::new();
for keyword in [
values_str["medium"].to_string(),
values_str["artistRole"].to_string(),
values_str["accession_number"][0..1].to_string(),
format!(
"N{}",
&values_str["accession_number"][values_str["accession_number"].len() - 1..]
),
] {
if keyword == "attributed to"
|| keyword == "T"
|| keyword == "N0"
|| keyword == "N"
|| keyword == "artist"
|| keyword == "Bronze"
{
keywords.push(keyword);
}
}
client
.email_import(
format!(
@@ -821,15 +824,7 @@ pub async fn create(client: &mut Client) {
Id::new(values_int["year"] as u64).to_string(),
Id::new((values_int["acquisitionYear"] + 1000) as u64).to_string(),
],
[
values_str["medium"].to_string(),
values_str["artistRole"].to_string(),
values_str["accession_number"][0..1].to_string(),
format!(
"N{}",
&values_str["accession_number"][values_str["accession_number"].len() - 1..]
),
]
keywords
.into(),
Some(values_int["year"] as i64),
)

View File

@@ -373,8 +373,8 @@ pub async fn jmap_tests() {
)
.await;
webhooks::test(&mut params).await;
//email_query::test(&mut params, delete).await;
/*webhooks::test(&mut params).await;
email_query::test(&mut params, delete).await;
email_get::test(&mut params).await;
email_set::test(&mut params).await;
email_parse::test(&mut params).await;
@@ -382,8 +382,8 @@ pub async fn jmap_tests() {
email_changes::test(&mut params).await;
email_query_changes::test(&mut params).await;
email_copy::test(&mut params).await;
thread_get::test(&mut params).await;
//thread_merge::test(&mut params).await;
thread_get::test(&mut params).await;*/
thread_merge::test(&mut params).await;
mailbox::test(&mut params).await;
delivery::test(&mut params).await;
auth_acl::test(&mut params).await;

View File

@@ -10,7 +10,7 @@ use directory::{QueryBy, backend::internal::manage::ManageDirectory};
use email::{
mailbox::{INBOX_ID, JUNK_ID, TRASH_ID},
message::{
cache::{MessageCache, MessageCacheAccess},
cache::{MessageCacheAccess, MessageCacheFetch},
delete::EmailDeletion,
},
};

View File

@@ -10,7 +10,7 @@ use crate::jmap::{mailbox::destroy_all_mailboxes_no_wait, wait_for_index};
use common::Server;
use directory::backend::internal::manage::ManageDirectory;
use email::message::{
cache::{MessageCache, MessageCacheAccess},
cache::{MessageCacheAccess, MessageCacheFetch},
metadata::MessageData,
};
use futures::future::join_all;
@@ -223,7 +223,7 @@ async fn email_tests(server: Server, client: Arc<Client>) {
.await
.unwrap()
.in_mailbox(mailbox_id)
.map(|(id, _)| id),
.map(|m| m.document_id),
);
let mut email_ids_check = email_ids_in_mailbox.clone();
email_ids_check &= &email_ids;