fix: set journal_compression to None

This commit is contained in:
rustmailer
2026-04-09 03:46:02 +08:00
parent 286ae16057
commit 61161b5f3b
4 changed files with 26 additions and 30 deletions
Generated
+4 -4
View File
@@ -1527,9 +1527,9 @@ checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
[[package]]
name = "fjall"
version = "3.1.2"
version = "3.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a9530ff159bc3ad3a15da746da0f6e95375c2ac64708cbb85ec1ebd26761a84"
checksum = "fdf46551c9abc5fb0e0d540da36c875197285af2a29833892d7d3434b8617343"
dependencies = [
"byteorder-lite",
"byteview",
@@ -2737,9 +2737,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
[[package]]
name = "lsm-tree"
version = "3.1.2"
version = "3.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d67f95fd716870329c30aaeedf87f23d426564e6ce46efa045a91444faf2a19"
checksum = "f38ed727e0965f218f4e419231b9ecacc1db8fb5066cf1df0d2bafeef88459d4"
dependencies = [
"byteorder-lite",
"bytes 1.11.1",
+1 -1
View File
@@ -122,7 +122,7 @@ rcgen = "0.14.7"
rustls-pemfile = "2.2.0"
blake3 = "1.8.4"
uuid = { version = "1.23.0", features = ["v4", "serde"] }
fjall = { version = "3.1.2", features = ["lz4", "metrics", "bytes_1"] }
fjall = { version = "3.1.3", features = ["lz4", "metrics", "bytes_1"] }
tantivy = { version = "0.26.0", features = ["zstd-compression"] }
[dev-dependencies]
#bincode = "1.3.3"
+20 -24
View File
@@ -57,18 +57,17 @@ impl BlobManager {
fn process_detached_email(
eml: DetachedEmail,
store: &Database,
email_ks: &Keyspace,
attach_ks: &Keyspace,
) {
let (email_hash, email_data) = eml.email;
let mut batch = store.batch();
let mut needs_commit = false;
match email_ks.contains_key(&email_hash) {
Ok(false) => {
batch.insert(email_ks, email_hash.as_bytes(), email_data);
needs_commit = true;
if let Err(e) = email_ks.insert(email_hash, email_data) {
tracing::error!("CRITICAL: Failed to insert email: {:?}", e);
}
}
Err(e) => tracing::error!("Fjall email_ks error: {:?}", e),
_ => {}
@@ -78,29 +77,27 @@ impl BlobManager {
for (a_hash, a_data) in attachments {
match attach_ks.contains_key(&a_hash) {
Ok(false) => {
batch.insert(attach_ks, a_hash.as_bytes(), a_data);
needs_commit = true;
if let Err(e) = attach_ks.insert(a_hash, a_data) {
tracing::error!("CRITICAL: Failed to insert attachment: {:?}", e);
}
}
Err(e) => tracing::error!("Fjall attach_ks error: {:?}", e),
_ => {}
}
}
}
if needs_commit {
if let Err(e) = batch.commit() {
tracing::error!("Fjall Batch Commit Error: {:?}", e);
}
}
}
pub fn new() -> Self {
let db = Database::builder(&DATA_DIR_MANAGER.eml_dir)
.cache_size(64 * 1024 * 1024)
.max_cached_files(Some(400))
.max_journaling_size(256 * 1024 * 1024)
.journal_compression(CompressionType::None)
.max_journaling_size(64 * 1024 * 1024)
.open()
.expect("Failed to initialize Fjall database: Check if the directory exists and has write permissions.");
let email_keyspace = db
.keyspace("email", || {
KeyspaceCreateOptions::default()
@@ -111,15 +108,15 @@ impl BlobManager {
)
.with_kv_separation(Some(
KvSeparationOptions::default()
.separation_threshold(0)
.separation_threshold(1024)
.compression(CompressionType::Lz4)
.file_target_size(128 * 1024 * 1024)
.file_target_size(512 * 1024 * 1024)
.staleness_threshold(0.5)
.age_cutoff(0.6),
))
})
.expect("Failed to open 'email' keyspace: The partition metadata might be corrupted or inaccessible.");
let attachments_keyspace = db
.keyspace("attachments", || {
KeyspaceCreateOptions::default()
@@ -129,19 +126,18 @@ impl BlobManager {
)
.with_kv_separation(Some(
KvSeparationOptions::default()
.separation_threshold(0)
.separation_threshold(1024)
.compression(CompressionType::Lz4)
.file_target_size(256 * 1024 * 1024)
.file_target_size(512 * 1024 * 1024)
.staleness_threshold(0.5)
.age_cutoff(0.6),
))
.max_memtable_size(16 * 1024 * 1024)
})
.expect("Failed to open 'attachments' keyspace: Check disk space for blob storage initialization.");
let (sender, mut receiver) = mpsc::channel::<DetachedEmail>(100);
let store = db.clone();
let email_ks = email_keyspace.clone();
let attach_ks = attachments_keyspace.clone();
let handler = task::spawn(async move {
@@ -151,9 +147,9 @@ impl BlobManager {
res = receiver.recv() => {
match res {
Some(eml) => {
Self::process_detached_email(eml, &store, &email_ks, &attach_ks);
Self::process_detached_email(eml, &email_ks, &attach_ks);
while let Ok(next_eml) = receiver.try_recv() {
Self::process_detached_email(next_eml, &store, &email_ks, &attach_ks);
Self::process_detached_email(next_eml, &email_ks, &attach_ks);
}
}
None => {
@@ -171,7 +167,7 @@ impl BlobManager {
);
while let Some(eml) = receiver.recv().await {
Self::process_detached_email(eml, &store, &email_ks, &attach_ks);
Self::process_detached_email(eml, &email_ks, &attach_ks);
}
tracing::info!("BlobManager: All remaining tasks processed. Closing Fjall.");
@@ -290,7 +290,7 @@ export function UserProfileForm({ user }: UserProfileFormProps) {
{email.charAt(0).toUpperCase()}
</div>
<div className="flex flex-col min-w-0">
<span className="text-sm font-semibold truncate">
<span className="text-xs font-semibold truncate">
{email}
</span>
<span className="text-[10px] text-muted-foreground font-mono">