public async ValueTask <uint> GetNextPageNoToWriteAsync(int tocIndex, int dataSize) { var(position, length) = await GetPagePositionAllocationToc(tocIndex, false); if (length == 0) { return(await GetTheEndOfTheFileAsync()); } var nowTakenPages = MyAzurePageBlobUtils.CalculateRequiredPagesAmount(length); var newSizePages = MyAzurePageBlobUtils.CalculateRequiredPagesAmount(dataSize); if (nowTakenPages >= newSizePages) { return(position); } return(await GetTheEndOfTheFileAsync()); }
public async Task <CompressedPage> ReadAsync(MessagePageId pageId) { try { //If we do not have exceptions - can remove this try/catch GetPageTocIndex(pageId); } catch (Exception e) { Console.WriteLine("Can not get TocIndex for page: " + pageId.Value + "; TopicId:" + TopicId); Console.WriteLine(e); throw; } var tocIndex = GetPageTocIndex(pageId); var(position, length) = await GetPagePositionAllocationToc(tocIndex, false); if (length == 0) { return(CompressedPage.CreateEmpty(pageId)); } try { //If we do not have exceptions - can remove this try/catch var fullPages = MyAzurePageBlobUtils.CalculateRequiredPagesAmount(length); var result = await AzurePageBlob.ReadAsync(position, fullPages); var buffer = result.GetBuffer(); return(new CompressedPage(pageId, new ReadOnlyMemory <byte>(buffer, 0, (int)length))); } catch (Exception) { Console.WriteLine("Problem with reading page: " + pageId + " TocIndex: " + tocIndex + "; position:" + position + " Length:" + length); return(CompressedPage.CreateEmpty(pageId)); } }