Skip to content

Commit 6eac78f

Browse files
committed
fix(sqlite-native): restore kv error hook
1 parent ceec0d4 commit 6eac78f

3 files changed

Lines changed: 18 additions & 5 deletions

File tree

rivetkit-typescript/packages/rivetkit-native/src/database.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ impl EnvoyKv {
3434

3535
#[async_trait]
3636
impl SqliteKv for EnvoyKv {
37+
fn on_error(&self, actor_id: &str, error: &SqliteKvError) {
38+
tracing::error!(%actor_id, %error, "native sqlite kv operation failed");
39+
}
40+
3741
async fn on_open(&self, _actor_id: &str) -> Result<(), SqliteKvError> {
3842
Ok(())
3943
}

rivetkit-typescript/packages/sqlite-native/src/sqlite_kv.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ pub struct KvGetResult {
6868
/// at a higher level.
6969
#[async_trait]
7070
pub trait SqliteKv: Send + Sync {
71+
/// Called when a KV operation fails inside a VFS callback before the
72+
/// original error is collapsed into a generic SQLite IO error code.
73+
fn on_error(&self, _actor_id: &str, _error: &SqliteKvError) {}
74+
7175
/// Called when an actor's database is opened.
7276
async fn on_open(&self, _actor_id: &str) -> Result<(), SqliteKvError> {
7377
Ok(())

rivetkit-typescript/packages/sqlite-native/src/vfs.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use libsqlite3_sys::*;
1414
use tokio::runtime::Handle;
1515

1616
use crate::kv;
17-
use crate::sqlite_kv::{KvGetResult, SqliteKv};
17+
use crate::sqlite_kv::{KvGetResult, SqliteKv, SqliteKvError};
1818

1919
// MARK: Panic Guard
2020

@@ -159,6 +159,11 @@ struct VfsContext {
159159
}
160160

161161
impl VfsContext {
162+
fn report_kv_error(&self, err: SqliteKvError) -> String {
163+
self.kv.on_error(&self.actor_id, &err);
164+
err.to_string()
165+
}
166+
162167
fn resolve_file_tag(&self, path: &str) -> Option<u8> {
163168
if path == self.main_file_name {
164169
return Some(kv::FILE_TAG_MAIN);
@@ -187,7 +192,7 @@ impl VfsContext {
187192
let result = self
188193
.rt_handle
189194
.block_on(self.kv.batch_get(&self.actor_id, keys))
190-
.map_err(|e| e.to_string());
195+
.map_err(|err| self.report_kv_error(err));
191196
let elapsed = start.elapsed();
192197
if trace_sql {
193198
tracing::trace!(
@@ -215,7 +220,7 @@ impl VfsContext {
215220
let result = self
216221
.rt_handle
217222
.block_on(self.kv.batch_put(&self.actor_id, keys, values))
218-
.map_err(|e| e.to_string());
223+
.map_err(|err| self.report_kv_error(err));
219224
let elapsed = start.elapsed();
220225
if trace_sql {
221226
tracing::trace!(
@@ -243,7 +248,7 @@ impl VfsContext {
243248
let result = self
244249
.rt_handle
245250
.block_on(self.kv.batch_delete(&self.actor_id, keys))
246-
.map_err(|e| e.to_string());
251+
.map_err(|err| self.report_kv_error(err));
247252
let elapsed = start.elapsed();
248253
if trace_sql {
249254
tracing::trace!(
@@ -266,7 +271,7 @@ impl VfsContext {
266271
let result = self
267272
.rt_handle
268273
.block_on(self.kv.delete_range(&self.actor_id, start, end))
269-
.map_err(|e| e.to_string());
274+
.map_err(|err| self.report_kv_error(err));
270275
let elapsed = start_time.elapsed();
271276
if sql_trace_enabled() {
272277
tracing::trace!(

0 commit comments

Comments
 (0)