You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2017/07/04 14:42:43 UTC
ignite git commit: IGNITE-5629 .NET: CacheConfiguration copy
constructor
Repository: ignite
Updated Branches:
refs/heads/ignite-2.1 6c9d2228d -> b69f53e0c
IGNITE-5629 .NET: CacheConfiguration copy constructor
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b69f53e0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b69f53e0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b69f53e0
Branch: refs/heads/ignite-2.1
Commit: b69f53e0ccf9d3da42a99d4423fb3d8bdd60a7bb
Parents: 6c9d222
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Tue Jul 4 17:42:31 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Tue Jul 4 17:42:31 2017 +0300
----------------------------------------------------------------------
.../utils/PlatformConfigurationUtils.java | 8 ++-
.../Cache/CacheConfigurationTest.cs | 21 ++++++
.../Cache/Configuration/CacheConfiguration.cs | 75 ++++++++++++++++++--
.../Apache.Ignite.Core/IgniteConfiguration.cs | 7 +-
4 files changed, 99 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/b69f53e0/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
index 23106ba..92db41a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
@@ -885,8 +885,10 @@ public class PlatformConfigurationUtils {
writer.writeInt(cnt);
for (CachePluginConfiguration cfg : plugins) {
- if (cfg instanceof PlatformCachePluginConfiguration)
- writer.writeObject(((PlatformCachePluginConfiguration)cfg).nativeCfg());
+ if (cfg instanceof PlatformCachePluginConfiguration) {
+ writer.writeBoolean(false); // Pure platform plugin.
+ writer.writeObject(((PlatformCachePluginConfiguration) cfg).nativeCfg());
+ }
}
}
}
@@ -1317,6 +1319,8 @@ public class PlatformConfigurationUtils {
private static void readCachePluginConfiguration(CacheConfiguration cfg, BinaryRawReader in) {
int plugCfgFactoryId = in.readInt();
+ in.readInt(); // skip size.
+
PlatformCachePluginConfigurationClosure plugCfg = cachePluginConfiguration(plugCfgFactoryId);
plugCfg.apply(cfg, in);
http://git-wip-us.apache.org/repos/asf/ignite/blob/b69f53e0/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs
index 1f6dbcf..435e65f 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs
@@ -190,6 +190,27 @@ namespace Apache.Ignite.Core.Tests.Cache
}
/// <summary>
+ /// Tests the copy constructor.
+ /// </summary>
+ [Test]
+ public void TestCopyConstructor()
+ {
+ foreach (var cfg in new[]
+ {new CacheConfiguration(), GetCustomCacheConfiguration(), GetCustomCacheConfiguration2()})
+ {
+ // Check direct copy.
+ AssertConfigsAreEqual(cfg, cfg);
+ AssertConfigsAreEqual(cfg, new CacheConfiguration(cfg));
+
+ // Check copy via Ignite config.
+ var igniteCfg = new IgniteConfiguration {CacheConfiguration = new[] {cfg}};
+ var igniteCfgCopy = new IgniteConfiguration(igniteCfg);
+
+ AssertConfigsAreEqual(cfg, igniteCfgCopy.CacheConfiguration.Single());
+ }
+ }
+
+ /// <summary>
/// Asserts the configuration is default.
/// </summary>
private static void AssertConfigIsDefault(CacheConfiguration cfg)
http://git-wip-us.apache.org/repos/asf/ignite/blob/b69f53e0/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
index ec0ac40..f5a5179 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
@@ -25,6 +25,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
+ using System.IO;
using System.Linq;
using Apache.Ignite.Core.Binary;
using Apache.Ignite.Core.Cache;
@@ -34,11 +35,14 @@ namespace Apache.Ignite.Core.Cache.Configuration
using Apache.Ignite.Core.Cache.Expiry;
using Apache.Ignite.Core.Cache.Store;
using Apache.Ignite.Core.Common;
+ using Apache.Ignite.Core.Impl;
using Apache.Ignite.Core.Impl.Binary;
using Apache.Ignite.Core.Impl.Cache.Affinity;
using Apache.Ignite.Core.Impl.Cache.Expiry;
using Apache.Ignite.Core.Log;
using Apache.Ignite.Core.Plugin.Cache;
+ using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader;
+ using BinaryWriter = Apache.Ignite.Core.Impl.Binary.BinaryWriter;
/// <summary>
/// Defines grid cache configuration.
@@ -199,10 +203,43 @@ namespace Apache.Ignite.Core.Cache.Configuration
}
/// <summary>
+ /// Initializes a new instance of the <see cref="CacheConfiguration"/> class,
+ /// performing a deep copy of specified cache configuration.
+ /// </summary>
+ /// <param name="other">The other configuration to perfrom deep copy from.</param>
+ public CacheConfiguration(CacheConfiguration other)
+ {
+ if (other != null)
+ {
+ using (var stream = IgniteManager.Memory.Allocate().GetStream())
+ {
+ other.Write(BinaryUtils.Marshaller.StartMarshal(stream));
+
+ stream.SynchronizeOutput();
+ stream.Seek(0, SeekOrigin.Begin);
+
+ Read(BinaryUtils.Marshaller.StartUnmarshal(stream));
+ }
+
+ // Plugins should be copied directly.
+ PluginConfigurations = other.PluginConfigurations;
+ }
+ }
+
+ /// <summary>
/// Initializes a new instance of the <see cref="CacheConfiguration"/> class.
/// </summary>
/// <param name="reader">The reader.</param>
- internal CacheConfiguration(IBinaryRawReader reader)
+ internal CacheConfiguration(BinaryReader reader)
+ {
+ Read(reader);
+ }
+
+ /// <summary>
+ /// Reads data into this instance from the specified reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ private void Read(BinaryReader reader)
{
// Make sure system marshaller is used.
Debug.Assert(((BinaryReader) reader).Marshaller == BinaryUtils.Marshaller);
@@ -244,7 +281,9 @@ namespace Apache.Ignite.Core.Cache.Configuration
CacheStoreFactory = reader.ReadObject<IFactory<ICacheStore>>();
var count = reader.ReadInt();
- QueryEntities = count == 0 ? null : Enumerable.Range(0, count).Select(x => new QueryEntity(reader)).ToList();
+ QueryEntities = count == 0
+ ? null
+ : Enumerable.Range(0, count).Select(x => new QueryEntity(reader)).ToList();
NearConfiguration = reader.ReadBoolean() ? new NearCacheConfiguration(reader) : null;
@@ -253,19 +292,35 @@ namespace Apache.Ignite.Core.Cache.Configuration
ExpiryPolicyFactory = ExpiryPolicySerializer.ReadPolicyFactory(reader);
count = reader.ReadInt();
- PluginConfigurations = count == 0
- ? null
- : Enumerable.Range(0, count).Select(x => reader.ReadObject<ICachePluginConfiguration>()).ToList();
+
+ if (count > 0)
+ {
+ PluginConfigurations = new List<ICachePluginConfiguration>(count);
+ for (int i = 0; i < count; i++)
+ {
+ if (reader.ReadBoolean())
+ {
+ // FactoryId-based plugin: skip.
+ var size = reader.ReadInt();
+ reader.Stream.Seek(size, SeekOrigin.Current);
+ }
+ else
+ {
+ // Pure .NET plugin.
+ PluginConfigurations.Add(reader.ReadObject<ICachePluginConfiguration>());
+ }
+ }
+ }
}
/// <summary>
/// Writes this instance to the specified writer.
/// </summary>
/// <param name="writer">The writer.</param>
- internal void Write(IBinaryRawWriter writer)
+ internal void Write(BinaryWriter writer)
{
// Make sure system marshaller is used.
- Debug.Assert(((BinaryWriter) writer).Marshaller == BinaryUtils.Marshaller);
+ Debug.Assert(writer.Marshaller == BinaryUtils.Marshaller);
writer.WriteInt((int) AtomicityMode);
writer.WriteInt(Backups);
@@ -344,7 +399,13 @@ namespace Apache.Ignite.Core.Cache.Configuration
{
writer.WriteBoolean(true);
writer.WriteInt(cachePlugin.CachePluginConfigurationClosureFactoryId.Value);
+
+ int pos = writer.Stream.Position;
+ writer.WriteInt(0); // Reserve size.
+
cachePlugin.WriteBinary(writer);
+
+ writer.Stream.WriteInt(pos, writer.Stream.Position - pos); // Write size.
}
else
{
http://git-wip-us.apache.org/repos/asf/ignite/blob/b69f53e0/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index 8173642..4419e2e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -48,6 +48,7 @@ namespace Apache.Ignite.Core
using Apache.Ignite.Core.PersistentStore;
using Apache.Ignite.Core.Plugin;
using Apache.Ignite.Core.Transactions;
+ using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader;
using BinaryWriter = Apache.Ignite.Core.Impl.Binary.BinaryWriter;
/// <summary>
@@ -242,7 +243,7 @@ namespace Apache.Ignite.Core
/// </summary>
/// <param name="binaryReader">The binary reader.</param>
/// <param name="baseConfig">The base configuration.</param>
- internal IgniteConfiguration(IBinaryRawReader binaryReader, IgniteConfiguration baseConfig)
+ internal IgniteConfiguration(BinaryReader binaryReader, IgniteConfiguration baseConfig)
{
Debug.Assert(binaryReader != null);
Debug.Assert(baseConfig != null);
@@ -509,7 +510,7 @@ namespace Apache.Ignite.Core
/// Reads data from specified reader into current instance.
/// </summary>
/// <param name="r">The binary reader.</param>
- private void ReadCore(IBinaryRawReader r)
+ private void ReadCore(BinaryReader r)
{
// Simple properties
_clientMode = r.ReadBooleanNullable();
@@ -630,7 +631,7 @@ namespace Apache.Ignite.Core
/// Reads data from specified reader into current instance.
/// </summary>
/// <param name="binaryReader">The binary reader.</param>
- private void Read(IBinaryRawReader binaryReader)
+ private void Read(BinaryReader binaryReader)
{
ReadCore(binaryReader);