Skip to content

Commit abfcbec

Browse files
committed
actually delete stuff
1 parent 2cf7d13 commit abfcbec

File tree

1 file changed

+54
-7
lines changed
  • nexus/db-queries/src/db/datastore

1 file changed

+54
-7
lines changed

nexus/db-queries/src/db/datastore/fm.rs

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -795,9 +795,39 @@ impl DataStore {
795795
.map(|id| id.into_untyped_uuid())
796796
.collect::<Vec<_>>();
797797

798-
// TODO(eliza): when other tables are added to store data that is part
799-
// of the sitrep, we'll need to delete any records with matching IDs in
800-
// those tables, too!
798+
let case_ereports_deleted = diesel::delete(
799+
case_ereport_dsl::fm_ereport_in_case
800+
.filter(case_ereport_dsl::sitrep_id.eq_any(ids.clone())),
801+
)
802+
.execute_async(&*conn)
803+
.await
804+
.map_err(|e| {
805+
public_error_from_diesel(e, ErrorHandler::Server)
806+
.internal_context("failed to delete case ereport assignments")
807+
})?;
808+
809+
// Delete alert requests.
810+
let alert_requests_deleted = diesel::delete(
811+
alert_req_dsl::fm_alert_request
812+
.filter(alert_req_dsl::sitrep_id.eq_any(ids.clone())),
813+
)
814+
.execute_async(&*conn)
815+
.await
816+
.map_err(|e| {
817+
public_error_from_diesel(e, ErrorHandler::Server)
818+
.internal_context("failed to delete alert requests")
819+
})?;
820+
821+
// Delete case metadata records.
822+
let cases_deleted = diesel::delete(
823+
case_dsl::fm_case.filter(case_dsl::sitrep_id.eq_any(ids.clone())),
824+
)
825+
.execute_async(&*conn)
826+
.await
827+
.map_err(|e| {
828+
public_error_from_diesel(e, ErrorHandler::Server)
829+
.internal_context("failed to delete case metadata")
830+
})?;
801831

802832
// Delete the sitrep metadata entries *last*. This is necessary because
803833
// the rest of the delete operation is unsynchronized, and it is
@@ -806,10 +836,27 @@ impl DataStore {
806836
// the one that is used to determine whether a sitrep "exists" so that
807837
// the sitrep GC task can determine if it needs to be deleted, so don't
808838
// touch it until all the other records are gone.
809-
diesel::delete(sitrep_dsl::fm_sitrep.filter(sitrep_dsl::id.eq_any(ids)))
810-
.execute_async(&*conn)
811-
.await
812-
.map_err(|e| public_error_from_diesel(e, ErrorHandler::Server))
839+
let sitreps_deleted = diesel::delete(
840+
sitrep_dsl::fm_sitrep.filter(sitrep_dsl::id.eq_any(ids.clone())),
841+
)
842+
.execute_async(&*conn)
843+
.await
844+
.map_err(|e| {
845+
public_error_from_diesel(e, ErrorHandler::Server)
846+
.internal_context("failed to delete sitrep metadata")
847+
})?;
848+
849+
slog::debug!(
850+
&opctx.log,
851+
"deleted {sitreps_deleted} sitreps";
852+
"ids" => ?ids,
853+
"sitreps_deleted" => sitreps_deleted,
854+
"cases_deleted" => cases_deleted,
855+
"alert_requests_deleted" => alert_requests_deleted,
856+
"case_ereports_deleted" => case_ereports_deleted,
857+
);
858+
859+
Ok(sitreps_deleted)
813860
}
814861

815862
pub async fn fm_sitrep_version_list(

0 commit comments

Comments
 (0)