in code/KustoCopyConsole/Storage/RowItemGateway.cs [18:49]
private record QueuedRowItem(
DateTime EnqueueTime,
byte[] Buffer,
RowItemInMemoryCache? SnapshotCache,
TaskCompletionSource? TaskSource);
#endregion
private const long MAX_VOLUME_BEFORE_SNAPSHOT = 20000000;
private static readonly TimeSpan MIN_WAIT_PERIOD = TimeSpan.FromSeconds(1);
private static readonly TimeSpan FLUSH_PERIOD = TimeSpan.FromSeconds(5);
private static readonly RowItemSerializer _rowItemSerializer = CreateRowItemSerializer();
private readonly LogStorage _logStorage;
private readonly ConcurrentQueue<QueuedRowItem> _rowItemQueue = new();
private readonly ConcurrentQueue<Task> _releaseSourceTaskQueue = new();
private readonly Task _backgroundTask;
private readonly TaskCompletionSource _backgroundCompletedSource = new();
private readonly object _lock = new object();
private long _volumeSinceLastSnapshot = 0;
private volatile RowItemInMemoryCache _inMemoryCache;
#region Construction
private RowItemGateway(
LogStorage logStorage,
RowItemInMemoryCache cache,
CancellationToken ct)
{
_logStorage = logStorage;
_backgroundTask = Task.Run(() => BackgroundPersistanceAsync(ct));
_inMemoryCache = cache;
}