Skip to content

Commit 96a9778

Browse files
authored
libsql wal refactors (#1539)
* introduce IoBuf::map_slice * rename db_size to size_after * introduce Segment trait * implement Segment for Arc<T> * make SealedSegment clone * implement Segment for SealedSegment * rename bottomless to storage - introduce `Storage` trait - rename old `Storage` to `Backend` - introduce `AsyncStorage` (former bottomless) * add Storage to WalRegistry remove namespace resolver from registry * add async_get to registry * decouple shared wal from registry * move CompactedSegment headers to own module * refactor SegmentList * add durable frame_no to shared_wal * make shared_wal checkpoint async * expose TestEnv create test environment for libsql-wal * ignore dead_code stuff still need to be wired * let LibsqlWalManager resolve namespace name * fix tests * fix libsql-server * fmt * fix bench * fix conflicts * fmt
1 parent 25cc52f commit 96a9778

32 files changed

+1418
-1025
lines changed

libsql-server/src/connection/connection_manager.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use libsql_sys::wal::either::Either3;
1515
use libsql_sys::wal::wrapper::{WrapWal, WrappedWal};
1616
use libsql_sys::wal::{CheckpointMode, Sqlite3Wal, Sqlite3WalManager, Wal};
1717
use libsql_wal::io::StdIO;
18+
use libsql_wal::storage::NoStorage;
1819
use libsql_wal::wal::{LibsqlWal, LibsqlWalManager};
1920
use metrics::atomics::AtomicU64;
2021
use parking_lot::{Mutex, MutexGuard};
@@ -26,12 +27,13 @@ use super::TXN_TIMEOUT;
2627
pub type ConnId = u64;
2728
#[cfg(feature = "durable-wal")]
2829

29-
pub type InnerWalManager = Either3<Sqlite3WalManager, LibsqlWalManager<StdIO>, DurableWalManager>;
30+
pub type InnerWalManager =
31+
Either3<Sqlite3WalManager, LibsqlWalManager<StdIO, NoStorage>, DurableWalManager>;
3032
#[cfg(feature = "durable-wal")]
3133
pub type InnerWal = Either3<Sqlite3Wal, LibsqlWal<StdIO>, DurableWal>;
3234
#[cfg(not(feature = "durable-wal"))]
3335

34-
pub type InnerWalManager = Either<Sqlite3WalManager, LibsqlWalManager<StdIO>>;
36+
pub type InnerWalManager = Either<Sqlite3WalManager, LibsqlWalManager<StdIO, NoStorage>>;
3537
#[cfg(not(feature = "durable-wal"))]
3638

3739
pub type InnerWal = Either<Sqlite3Wal, LibsqlWal<StdIO>>;

libsql-server/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ use libsql_sys::wal::either::Either as EitherWAL;
4242
use libsql_sys::wal::either::Either3 as EitherWAL;
4343
use libsql_sys::wal::Sqlite3WalManager;
4444
use libsql_wal::registry::WalRegistry;
45+
use libsql_wal::storage::NoStorage;
4546
use libsql_wal::wal::LibsqlWalManager;
4647
use namespace::meta_store::MetaStoreHandle;
4748
use namespace::{NamespaceConfig, NamespaceName};
@@ -702,9 +703,9 @@ where
702703

703704
match self.use_custom_wal {
704705
Some(CustomWAL::LibsqlWal) => {
705-
let registry = Arc::new(WalRegistry::new(wal_path, namespace_resolver, ())?);
706+
let registry = Arc::new(WalRegistry::new(wal_path, NoStorage)?);
706707

707-
let wal = LibsqlWalManager::new(registry.clone());
708+
let wal = LibsqlWalManager::new(registry.clone(), Arc::new(namespace_resolver));
708709
let shutdown_notify = self.shutdown.clone();
709710
let shutdown_fut = Box::pin(async move {
710711
shutdown_notify.notified().await;

libsql-wal/benches/benchmarks.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use libsql_sys::rusqlite::{self, OpenFlags};
77
use libsql_sys::wal::{Sqlite3Wal, Sqlite3WalManager, Wal};
88
use libsql_sys::Connection;
99
use libsql_wal::io::StdIO;
10+
use libsql_wal::storage::NoStorage;
1011
use libsql_wal::wal::LibsqlWal;
1112
use libsql_wal::{registry::WalRegistry, wal::LibsqlWalManager};
1213
use tempfile::tempdir;
@@ -58,8 +59,8 @@ fn with_libsql_conn(f: impl FnOnce(&mut Connection<LibsqlWal<StdIO>>)) {
5859
let tmp = tempdir().unwrap();
5960
let resolver = |_: &Path| NamespaceName::from_string("test".into());
6061

61-
let registry = Arc::new(WalRegistry::new(tmp.path().join("wals"), resolver, ()).unwrap());
62-
let wal_manager = LibsqlWalManager::new(registry.clone());
62+
let registry = Arc::new(WalRegistry::new(tmp.path().join("wals"), NoStorage).unwrap());
63+
let wal_manager = LibsqlWalManager::new(registry.clone(), Arc::new(resolver));
6364

6465
let mut conn = libsql_sys::Connection::open(
6566
tmp.path().join("data"),

0 commit comments

Comments
 (0)