Skip to content

Commit b7bdc50

Browse files
authored
Compress Model XML, Stage 3: assign [MetatdataExtension].Value = null to get rid of Uncompressed XML (#333)
* Compres Model XML, Stage 3: assgin `Extension.Value = null` * Bump version * Remove comment in Serialize() * .SerializeIntoStream() * Add comment * Add comment * DeserializeFromStream() * Simplify * Bump version
1 parent 8fe46cc commit b7bdc50

File tree

4 files changed

+21
-20
lines changed

4 files changed

+21
-20
lines changed

Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs

+13-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,13 @@ public T Deserialize(string value)
3434
{
3535
ArgumentNullException.ThrowIfNull(value, "serialized");
3636

37-
using (var reader = new StringReader(value))
38-
return (T) serializer.Deserialize(reader);
37+
using StringReader reader = new(value);
38+
return (T) serializer.Deserialize(reader);
3939
}
4040

41+
public T DeserializeFromStream(Stream stream) =>
42+
(T) serializer.Deserialize(stream);
43+
4144
/// <summary>
4245
/// Serializes value of <typeparamref name="T"/> to string.
4346
/// </summary>
@@ -53,5 +56,13 @@ public string Serialize(T value)
5356
}
5457
return stringWriter.ToString();
5558
}
59+
60+
public void SerializeIntoStream(T value, Stream stream)
61+
{
62+
ArgumentNullException.ThrowIfNull(value);
63+
64+
using var xmlWriter = XmlWriter.Create(stream, WriterSettings);
65+
serializer.Serialize(xmlWriter, value);
66+
}
5667
}
5768
}

Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs

+5-15
Original file line numberDiff line numberDiff line change
@@ -48,21 +48,16 @@ public sealed class StoredDomainModel
4848
public static StoredDomainModel Deserialize(string serialized, byte[] data)
4949
{
5050
if (data != null) {
51-
string xml;
5251
switch (data[0]) {
5352
case 0:
54-
xml = Encoding.UTF8.GetString(data, 1, data.Length - 1);
55-
break;
53+
return Serializer.Deserialize(Encoding.UTF8.GetString(data, 1, data.Length - 1));
5654
case 1:
5755
using (BrotliStream brotliStream = new(new MemoryStream(data, 1, data.Length - 1), CompressionMode.Decompress)) {
58-
using StreamReader reader = new(brotliStream, Encoding.UTF8);
59-
xml = reader.ReadToEnd();
56+
return Serializer.DeserializeFromStream(brotliStream);
6057
}
61-
break;
6258
default:
6359
throw new NotSupportedException("Invalid data format");
6460
}
65-
return Serializer.Deserialize(xml);
6661
}
6762
return Serializer.Deserialize(serialized);
6863
}
@@ -73,17 +68,12 @@ public static StoredDomainModel Deserialize(string serialized, byte[] data)
7368
/// <returns>Serialized instance.</returns>
7469
public (string Xml, byte[] Compressed) Serialize()
7570
{
76-
var xml = Serializer.Serialize(this);
7771
MemoryStream ms = new(1000);
78-
ms.WriteByte(1);
72+
ms.WriteByte(1); // 1 - means Brotli method
7973
using (BrotliStream brotliStream = new(ms, CompressionLevel.Optimal)) {
80-
brotliStream.Write(Encoding.UTF8.GetBytes(xml));
74+
Serializer.SerializeIntoStream(this, brotliStream);
8175
}
82-
83-
//!!!TODO Uncomment following line to switch to Compressed XML serialization
84-
// return (null, ms.ToArray());
85-
86-
return (xml, ms.ToArray());
76+
return (null, ms.ToArray());
8777
}
8878

8979
/// <summary>

Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ private Dictionary<string, MetadataSet> BuildMetadata(Domain domain, TypeIdRegis
200200
// Since we support storage nodes, stored domain model and real model of a node
201201
// must be synchronized. So we must update types' mappings
202202
storedModel.UpdateMappings(UpgradeContext.NodeConfiguration);
203-
var (serializedModel, compressed) = storedModel.Serialize();
204-
var modelExtension = new ExtensionMetadata(WellKnown.DomainModelExtensionName, serializedModel, compressed);
203+
var (_, compressed) = storedModel.Serialize();
204+
var modelExtension = new ExtensionMetadata(WellKnown.DomainModelExtensionName, null, compressed);
205205
var indexesExtension = GetPartialIndexes(domain, types);
206206
metadata.Assemblies.AddRange(assemblyMetadata);
207207
metadata.Types.AddRange(typeMetadata);

Version.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33

44
<PropertyGroup>
5-
<DoVersion>7.2.167</DoVersion>
5+
<DoVersion>7.2.168</DoVersion>
66
<DoVersionSuffix>servicetitan</DoVersionSuffix>
77
</PropertyGroup>
88

0 commit comments

Comments
 (0)