private string GetStreamTag(StreamInfo *info) { if (info == null || info->TagSize == 0) { return(null); } using (Slice.From(_tx.Allocator, StreamInfo.GetTagPtr(info), info->TagSize, out Slice result)) { return(result.ToString().Replace((char)SpecialChars.RecordSeparator, '|')); } }
internal List <long> GetStreamPages(FixedSizeTree chunksTree, StreamInfo *info) { var pages = new List <long>(); var chunkIndex = 0; using (var it = chunksTree.Iterate()) { if (it.Seek(0) == false) { return(pages); } var totalSize = 0L; do { var chunk = (ChunkDetails *)it.CreateReaderForCurrent().Base; totalSize += chunk->ChunkSize; long size = chunk->ChunkSize; if (chunkIndex == chunksTree.NumberOfEntries - 1) { // stream info is put after the last chunk size += StreamInfo.SizeOf + info->TagSize; } var numberOfPages = VirtualPagerLegacyExtensions.GetNumberOfOverflowPages(size); for (int i = 0; i < numberOfPages; i++) { pages.Add(chunk->PageNumber + i); } chunkIndex++; } while (it.MoveNext()); if (totalSize != info->TotalSize) { ThrowStreamSizeMismatch(chunksTree.Name, totalSize, info); } return(pages); } }
public static byte *GetTagPtr(StreamInfo *info) { return((byte *)info + SizeOf); }
private void ThrowStreamSizeMismatch(Slice name, long totalChunksSize, StreamInfo *info) { VoronUnrecoverableErrorException.Raise(_tx.LowLevelTransaction.Environment, $"Stream size mismatch of '{name}' stream. Sum of chunks size is {totalChunksSize} while stream info has {info->TotalSize}"); }