.NET API
IArchiveSink
Tracon.Abstractions.dllThe cold-storage extension point rows are written to before deletion.
public interface IArchiveSinkRemarks
Section titled “Remarks”There is no default implementation (no cloud SDK
dependency is taken). The consumer writes their own sink, based on the
file-system example under samples/, and registers it as IArchiveSink.
If none is registered, a policy with archive = true deletes no
row — data that cannot be archived is never dropped. This prevents silent data loss.
DI lifetime — singleton, optional. No default implementation is
registered. A consumer that registers one must register it as a singleton — it is
resolved once, as a constructor parameter of Tracon’s singleton retention
executor, via IServiceProvider.GetService<IArchiveSink>.
A scoped registration would be a captive dependency.
Methods
Section titled “Methods”WriteAsync(string, DateTimeOffset, IReadOnlyList<ArchiveRow>, CancellationToken)
Section titled “ WriteAsync(string, DateTimeOffset, IReadOnlyList<ArchiveRow>, CancellationToken)”Writes a batch of rows to the archive.
ValueTask WriteAsync(string target, DateTimeOffset partitionDate, IReadOnlyList<ArchiveRow> rows, CancellationToken cancellationToken = default)Parameters
Section titled “Parameters”target string
The target name.
partitionDate DateTimeOffset
The date the batch belongs to (UTC, day precision). The sink may use
this to partition the file/object path (for example,
run_events/2026-08-05.jsonl.gz).
rows IReadOnlyList<ArchiveRow>
The rows to write.
cancellationToken CancellationToken
The cancellation token.
Returns
Section titled “Returns”The completion task.
Remarks
Section titled “Remarks”Only the rows written here are deleted, and only after this call returns; when it throws, nothing is deleted. A row can arrive more than once: a row that is kept after its write (it stopped matching, or its delete failed) is written again by a later run.