[#39] Client: add memory usage optimizations
Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
parent
d6fe034453
commit
32a7e64538
14 changed files with 120 additions and 92 deletions
|
@ -77,68 +77,53 @@ public class ObjectTest : ObjectTestsBase
|
|||
var singleObjects = Mocker.PutSingleRequests.ToArray();
|
||||
|
||||
Assert.NotNull(Mocker.ClientStreamWriter?.Messages);
|
||||
var streamObjects = Mocker.ClientStreamWriter.Messages.ToArray();
|
||||
|
||||
Assert.Single(singleObjects);
|
||||
var objects = Mocker.PutSingleRequests.Select(o => o.Body.Object).ToArray();
|
||||
|
||||
Assert.Equal(11, streamObjects.Length);
|
||||
Assert.Equal(4, objects.Length);
|
||||
|
||||
var bodies = streamObjects.Select(o => ((Object.PutRequest)o).Body).ToArray();
|
||||
// linked object
|
||||
Assert.Equal(0, objects[3].Payload.Length);
|
||||
|
||||
Assert.Equal(3, bodies.Count(b => b.Init != null));
|
||||
Assert.Equal(5, bodies.Count(b => b.Chunk.Length == 1024));
|
||||
// PART1
|
||||
Assert.Equal(blockSize, objects[0].Payload.Length);
|
||||
Assert.True(bytes.AsMemory(0, blockSize).ToArray().SequenceEqual(objects[0].Payload));
|
||||
|
||||
Assert.NotNull(objects[0].Header.Split.SplitId);
|
||||
Assert.Null(objects[0].Header.Split.Previous);
|
||||
Assert.True(objects[0].Header.Attributes.Count == 0);
|
||||
Assert.Null(objects[0].Header.Split.Parent);
|
||||
|
||||
Assert.Equal(596, ((Object.PutRequest)streamObjects[10]).Body.Chunk.Length);
|
||||
// PART2
|
||||
Assert.Equal(blockSize, objects[1].Payload.Length);
|
||||
Assert.True(bytes.AsMemory(blockSize, blockSize).ToArray().SequenceEqual(objects[1].Payload));
|
||||
|
||||
var linkObject = singleObjects[0].Body.Object;
|
||||
var header1 = bodies[0].Init.Header;
|
||||
var header2 = bodies[4].Init.Header;
|
||||
var header3 = bodies[8].Init.Header;
|
||||
|
||||
var payload1 = bodies[1].Chunk
|
||||
.Concat(bodies[2].Chunk)
|
||||
.Concat(bodies[3].Chunk)
|
||||
.ToArray();
|
||||
|
||||
var payload2 = bodies[5].Chunk
|
||||
.Concat(bodies[6].Chunk)
|
||||
.Concat(bodies[7].Chunk)
|
||||
.ToArray();
|
||||
|
||||
var payload3 = bodies[9].Chunk
|
||||
.Concat(bodies[10].Chunk)
|
||||
.ToArray();
|
||||
|
||||
Assert.NotNull(header1.Split.SplitId);
|
||||
Assert.Null(header1.Split.Previous);
|
||||
Assert.Equal(SHA256.HashData(bytes.AsMemory().Slice(0, blockSize).ToArray()), SHA256.HashData(payload1));
|
||||
Assert.True(header1.Attributes.Count == 0);
|
||||
|
||||
Assert.Equal(header1.Split.SplitId, header2.Split.SplitId);
|
||||
Assert.Equal(objIds.ElementAt(0), header2.Split.Previous.Value);
|
||||
Assert.Equal(SHA256.HashData(bytes.AsMemory().Slice(blockSize, blockSize).ToArray()), SHA256.HashData(payload2));
|
||||
Assert.True(header2.Attributes.Count == 0);
|
||||
Assert.Equal(objects[0].Header.Split.SplitId, objects[1].Header.Split.SplitId);
|
||||
Assert.True(objects[1].Header.Attributes.Count == 0);
|
||||
Assert.Null(objects[1].Header.Split.Parent);
|
||||
|
||||
// last part
|
||||
Assert.NotNull(header3.Split.Parent);
|
||||
Assert.NotNull(header3.Split.ParentHeader);
|
||||
Assert.NotNull(header3.Split.ParentSignature);
|
||||
Assert.Equal(header2.Split.SplitId, header3.Split.SplitId);
|
||||
Assert.Equal(SHA256.HashData(bytes.AsMemory().Slice(fileLength - fileLength % blockSize, fileLength % blockSize).ToArray()), SHA256.HashData(payload3));
|
||||
Assert.True(header3.Attributes.Count == 0);
|
||||
Assert.Equal(bytes.Length % blockSize, objects[2].Payload.Length);
|
||||
Assert.True(bytes.AsMemory(2*blockSize).ToArray().SequenceEqual(objects[2].Payload));
|
||||
|
||||
//link object
|
||||
Assert.Equal(header3.Split.Parent, linkObject.Header.Split.Parent);
|
||||
Assert.Equal(header3.Split.ParentHeader, linkObject.Header.Split.ParentHeader);
|
||||
Assert.Equal(header3.Split.SplitId, linkObject.Header.Split.SplitId);
|
||||
Assert.Equal(0, (int)linkObject.Header.PayloadLength);
|
||||
Assert.True(header3.Attributes.Count == 0);
|
||||
Assert.NotNull(objects[3].Header.Split.Parent);
|
||||
Assert.NotNull(objects[3].Header.Split.ParentHeader);
|
||||
Assert.NotNull(objects[3].Header.Split.ParentSignature);
|
||||
Assert.Equal(objects[2].Header.Split.SplitId, objects[3].Header.Split.SplitId);
|
||||
Assert.True(objects[2].Header.Attributes.Count == 0);
|
||||
|
||||
Assert.Single(linkObject.Header.Split.ParentHeader.Attributes);
|
||||
Assert.Equal("k", linkObject.Header.Split.ParentHeader.Attributes[0].Key);
|
||||
Assert.Equal("v", linkObject.Header.Split.ParentHeader.Attributes[0].Value);
|
||||
// link object
|
||||
Assert.Equal(objects[2].Header.Split.Parent, objects[3].Header.Split.Parent);
|
||||
Assert.Equal(objects[2].Header.Split.ParentHeader, objects[3].Header.Split.ParentHeader);
|
||||
Assert.Equal(objects[2].Header.Split.SplitId, objects[3].Header.Split.SplitId);
|
||||
Assert.Equal(0, (int)objects[3].Header.PayloadLength);
|
||||
Assert.True(objects[3].Header.Attributes.Count == 0);
|
||||
|
||||
var modelObjId = FrostFsObjectId.FromHash(linkObject.Header.Split.Parent.Value.ToByteArray());
|
||||
Assert.Single(objects[3].Header.Split.ParentHeader.Attributes);
|
||||
Assert.Equal("k", objects[3].Header.Split.ParentHeader.Attributes[0].Key);
|
||||
Assert.Equal("v", objects[3].Header.Split.ParentHeader.Attributes[0].Value);
|
||||
|
||||
var modelObjId = FrostFsObjectId.FromHash(objects[3].Header.Split.Parent.Value.ToByteArray());
|
||||
|
||||
Assert.Equal(result.Value, modelObjId.ToString());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue