Exemple #1
0
 bool LoadKeyIndex(uint fileId, IKeyIndex info)
 {
     try
     {
         var reader = FileCollection.GetFile(fileId).GetExclusiveReader();
         FileKeyIndex.SkipHeader(reader);
         var keyCount = info.KeyValueCount;
         _nextRoot.TrLogFileId = info.TrLogFileId;
         _nextRoot.TrLogOffset = info.TrLogOffset;
         _nextRoot.CommitUlong = info.CommitUlong;
         if (info.Compression == KeyIndexCompression.Old)
         {
             _nextRoot.BuildTree(keyCount, () =>
             {
                 var keyLength = reader.ReadVInt32();
                 var key       = ByteBuffer.NewAsync(new byte[Math.Abs(keyLength)]);
                 reader.ReadBlock(key);
                 if (keyLength < 0)
                 {
                     _compression.DecompressKey(ref key);
                 }
                 return(new BTreeLeafMember
                 {
                     Key = key.ToByteArray(),
                     ValueFileId = reader.ReadVUInt32(),
                     ValueOfs = reader.ReadVUInt32(),
                     ValueSize = reader.ReadVInt32()
                 });
             });
         }
         else
         {
             if (info.Compression != KeyIndexCompression.None)
             {
                 return(false);
             }
             var prevKey = ByteBuffer.NewEmpty();
             _nextRoot.BuildTree(keyCount, () =>
             {
                 var prefixLen = (int)reader.ReadVUInt32();
                 var keyLengthWithoutPrefix = (int)reader.ReadVUInt32();
                 var key = ByteBuffer.NewAsync(new byte[prefixLen + keyLengthWithoutPrefix]);
                 Array.Copy(prevKey.Buffer, prevKey.Offset, key.Buffer, key.Offset, prefixLen);
                 reader.ReadBlock(key.SubBuffer(prefixLen));
                 prevKey = key;
                 return(new BTreeLeafMember
                 {
                     Key = key.ToByteArray(),
                     ValueFileId = reader.ReadVUInt32(),
                     ValueOfs = reader.ReadVUInt32(),
                     ValueSize = reader.ReadVInt32()
                 });
             });
         }
         if (reader.Eof)
         {
             return(true);
         }
         if (reader.ReadInt32() == EndOfIndexFileMarker)
         {
             return(true);
         }
         return(false);
     }
     catch (Exception)
     {
         return(false);
     }
 }
Exemple #2
0
        static string LoadUsedFilesFromKvi(IKeyIndex keyIndex, FileCollectionWithFileInfos fcfi, uint fileId)
        {
            try
            {
                var file   = fcfi.GetFile(fileId);
                var reader = new SpanReader(file.GetExclusiveReader());
                FileKeyIndex.SkipHeader(ref reader);
                var keyCount    = keyIndex.KeyValueCount;
                var usedFileIds = new RefDictionary <uint, ulong>();
                if (keyIndex.Compression == KeyIndexCompression.Old)
                {
                    for (var i = 0; i < keyCount; i++)
                    {
                        var keyLength = reader.ReadVInt32();
                        reader.SkipBlock(keyLength);
                        var vFileId = reader.ReadVUInt32();
                        reader.SkipVUInt32();
                        var len = reader.ReadVInt32();
                        if (vFileId > 0)
                        {
                            usedFileIds.GetOrAddValueRef(vFileId) += (ulong)Math.Abs(len);
                        }
                    }
                }
                else
                {
                    if (keyIndex.Compression != KeyIndexCompression.None)
                    {
                        return("");
                    }
                    for (var i = 0; i < keyCount; i++)
                    {
                        reader.SkipVUInt32();
                        var keyLengthWithoutPrefix = (int)reader.ReadVUInt32();
                        reader.SkipBlock(keyLengthWithoutPrefix);
                        var vFileId = reader.ReadVUInt32();
                        reader.SkipVUInt32();
                        var len = reader.ReadVInt32();
                        if (vFileId > 0)
                        {
                            usedFileIds.GetOrAddValueRef(vFileId) += (ulong)Math.Abs(len);
                        }
                    }
                }

                var used = usedFileIds.OrderBy(a => a.Key).ToArray();
                var sb   = new StringBuilder();
                foreach (var keyValuePair in used)
                {
                    sb.Append("    in ");
                    sb.Append(keyValuePair.Key);
                    sb.Append(" used ");
                    sb.Append(keyValuePair.Value);
                    sb.Append('\n');
                }
                return(sb.ToString());
            }
            catch
            {
                // ignore
            }

            return("");
        }
Exemple #3
0
 public bool Equals(IKeyIndex <LinearKey3> other)
 {
     return(linearKey == other.key);
 }
Exemple #4
0
 public bool Equals(IKeyIndex <MortonKey3> other)
 {
     return(mortonKey == other.key);
 }