v0.5.3-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: ks-store/src/postgres/query/replay_candidate_queries.rs
|
||||
// version: 7
|
||||
// version: 8
|
||||
|
||||
//! Read-only PostgreSQL queries for replay candidate discovery.
|
||||
|
||||
@@ -67,6 +67,7 @@ pub(crate) async fn list_replay_transaction_candidates(
|
||||
} else {
|
||||
crate::postgres::query::replay_candidate_queries::transaction_candidate_sql_asc()
|
||||
};
|
||||
let started_at = std::time::Instant::now();
|
||||
let query_result = sqlx::query_as::<
|
||||
sqlx::Postgres,
|
||||
crate::postgres::query::replay_candidate_queries::ReplayTransactionCandidateRow,
|
||||
@@ -86,6 +87,7 @@ pub(crate) async fn list_replay_transaction_candidates(
|
||||
let rows = match query_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
trace_query_failure("list_replay_transaction_candidates", started_at, &error);
|
||||
return std::result::Result::Err(ks_core::Error::db(format!(
|
||||
"postgres replay transaction candidate query failed: {error}"
|
||||
)));
|
||||
@@ -110,6 +112,7 @@ pub(crate) async fn list_replay_transaction_candidates(
|
||||
updated_at: row.updated_at,
|
||||
});
|
||||
}
|
||||
trace_query_success("list_replay_transaction_candidates", started_at, output.len());
|
||||
return std::result::Result::Ok(output);
|
||||
}
|
||||
|
||||
@@ -117,6 +120,7 @@ pub(crate) async fn list_replay_program_summaries(
|
||||
pool: &sqlx::PgPool,
|
||||
filter: &crate::ReplayProgramFilter,
|
||||
) -> ks_core::Result<std::vec::Vec<crate::ReplayProgramSummary>> {
|
||||
let started_at = std::time::Instant::now();
|
||||
let query_result = sqlx::query_as::<sqlx::Postgres, crate::postgres::query::replay_candidate_queries::ReplayProgramSummaryRow>(
|
||||
r#"WITH occurrences AS (
|
||||
SELECT program_id, signature, slot, 'top_level'::TEXT AS scope FROM k_sol_core_instructions
|
||||
@@ -145,6 +149,7 @@ pub(crate) async fn list_replay_program_summaries(
|
||||
let rows = match query_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
trace_query_failure("list_replay_program_summaries", started_at, &error);
|
||||
return std::result::Result::Err(ks_core::Error::db(format!(
|
||||
"postgres replay program summary query failed: {error}"
|
||||
)));
|
||||
@@ -162,6 +167,7 @@ pub(crate) async fn list_replay_program_summaries(
|
||||
max_slot: row.max_slot,
|
||||
});
|
||||
}
|
||||
trace_query_success("list_replay_program_summaries", started_at, output.len());
|
||||
return std::result::Result::Ok(output);
|
||||
}
|
||||
|
||||
@@ -170,6 +176,7 @@ pub(crate) async fn list_replay_entity_summaries(
|
||||
filter: &crate::ReplayEntityFilter,
|
||||
) -> ks_core::Result<std::vec::Vec<crate::ReplayEntitySummary>> {
|
||||
let entity_kind = filter.entity_kind.as_sql();
|
||||
let started_at = std::time::Instant::now();
|
||||
let query_result = sqlx::query_as::<
|
||||
sqlx::Postgres,
|
||||
crate::postgres::query::replay_candidate_queries::ReplayEntitySummaryRow,
|
||||
@@ -207,6 +214,7 @@ pub(crate) async fn list_replay_entity_summaries(
|
||||
let rows = match query_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
trace_query_failure("list_replay_entity_summaries", started_at, &error);
|
||||
return std::result::Result::Err(ks_core::Error::db(format!(
|
||||
"postgres replay entity summary query failed: {error}"
|
||||
)));
|
||||
@@ -223,6 +231,7 @@ pub(crate) async fn list_replay_entity_summaries(
|
||||
max_slot: row.max_slot,
|
||||
});
|
||||
}
|
||||
trace_query_success("list_replay_entity_summaries", started_at, output.len());
|
||||
return std::result::Result::Ok(output);
|
||||
}
|
||||
|
||||
@@ -392,6 +401,16 @@ fn optional_sql_bigint(
|
||||
};
|
||||
}
|
||||
|
||||
fn trace_query_success(action: &str, started_at: std::time::Instant, rows: usize) {
|
||||
let elapsed_ms = started_at.elapsed().as_secs_f64() * 1000.0;
|
||||
tracing::trace!(target: crate::TRACING_TARGET, backend = "postgres", domain = "ks-store.pg", action = action, elapsed_ms, rows, outcome = "success", "PostgreSQL store operation completed");
|
||||
}
|
||||
|
||||
fn trace_query_failure(action: &str, started_at: std::time::Instant, error: &sqlx::Error) {
|
||||
let elapsed_ms = started_at.elapsed().as_secs_f64() * 1000.0;
|
||||
tracing::trace!(target: crate::TRACING_TARGET, backend = "postgres", domain = "ks-store.pg", action = action, elapsed_ms, error = %error, outcome = "error", "PostgreSQL store operation failed");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[tokio::test]
|
||||
|
||||
Reference in New Issue
Block a user