add ignore_error flag to interaction so that we fail on errors when executing interactions

This commit is contained in:
pedrocarlo
2025-09-23 19:21:02 -03:00
parent f2d29ffaaf
commit 026fd9ae9e
3 changed files with 32 additions and 12 deletions

View File

@@ -590,6 +590,7 @@ impl Display for Fault {
pub struct Interaction {
pub connection_index: usize,
pub interaction: InteractionType,
pub ignore_error: bool,
}
impl Deref for Interaction {
@@ -611,6 +612,15 @@ impl Interaction {
Self {
connection_index,
interaction,
ignore_error: false,
}
}
pub fn new_ignore_error(connection_index: usize, interaction: InteractionType) -> Self {
Self {
connection_index,
interaction,
ignore_error: true,
}
}
}

View File

@@ -472,7 +472,7 @@ impl Property {
.into_iter()
.map(|q| Interaction::new(connection_index, InteractionType::Query(q))),
);
interactions.push(Interaction::new(connection_index, cq2));
interactions.push(Interaction::new_ignore_error(connection_index, cq2));
interactions.push(Interaction::new(connection_index, assertion));
interactions

View File

@@ -175,9 +175,14 @@ pub fn execute_interaction_turso(
match &interaction.interaction {
InteractionType::Query(_) => {
tracing::debug!(?interaction);
let results = interaction.execute_query(conn);
if results.is_err() {
tracing::error!(?results);
let results = interaction
.execute_query(conn)
.inspect_err(|err| tracing::error!(?err));
if let Err(err) = &results
&& !interaction.ignore_error
{
return Err(err.clone());
}
stack.push(results);
// TODO: skip integrity check with mvcc
@@ -186,10 +191,10 @@ pub fn execute_interaction_turso(
}
}
InteractionType::FsyncQuery(query) => {
let results = interaction.execute_fsync_query(conn.clone(), env);
if results.is_err() {
tracing::error!(?results);
}
let results = interaction
.execute_fsync_query(conn.clone(), env)
.inspect_err(|err| tracing::error!(?err));
stack.push(results);
let query_interaction = Interaction::new(
@@ -217,10 +222,10 @@ pub fn execute_interaction_turso(
}
InteractionType::FaultyQuery(_) => {
let conn = conn.clone();
let results = interaction.execute_faulty_query(&conn, env);
if results.is_err() {
tracing::error!(?results);
}
let results = interaction
.execute_faulty_query(&conn, env)
.inspect_err(|err| tracing::error!(?err));
stack.push(results);
// Reset fault injection
env.io.inject_fault(false);
@@ -296,6 +301,11 @@ fn execute_interaction_rusqlite(
let results = execute_query_rusqlite(conn, query).map_err(|e| {
turso_core::LimboError::InternalError(format!("error executing query: {e}"))
});
if let Err(err) = &results
&& !interaction.ignore_error
{
return Err(err.clone());
}
tracing::debug!("{:?}", results);
stack.push(results);
}