diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-05-23 15:35:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-23 16:35:16 +0200 |
commit | 0b8deca08b9257c41055b4f34ebdaf1459b2de89 (patch) | |
tree | a26602ffb9ee4ea88271722829252ba3b4b5c1eb /ext/kv | |
parent | aeafb7b39ed6e0cb7601be53f63a5c6e0f2aa1a8 (diff) |
chore: update denokv_* crates (#23949)
Co-authored-by: losfair <zhy20000919@hotmail.com>
Diffstat (limited to 'ext/kv')
-rw-r--r-- | ext/kv/lib.rs | 7 | ||||
-rw-r--r-- | ext/kv/sqlite.rs | 54 |
2 files changed, 45 insertions, 16 deletions
diff --git a/ext/kv/lib.rs b/ext/kv/lib.rs index 285614389..8a57d610d 100644 --- a/ext/kv/lib.rs +++ b/ext/kv/lib.rs @@ -534,7 +534,12 @@ fn mutation_from_v8( let kind = match (value.1.as_str(), value.2) { ("set", Some(value)) => MutationKind::Set(value.try_into()?), ("delete", None) => MutationKind::Delete, - ("sum", Some(value)) => MutationKind::Sum(value.try_into()?), + ("sum", Some(value)) => MutationKind::Sum { + value: value.try_into()?, + min_v8: vec![], + max_v8: vec![], + clamp: false, + }, ("min", Some(value)) => MutationKind::Min(value.try_into()?), ("max", Some(value)) => MutationKind::Max(value.try_into()?), ("setSuffixVersionstampedKey", Some(value)) => { diff --git a/ext/kv/sqlite.rs b/ext/kv/sqlite.rs index d42f8988e..a8a7fbace 100644 --- a/ext/kv/sqlite.rs +++ b/ext/kv/sqlite.rs @@ -8,6 +8,7 @@ use std::marker::PhantomData; use std::path::Path; use std::path::PathBuf; use std::rc::Rc; +use std::sync::Arc; use std::sync::Mutex; use std::sync::OnceLock; @@ -18,8 +19,8 @@ use deno_core::unsync::spawn_blocking; use deno_core::OpState; use deno_node::PathClean; pub use denokv_sqlite::SqliteBackendError; +use denokv_sqlite::SqliteConfig; use denokv_sqlite::SqliteNotifier; -use rand::RngCore; use rand::SeedableRng; use rusqlite::OpenFlags; @@ -84,32 +85,40 @@ impl<P: SqliteDbHandlerPermissions> DatabaseHandler for SqliteDbHandler<P> { let path = path.clone(); let default_storage_dir = self.default_storage_dir.clone(); - let (conn, notifier_key) = spawn_blocking(move || { + type ConnGen = + Arc<dyn Fn() -> rusqlite::Result<rusqlite::Connection> + Send + Sync>; + let (conn_gen, notifier_key): (ConnGen, _) = spawn_blocking(move || { denokv_sqlite::sqlite_retry_loop(|| { let (conn, notifier_key) = match (path.as_deref(), &default_storage_dir) { - (Some(":memory:"), _) | (None, None) => { - (rusqlite::Connection::open_in_memory()?, None) - } + (Some(":memory:"), _) | (None, None) => ( + Arc::new(rusqlite::Connection::open_in_memory) as ConnGen, + None, + ), (Some(path), _) => { let flags = OpenFlags::default().difference(OpenFlags::SQLITE_OPEN_URI); let resolved_path = canonicalize_path(&PathBuf::from(path)) .map_err(anyhow::Error::from)?; + let path = path.to_string(); ( - rusqlite::Connection::open_with_flags(path, flags)?, + Arc::new(move || { + rusqlite::Connection::open_with_flags(&path, flags) + }) as ConnGen, Some(resolved_path), ) } (None, Some(path)) => { std::fs::create_dir_all(path).map_err(anyhow::Error::from)?; let path = path.join("kv.sqlite3"); - (rusqlite::Connection::open(path.clone())?, Some(path)) + let path2 = path.clone(); + ( + Arc::new(move || rusqlite::Connection::open(&path2)) as ConnGen, + Some(path), + ) } }; - conn.pragma_update(None, "journal_mode", "wal")?; - Ok::<_, SqliteBackendError>((conn, notifier_key)) }) }) @@ -128,13 +137,28 @@ impl<P: SqliteDbHandlerPermissions> DatabaseHandler for SqliteDbHandler<P> { SqliteNotifier::default() }; - let versionstamp_rng: Box<dyn RngCore + Send> = - match &self.versionstamp_rng_seed { - Some(seed) => Box::new(rand::rngs::StdRng::seed_from_u64(*seed)), - None => Box::new(rand::rngs::StdRng::from_entropy()), - }; + let versionstamp_rng_seed = self.versionstamp_rng_seed; + + let config = SqliteConfig { + batch_timeout: None, + num_workers: 1, + }; - denokv_sqlite::Sqlite::new(conn, notifier, versionstamp_rng) + denokv_sqlite::Sqlite::new( + move || { + let conn = conn_gen()?; + conn.pragma_update(None, "journal_mode", "wal")?; + Ok(( + conn, + match versionstamp_rng_seed { + Some(seed) => Box::new(rand::rngs::StdRng::seed_from_u64(seed)), + None => Box::new(rand::rngs::StdRng::from_entropy()), + }, + )) + }, + notifier, + config, + ) } } |