Archiving a build log is not fully transactional
Description
Gitlab::Ci::Trace#unsafe_archive!
is not transactional. It can leave a build trace in a partially archived state.
In the production database we do have around 600 build logs that have only been partially archived - a build trace artifact exists but partial build trace chunks have not been removed.
Problem
It is possible that trace migration will be interrupted. In such cases it is possible to have build_chunks
and trace_artifact
at the same time. The work here would to ensure that such cases are retried and properly handled, by:
- ensuring that if
trace_artifact
is used it is considered as a trace to use - ensure that once the archive operation is retried
trace_artifact
is kept, andbuild_chunks
are removed
Impact
This will improve resiliency of Trace support, ensuring that we do not retry or block the ArchiveTracesCronWorker
.
Edited by Kamil Trzciński (Back 2025-01-01)