diff --git a/libsql/src/database/builder.rs b/libsql/src/database/builder.rs index a8be27598e..b8b128cb5b 100644 --- a/libsql/src/database/builder.rs +++ b/libsql/src/database/builder.rs @@ -2,9 +2,8 @@ cfg_core! { use crate::EncryptionConfig; } -use crate::{Database, Result}; - use super::DbType; +use crate::{Database, Result}; /// A builder for [`Database`]. This struct can be used to build /// all variants of [`Database`]. These variants include: @@ -644,11 +643,18 @@ cfg_sync! { } let mut bg_abort: Option> = None; - let conn = db.connect()?; - - let sync_ctx = db.sync_ctx.as_ref().unwrap().clone(); if let Some(sync_interval) = sync_interval { + let sync_ctx = db.sync_ctx.as_ref().unwrap().clone(); + { + let mut ctx = sync_ctx.lock().await; + crate::sync::bootstrap_db(&mut ctx).await?; + } + + // db.connect creates a local db file, so it is important that we always call + // `bootstrap_db` (for synced dbs) before calling connect. Otherwise, the sync + // protocol skips calling `export` endpoint causing slowdown in initial bootstrap. + let conn = db.connect()?; let jh = tokio::spawn( async move { loop {