From 95c7d7295c4b87beb13b72d1beb6c689b6450b07 Mon Sep 17 00:00:00 2001 From: Frando Date: Tue, 30 Sep 2025 09:40:29 +0200 Subject: [PATCH] feat: upgrade redb to v3 compatible format --- Cargo.lock | 14 ++------------ Cargo.toml | 3 +-- src/store/fs.rs | 14 ++++++++++---- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8163031a..661f520e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2062,7 +2062,7 @@ dependencies = [ "postcard", "rand 0.9.2", "range-collections", - "redb 2.6.3", + "redb", "ref-cast", "reflink-copy", "self_cell", @@ -2104,8 +2104,7 @@ dependencies = [ "proptest", "rand 0.9.2", "rand_chacha 0.9.0", - "redb 1.5.1", - "redb 2.6.3", + "redb", "self_cell", "serde", "serde-error", @@ -3603,15 +3602,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "redb" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7f82ecd6ba647a39dd1a7172b8a1cd9453c0adee6da20cb553d83a9a460fa5" -dependencies = [ - "libc", -] - [[package]] name = "redb" version = "2.6.3" diff --git a/Cargo.toml b/Cargo.toml index 40a1cc41..93d0baeb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,8 +46,7 @@ postcard = { version = "1", default-features = false, features = [ ] } quinn = { package = "iroh-quinn", version = "0.14.0" } rand = "0.9.2" -redb = { version = "2.0.0" } -redb_v1 = { package = "redb", version = "1.5.1" } +redb = { version = "2.6.3" } self_cell = "1.0.3" serde = { version = "1.0.164", features = ["derive"] } serde-error = "0.1.3" diff --git a/src/store/fs.rs b/src/store/fs.rs index 61da2ac4..6a0f6c54 100644 --- a/src/store/fs.rs +++ b/src/store/fs.rs @@ -14,7 +14,7 @@ use ed25519_dalek::{SignatureError, VerifyingKey}; use iroh_blobs::Hash; use rand::CryptoRng; use redb::{Database, DatabaseError, ReadableMultimapTable, ReadableTable}; -use tracing::warn; +use tracing::{info, warn}; use super::{ pubkeys::MemPublicKeyStore, DownloadPolicy, ImportNamespaceOutcome, OpenError, PublicKeyStore, @@ -30,7 +30,6 @@ use crate::{ }; mod bounds; -mod migrate_v1_v2; mod migrations; mod query; mod ranges; @@ -100,11 +99,18 @@ impl Store { /// /// The file will be created if it does not exist, otherwise it will be opened. pub fn persistent(path: impl AsRef) -> Result { - let db = match Database::create(&path) { + let mut db = match Database::create(&path) { Ok(db) => db, - Err(DatabaseError::UpgradeRequired(1)) => migrate_v1_v2::run(&path)?, + Err(DatabaseError::UpgradeRequired(1)) => return Err( + anyhow!("Opening the database failed: Upgrading from old format is no longer supported. Use iroh-docs 0.92 to perform the upgrade, then upgrade to the latest release again.") + ), Err(err) => return Err(err.into()), }; + match db.upgrade() { + Ok(true) => info!("Database was upgraded to redb v3 compatible format"), + Ok(false) => {} + Err(err) => warn!("Database upgrade to redb v3 compatible format failed: {err:#}"), + } Self::new_impl(db) }