From 3a0859da1b8d86357ecfd8a9069ca19b9aebfb8d Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 14:40:45 -0800 Subject: [PATCH 1/9] Compres Model XML, Stage 3: assgin `Extension.Value = null` --- Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs b/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs index 120a8df67..540c84765 100644 --- a/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs +++ b/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs @@ -200,8 +200,8 @@ private Dictionary BuildMetadata(Domain domain, TypeIdRegis // Since we support storage nodes, stored domain model and real model of a node // must be synchronized. So we must update types' mappings storedModel.UpdateMappings(UpgradeContext.NodeConfiguration); - var (serializedModel, compressed) = storedModel.Serialize(); - var modelExtension = new ExtensionMetadata(WellKnown.DomainModelExtensionName, serializedModel, compressed); + var (_, compressed) = storedModel.Serialize(); + var modelExtension = new ExtensionMetadata(WellKnown.DomainModelExtensionName, null, compressed); var indexesExtension = GetPartialIndexes(domain, types); metadata.Assemblies.AddRange(assemblyMetadata); metadata.Types.AddRange(typeMetadata); From e6950d0e11aebcce642524e12b38625ecc20b742 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 14:49:15 -0800 Subject: [PATCH 2/9] Bump version --- Version.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Version.props b/Version.props index 8b3a38113..b2fd67818 100644 --- a/Version.props +++ b/Version.props @@ -2,8 +2,8 @@ - 7.2.162 - servicetitan + 7.2.170 + servicetitan-xml-stage3 From c976fb273a7b645330dfaa37c7786e6d095ac2b6 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 14:51:18 -0800 Subject: [PATCH 3/9] Remove comment in Serialize() --- Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs index 9c17c9700..25de489f5 100644 --- a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs +++ b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs @@ -80,10 +80,7 @@ public static StoredDomainModel Deserialize(string serialized, byte[] data) brotliStream.Write(Encoding.UTF8.GetBytes(xml)); } - //!!!TODO Uncomment following line to switch to Compressed XML serialization - // return (null, ms.ToArray()); - - return (xml, ms.ToArray()); + return (null, ms.ToArray()); } /// From 4fb08c4b24de4564d871aa4dca6a9b3aa0ea0520 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 15:35:29 -0800 Subject: [PATCH 4/9] .SerializeIntoStream() --- Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs | 9 +++++++++ Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs | 4 +--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs index 450e91ab2..8ba3ac616 100644 --- a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs +++ b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs @@ -53,5 +53,14 @@ public string Serialize(T value) } return stringWriter.ToString(); } + + public void SerializeIntoStream(T value, Stream stream) + { + ArgumentNullException.ThrowIfNull(value); + + using StreamWriter stringWriter = new(stream); + using var xmlWriter = XmlWriter.Create(stringWriter, WriterSettings); + serializer.Serialize(xmlWriter, value); + } } } diff --git a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs index 25de489f5..2a73c52e2 100644 --- a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs +++ b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs @@ -73,13 +73,11 @@ public static StoredDomainModel Deserialize(string serialized, byte[] data) /// Serialized instance. public (string Xml, byte[] Compressed) Serialize() { - var xml = Serializer.Serialize(this); MemoryStream ms = new(1000); ms.WriteByte(1); using (BrotliStream brotliStream = new(ms, CompressionLevel.Optimal)) { - brotliStream.Write(Encoding.UTF8.GetBytes(xml)); + Serializer.SerializeIntoStream(this, brotliStream); } - return (null, ms.ToArray()); } From 2e8a1dbfb7a365ac9c36a9bd2bc465392cd2dcf6 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 15:38:04 -0800 Subject: [PATCH 5/9] Add comment --- Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs index 2a73c52e2..defe80aae 100644 --- a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs +++ b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs @@ -74,7 +74,7 @@ public static StoredDomainModel Deserialize(string serialized, byte[] data) public (string Xml, byte[] Compressed) Serialize() { MemoryStream ms = new(1000); - ms.WriteByte(1); + ms.WriteByte(1); // 1 - means Brotli method using (BrotliStream brotliStream = new(ms, CompressionLevel.Optimal)) { Serializer.SerializeIntoStream(this, brotliStream); } From a3a2b9a2b3121fdc55ff6a5943360321683ea01b Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 15:41:13 -0800 Subject: [PATCH 6/9] Add comment --- Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs | 8 ++++++++ .../Orm/Model/Stored/StoredDomainModel.cs | 12 +++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs index 8ba3ac616..fbfb0c153 100644 --- a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs +++ b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs @@ -38,6 +38,14 @@ public T Deserialize(string value) return (T) serializer.Deserialize(reader); } + public T DeserializeFromStream(string value, Stream stream) + { + ArgumentNullException.ThrowIfNull(value, "serialized"); + + using var reader = new StreamReader(stream); + return (T) serializer.Deserialize(reader); + } + /// /// Serializes value of to string. /// diff --git a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs index defe80aae..809ca38eb 100644 --- a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs +++ b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs @@ -48,21 +48,15 @@ public sealed class StoredDomainModel public static StoredDomainModel Deserialize(string serialized, byte[] data) { if (data != null) { - string xml; switch (data[0]) { case 0: - xml = Encoding.UTF8.GetString(data, 1, data.Length - 1); - break; + return Serializer.Deserialize(Encoding.UTF8.GetString(data, 1, data.Length - 1)); case 1: - using (BrotliStream brotliStream = new(new MemoryStream(data, 1, data.Length - 1), CompressionMode.Decompress)) { - using StreamReader reader = new(brotliStream, Encoding.UTF8); - xml = reader.ReadToEnd(); - } - break; + using BrotliStream brotliStream = new(new MemoryStream(data, 1, data.Length - 1), CompressionMode.Decompress); + return Serializer.DeserializeFromStream(brotliStream); default: throw new NotSupportedException("Invalid data format"); } - return Serializer.Deserialize(xml); } return Serializer.Deserialize(serialized); } From 94f77ad9a012275e9b84a38c204e0744e2ef2387 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 15:41:57 -0800 Subject: [PATCH 7/9] DeserializeFromStream() --- Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs | 10 ++++------ Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs | 5 +++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs index fbfb0c153..f3be9f0fe 100644 --- a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs +++ b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs @@ -34,15 +34,13 @@ public T Deserialize(string value) { ArgumentNullException.ThrowIfNull(value, "serialized"); - using (var reader = new StringReader(value)) - return (T) serializer.Deserialize(reader); + using StringReader reader = new(value); + return (T) serializer.Deserialize(reader); } - public T DeserializeFromStream(string value, Stream stream) + public T DeserializeFromStream(Stream stream) { - ArgumentNullException.ThrowIfNull(value, "serialized"); - - using var reader = new StreamReader(stream); + using StreamReader reader = new(stream); return (T) serializer.Deserialize(reader); } diff --git a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs index 809ca38eb..c8a266c9e 100644 --- a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs +++ b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs @@ -52,8 +52,9 @@ public static StoredDomainModel Deserialize(string serialized, byte[] data) case 0: return Serializer.Deserialize(Encoding.UTF8.GetString(data, 1, data.Length - 1)); case 1: - using BrotliStream brotliStream = new(new MemoryStream(data, 1, data.Length - 1), CompressionMode.Decompress); - return Serializer.DeserializeFromStream(brotliStream); + using (BrotliStream brotliStream = new(new MemoryStream(data, 1, data.Length - 1), CompressionMode.Decompress)) { + return Serializer.DeserializeFromStream(brotliStream); + } default: throw new NotSupportedException("Invalid data format"); } From 37b0caabcd3f4f194bffd74df38f8ca790d09678 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 13 Jan 2025 16:26:16 -0800 Subject: [PATCH 8/9] Simplify --- Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs index f3be9f0fe..568160129 100644 --- a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs +++ b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs @@ -38,11 +38,8 @@ public T Deserialize(string value) return (T) serializer.Deserialize(reader); } - public T DeserializeFromStream(Stream stream) - { - using StreamReader reader = new(stream); - return (T) serializer.Deserialize(reader); - } + public T DeserializeFromStream(Stream stream) => + (T) serializer.Deserialize(stream); /// /// Serializes value of to string. @@ -64,8 +61,7 @@ public void SerializeIntoStream(T value, Stream stream) { ArgumentNullException.ThrowIfNull(value); - using StreamWriter stringWriter = new(stream); - using var xmlWriter = XmlWriter.Create(stringWriter, WriterSettings); + using var xmlWriter = XmlWriter.Create(stream, WriterSettings); serializer.Serialize(xmlWriter, value); } } From 1784eae1854d753f684c718f069bb669149853fe Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Wed, 29 Jan 2025 17:06:58 -0800 Subject: [PATCH 9/9] Bump version --- Version.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Version.props b/Version.props index 35ec5966e..efc202636 100644 --- a/Version.props +++ b/Version.props @@ -2,8 +2,8 @@ - 7.2.167.1 - servicetitan-xml-stage3 + 7.2.168 + servicetitan