in code/KustoCopyConsole/Storage/LogStorage.cs [230:280]
public async Task WriteLatestViewAsync(IEnumerable<byte> content, CancellationToken ct)
{
var completedShards = await SealShardAsync(ct);
if (completedShards >= 1)
{
await AtomicReplaceAsync(
LATEST_PATH,
async tempStorage =>
{
using (var memoryStream = new MemoryStream())
{ // Headers for the view
var header = new VersionHeader { AppVersion = _appVersion };
var viewInfo = new ViewInfo
{
LastShardIncluded = completedShards
};
JsonSerializer.Serialize(
memoryStream,
header,
HeaderJsonContext.Default.VersionHeader);
memoryStream.WriteByte((byte)'\n');
JsonSerializer.Serialize(
memoryStream,
viewInfo,
HeaderJsonContext.Default.ViewInfo);
memoryStream.WriteByte((byte)'\n');
await tempStorage.AtomicAppendAsync(memoryStream.ToArray(), ct);
}
var appendBlock = new List<byte>(MaxBufferSize);
// Content of the view
foreach (var character in content)
{
appendBlock.Add(character);
if (appendBlock.Count == MaxBufferSize)
{
await tempStorage.AtomicAppendAsync(appendBlock, ct);
appendBlock.Clear();
}
}
// Push the remainder of content
if (appendBlock.Any())
{
await tempStorage.AtomicAppendAsync(appendBlock, ct);
}
},
ct);
}
}