Repository: ignite Updated Branches: refs/heads/master bc8e64567 -> f104976fe
IGNITE-6081 .NET: Fix PutAll for dependent objects This closes #2555 Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f104976f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f104976f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f104976f Branch: refs/heads/master Commit: f104976fe197d592c8265b3fd30bb0324f624e38 Parents: bc8e645 Author: Pavel Tupitsyn <[email protected]> Authored: Thu Aug 31 11:38:37 2017 +0300 Committer: Pavel Tupitsyn <[email protected]> Committed: Thu Aug 31 11:38:37 2017 +0300 ---------------------------------------------------------------------- .../Binary/BinarySelfTest.cs | 7 +-- .../Cache/CacheAbstractTest.cs | 50 ++++++++++++++++---- .../Impl/Binary/BinaryWriter.cs | 9 ++-- .../Impl/Binary/BinaryWriterExtensions.cs | 4 +- .../Impl/Cache/CacheEntryFilterHolder.cs | 2 +- .../Impl/Cache/CacheEntryProcessorHolder.cs | 4 +- .../Impl/Cache/Store/CacheStoreInternal.cs | 14 ++---- .../Impl/Compute/Closure/ComputeActionJob.cs | 2 +- .../Impl/Compute/Closure/ComputeFuncJob.cs | 4 +- .../Impl/Compute/Closure/ComputeOutFuncJob.cs | 2 +- .../Impl/Compute/ComputeFunc.cs | 2 +- .../Impl/Compute/ComputeJob.cs | 2 +- .../Impl/Compute/ComputeJobHolder.cs | 2 +- .../Impl/Compute/ComputeOutFunc.cs | 2 +- .../Impl/Deployment/PeerLoadingExtensions.cs | 4 +- .../Impl/Deployment/PeerLoadingObjectHolder.cs | 2 +- .../Impl/Messaging/MessageListenerHolder.cs | 2 +- 17 files changed, 68 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs index 4237eda..3ec1e8c 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs @@ -1302,8 +1302,6 @@ namespace Apache.Ignite.Core.Tests.Binary HandleOuter newOuter = outerObj.Deserialize<HandleOuter>(); - Assert.IsFalse(newOuter == newOuter.Inner.Outer); - Assert.IsFalse(newOuter == newOuter.Inner.RawOuter); Assert.IsFalse(newOuter == newOuter.RawInner.RawOuter); Assert.IsFalse(newOuter == newOuter.RawInner.RawOuter); @@ -1313,7 +1311,6 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.IsTrue(newOuter.RawInner.Outer == newOuter.RawInner.RawOuter); Assert.IsTrue(newOuter.Inner == newOuter.Inner.Outer.Inner); - Assert.IsTrue(newOuter.Inner == newOuter.Inner.Outer.RawInner); Assert.IsTrue(newOuter.RawInner == newOuter.RawInner.Outer.Inner); Assert.IsTrue(newOuter.RawInner == newOuter.RawInner.Outer.RawInner); } @@ -2341,7 +2338,7 @@ namespace Apache.Ignite.Core.Tests.Binary writer.WriteString("before", Before); - writer0.WithDetach(w => w.WriteObject("inner", Inner)); + writer0.WriteObject("inner", Inner); writer.WriteString("after", After); @@ -2349,7 +2346,7 @@ namespace Apache.Ignite.Core.Tests.Binary rawWriter.WriteString(RawBefore); - writer0.WithDetach(w => w.WriteObject(RawInner)); + writer0.WriteObjectDetached(RawInner); rawWriter.WriteString(RawAfter); } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs index 9e44720..27ac3f4 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs @@ -597,27 +597,52 @@ namespace Apache.Ignite.Core.Tests.Cache } [Test] - public void TestPutAll() + public void TestPutAll([Values(true, false)] bool async) { var cache = Cache(); + if (async) + { + cache = cache.WrapAsync(); + } + + // Primitives. cache.PutAll(new Dictionary<int, int> { { 1, 1 }, { 2, 2 }, { 3, 3 } }); Assert.AreEqual(1, cache.Get(1)); Assert.AreEqual(2, cache.Get(2)); Assert.AreEqual(3, cache.Get(3)); - } - [Test] - public void TestPutAllAsync() - { - var cache = Cache().WrapAsync(); + // Objects. + var cache2 = Cache<int, Container>(); - cache.PutAll(new Dictionary<int, int> { { 1, 1 }, { 2, 2 }, { 3, 3 } }); + if (async) + { + cache2 = cache2.WrapAsync(); + } - Assert.AreEqual(1, cache.Get(1)); - Assert.AreEqual(2, cache.Get(2)); - Assert.AreEqual(3, cache.Get(3)); + var obj1 = new Container(); + var obj2 = new Container(); + var obj3 = new Container(); + + obj1.Inner = obj2; + obj2.Inner = obj1; + obj3.Inner = obj2; + + cache2.PutAll(new Dictionary<int, Container> + { + {1, obj1}, + {2, obj2}, + {3, obj3} + }); + + var res1 = cache2[1]; + var res2 = cache2[2]; + var res3 = cache2[3]; + + Assert.AreEqual(res1, res1.Inner.Inner); + Assert.AreEqual(res2, res2.Inner.Inner); + Assert.IsNotNull(res3.Inner.Inner.Inner); } /// <summary> @@ -2537,5 +2562,10 @@ namespace Apache.Ignite.Core.Tests.Cache } } } + + private class Container + { + public Container Inner; + } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs index 3f35b7b..73b4136 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs @@ -1413,11 +1413,12 @@ namespace Apache.Ignite.Core.Impl.Binary /// <summary> /// Perform action with detached semantics. /// </summary> - /// <param name="a"></param> - internal void WithDetach(Action<BinaryWriter> a) + internal void WriteObjectDetached<T>(T o) { if (_detaching) - a(this); + { + Write(o); + } else { _detaching = true; @@ -1427,7 +1428,7 @@ namespace Apache.Ignite.Core.Impl.Binary try { - a(this); + Write(o); } finally { http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs index 3dc8a96..02b5dec 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs @@ -174,8 +174,8 @@ namespace Apache.Ignite.Core.Impl.Binary foreach (var pair in vals) { - writer.Write(pair.Key); - writer.Write(pair.Value); + writer.WriteObjectDetached(pair.Key); + writer.WriteObjectDetached(pair.Value); cnt++; } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryFilterHolder.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryFilterHolder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryFilterHolder.cs index 779e350..3377f11 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryFilterHolder.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryFilterHolder.cs @@ -82,7 +82,7 @@ namespace Apache.Ignite.Core.Impl.Cache { var writer0 = (BinaryWriter)writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteObject(_pred)); + writer0.WriteObjectDetached(_pred); writer0.WriteBoolean(_keepBinary); } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryProcessorHolder.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryProcessorHolder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryProcessorHolder.cs index 9fc7c7d..24a142a 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryProcessorHolder.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheEntryProcessorHolder.cs @@ -105,8 +105,8 @@ namespace Apache.Ignite.Core.Impl.Cache { var writer0 = (BinaryWriter) writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteObject(_proc)); - writer0.WithDetach(w => w.WriteObject(_arg)); + writer0.WriteObjectDetached(_proc); + writer0.WriteObjectDetached(_arg); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStoreInternal.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStoreInternal.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStoreInternal.cs index df4c1ae..12183f8 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStoreInternal.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStoreInternal.cs @@ -137,11 +137,8 @@ namespace Apache.Ignite.Core.Impl.Cache.Store { lock (writer) // User-defined store can be multithreaded. { - writer.WithDetach(w => - { - w.WriteObject(k); - w.WriteObject(v); - }); + writer.WriteObjectDetached(k); + writer.WriteObjectDetached(v); cnt++; } @@ -188,11 +185,8 @@ namespace Apache.Ignite.Core.Impl.Cache.Store { var entry0 = entry; // Copy modified closure. - writer.WithDetach(w => - { - w.WriteObject(entry0.Key); - w.WriteObject(entry0.Value); - }); + writer.WriteObjectDetached(entry0.Key); + writer.WriteObjectDetached(entry0.Value); cnt++; } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeActionJob.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeActionJob.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeActionJob.cs index a1f84da..6db1055 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeActionJob.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeActionJob.cs @@ -66,7 +66,7 @@ namespace Apache.Ignite.Core.Impl.Compute.Closure { var writer0 = (BinaryWriter) writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteWithPeerDeployment(_action)); + writer0.WriteWithPeerDeployment(_action); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeFuncJob.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeFuncJob.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeFuncJob.cs index 8350818..ecb4b98 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeFuncJob.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeFuncJob.cs @@ -68,8 +68,8 @@ namespace Apache.Ignite.Core.Impl.Compute.Closure { BinaryWriter writer0 = (BinaryWriter) writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteWithPeerDeployment(_clo)); - writer0.WithDetach(w => w.WriteWithPeerDeployment(_arg)); + writer0.WriteWithPeerDeployment(_clo); + writer0.WriteWithPeerDeployment(_arg); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeOutFuncJob.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeOutFuncJob.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeOutFuncJob.cs index abdf448..9652794 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeOutFuncJob.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/Closure/ComputeOutFuncJob.cs @@ -62,7 +62,7 @@ namespace Apache.Ignite.Core.Impl.Compute.Closure { var writer0 = (BinaryWriter) writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteObject(_clo)); + writer0.WriteObjectDetached(_clo); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs index 4132347..44f2880 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs @@ -79,7 +79,7 @@ namespace Apache.Ignite.Core.Impl.Compute { var writer0 = (BinaryWriter) writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteWithPeerDeployment(_func)); + writer0.WriteWithPeerDeployment(_func); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs index 56e3708..57e234c 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs @@ -109,7 +109,7 @@ namespace Apache.Ignite.Core.Impl.Compute { var writer0 = (BinaryWriter)writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteWithPeerDeployment(Job)); + writer0.WriteWithPeerDeployment(Job); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJobHolder.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJobHolder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJobHolder.cs index 120d074..5c009ac 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJobHolder.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJobHolder.cs @@ -223,7 +223,7 @@ namespace Apache.Ignite.Core.Impl.Compute { BinaryWriter writer0 = (BinaryWriter) writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteObject(_job)); + writer0.WriteObjectDetached(_job); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs index 4e5f523..3d59245 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs @@ -83,7 +83,7 @@ namespace Apache.Ignite.Core.Impl.Compute { var writer0 = (BinaryWriter)writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteWithPeerDeployment(_func)); + writer0.WriteWithPeerDeployment(_func); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingExtensions.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingExtensions.cs index 035a041..614f26c 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingExtensions.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingExtensions.cs @@ -40,7 +40,7 @@ namespace Apache.Ignite.Core.Impl.Deployment try { writer.WrapperFunc = WrapperFunc; - writer.WriteObject(o); + writer.WriteObjectDetached(o); } finally { @@ -49,7 +49,7 @@ namespace Apache.Ignite.Core.Impl.Deployment } else { - writer.WriteObject(o); + writer.WriteObjectDetached(o); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingObjectHolder.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingObjectHolder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingObjectHolder.cs index 584750a..9457538 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingObjectHolder.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Deployment/PeerLoadingObjectHolder.cs @@ -84,7 +84,7 @@ namespace Apache.Ignite.Core.Impl.Deployment writer0.WriteGuid(writer0.Marshaller.Ignite.GetLocalNode().Id); writer0.WriteString(_object.GetType().AssemblyQualifiedName); - writer0.WithDetach(w => w.WriteObject(_object)); + writer0.WriteObjectDetached(_object); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/f104976f/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Messaging/MessageListenerHolder.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Messaging/MessageListenerHolder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Messaging/MessageListenerHolder.cs index 8e794d1..6e4e9f7 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Messaging/MessageListenerHolder.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Messaging/MessageListenerHolder.cs @@ -148,7 +148,7 @@ namespace Apache.Ignite.Core.Impl.Messaging { var writer0 = (BinaryWriter)writer.GetRawWriter(); - writer0.WithDetach(w => w.WriteObject(Filter)); + writer0.WriteObjectDetached(Filter); } /// <summary>
