IGNITE-4563 .NET: Fix ICache.LoadCache failures on non-primitive arguments
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/03f68223 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/03f68223 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/03f68223 Branch: refs/heads/ignite-1.9 Commit: 03f6822319b9c3d4ca7e76daef5a671097b913d9 Parents: 296bc41 Author: Pavel Tupitsyn <[email protected]> Authored: Fri Jan 20 12:56:26 2017 +0300 Committer: Pavel Tupitsyn <[email protected]> Committed: Tue Feb 7 16:03:36 2017 +0300 ---------------------------------------------------------------------- .../platform/cache/PlatformCache.java | 11 +- .../Apache.Ignite.Core.Tests.csproj | 1 + .../Cache/Store/CacheParallelLoadStoreTest.cs | 9 +- .../Cache/Store/CacheStoreSessionTest.cs | 22 +- .../Cache/Store/CacheStoreTest.cs | 333 ++++++++++++------- .../Cache/Store/CacheTestStore.cs | 14 + .../Cache/Store/NamedNodeCacheStoreTest.cs | 34 ++ .../Apache.Ignite.Core/Impl/Cache/CacheImpl.cs | 14 +- 8 files changed, 294 insertions(+), 144 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java index aec3703..643907d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java @@ -815,7 +815,16 @@ public class PlatformCache extends PlatformAbstractTarget { if (pred != null) filter = platformCtx.createCacheEntryFilter(pred, 0); - Object[] args = reader.readObjectArray(); + Object[] args = null; + + int argCnt = reader.readInt(); + + if (argCnt > 0) { + args = new Object[argCnt]; + + for (int i = 0; i < argCnt; i++) + args[i] = reader.readObjectDetached(); + } if (loc) cache.localLoadCache(filter, args); http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj index f440c25..179d67f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj @@ -72,6 +72,7 @@ <Compile Include="Cache\CacheResultTest.cs" /> <Compile Include="Cache\CacheSwapSpaceTest.cs" /> <Compile Include="Cache\Store\CacheStoreAdapterTest.cs" /> + <Compile Include="Cache\Store\NamedNodeCacheStoreTest.cs" /> <Compile Include="Collections\MultiValueDictionaryTest.cs" /> <Compile Include="Collections\ReadOnlyCollectionTest.cs" /> <Compile Include="Collections\ReadOnlyDictionaryTest.cs" /> http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs index 105dea2..2e74b3f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs @@ -25,7 +25,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// <summary> /// Tests for GridCacheParallelLoadStoreAdapter. /// </summary> - public class CacheParallelLoadStoreTest + public sealed class CacheParallelLoadStoreTest { // object store name private const string ObjectStoreCacheName = "object_store_parallel"; @@ -34,11 +34,8 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// Set up test class. /// </summary> [TestFixtureSetUp] - public virtual void BeforeTests() + public void BeforeTests() { - TestUtils.KillProcesses(); - TestUtils.JvmDebug = true; - Ignition.Start(new IgniteConfiguration { JvmClasspath = TestUtils.CreateTestClasspath(), @@ -55,7 +52,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// Tear down test class. /// </summary> [TestFixtureTearDown] - public virtual void AfterTests() + public void AfterTests() { Ignition.StopAll(true); } http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs index 5cc0849..54e0414 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs @@ -22,14 +22,13 @@ namespace Apache.Ignite.Core.Tests.Cache.Store using System.Collections.Generic; using System.Linq; using Apache.Ignite.Core.Cache.Store; - using Apache.Ignite.Core.Impl; using Apache.Ignite.Core.Resource; using NUnit.Framework; /// <summary> /// Tests for store session. /// </summary> - public class CacheStoreSessionTest + public sealed class CacheStoreSessionTest { /** Grid name. */ private const string IgniteName = "grid"; @@ -47,7 +46,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// Set up routine. /// </summary> [TestFixtureSetUp] - public virtual void BeforeTests() + public void BeforeTests() { //TestUtils.JVM_DEBUG = true; @@ -71,7 +70,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// Tear down routine. /// </summary> [TestFixtureTearDown] - public virtual void AfterTests() + public void AfterTests() { Ignition.StopAll(true); } @@ -147,7 +146,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// Dump operations. /// </summary> /// <param name="dump">Dump.</param> - internal static void DumpOperations(ICollection<Operation> dump) + private static void DumpOperations(ICollection<Operation> dump) { _dumps.Add(dump); } @@ -155,6 +154,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// <summary> /// Test store implementation. /// </summary> + // ReSharper disable once UnusedMember.Global public class Store : CacheStoreAdapter { /** Store session. */ @@ -215,7 +215,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// <summary> /// Logged operation. /// </summary> - internal class Operation + private class Operation { /// <summary> /// Constructor. @@ -244,22 +244,22 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// <summary> /// Cache name. /// </summary> - public string CacheName { get; set; } + public string CacheName { get; private set; } /// <summary> /// Operation type. /// </summary> - public OperationType Type { get; set; } + public OperationType Type { get; private set; } /// <summary> /// Key. /// </summary> - public int Key { get; set; } + public int Key { get; private set; } /// <summary> /// Value. /// </summary> - public int Value { get; set; } + public int Value { get; private set; } /// <summary> /// Commit flag. @@ -270,7 +270,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /// <summary> /// Operation types. /// </summary> - internal enum OperationType + private enum OperationType { /** Write. */ Write, http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs index 2a235aa..a66aea8 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs @@ -28,92 +28,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store using NUnit.Framework; /// <summary> - /// - /// </summary> - class Key - { - private readonly int _idx; - - public Key(int idx) - { - _idx = idx; - } - - public int Index() - { - return _idx; - } - - public override bool Equals(object obj) - { - if (obj == null || obj.GetType() != GetType()) - return false; - - Key key = (Key)obj; - - return key._idx == _idx; - } - - public override int GetHashCode() - { - return _idx; - } - } - - /// <summary> - /// - /// </summary> - class Value - { - private int _idx; - - public Value(int idx) - { - _idx = idx; - } - - public int Index() - { - return _idx; - } - } - - /// <summary> - /// Cache entry predicate. - /// </summary> - [Serializable] - public class CacheEntryFilter : ICacheEntryFilter<int, string> - { - /** <inheritdoc /> */ - public bool Invoke(ICacheEntry<int, string> entry) - { - return entry.Key >= 105; - } - } - - /// <summary> - /// Cache entry predicate that throws an exception. - /// </summary> - [Serializable] - public class ExceptionalEntryFilter : ICacheEntryFilter<int, string> - { - /** <inheritdoc /> */ - public bool Invoke(ICacheEntry<int, string> entry) - { - throw new Exception("Expected exception in ExceptionalEntryFilter"); - } - } - - /// <summary> - /// Filter that can't be serialized. - /// </summary> - public class InvalidCacheEntryFilter : CacheEntryFilter - { - // No-op. - } - - /// <summary> - /// + /// Tests cache store functionality. /// </summary> public class CacheStoreTest { @@ -129,19 +44,12 @@ namespace Apache.Ignite.Core.Tests.Cache.Store /** */ private const string TemplateStoreCacheName = "template_store*"; - /** */ - private volatile int _storeCount = 3; - /// <summary> - /// + /// Fixture set up. /// </summary> [TestFixtureSetUp] public virtual void BeforeTests() { - TestUtils.KillProcesses(); - - TestUtils.JvmDebug = true; - var cfg = new IgniteConfiguration { GridName = GridName, @@ -155,7 +63,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store } /// <summary> - /// + /// Fixture tear down. /// </summary> [TestFixtureTearDown] public void AfterTests() @@ -164,16 +72,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store } /// <summary> - /// - /// </summary> - [SetUp] - public void BeforeTest() - { - Console.WriteLine("Test started: " + TestContext.CurrentContext.Test.Name); - } - - /// <summary> - /// + /// Test tear down. /// </summary> [TearDown] public void AfterTest() @@ -188,11 +87,12 @@ namespace Apache.Ignite.Core.Tests.Cache.Store "Cache is not empty: " + string.Join(", ", cache.Select(x => string.Format("[{0}:{1}]", x.Key, x.Value)))); - TestUtils.AssertHandleRegistryHasItems(300, _storeCount, Ignition.GetIgnite(GridName)); - - Console.WriteLine("Test finished: " + TestContext.CurrentContext.Test.Name); + TestUtils.AssertHandleRegistryHasItems(300, 3, Ignition.GetIgnite(GridName)); } + /// <summary> + /// Tests that simple cache loading works and exceptions are propagated properly. + /// </summary> [Test] public void TestLoadCache() { @@ -219,6 +119,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store cache.LoadCache(new CacheEntryFilter(), 100, 10)).InnerException); } + /// <summary> + /// Tests cache loading in local mode. + /// </summary> [Test] public void TestLocalLoadCache() { @@ -234,6 +137,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual("val_" + i, cache.Get(i)); } + /// <summary> + /// Tests that object metadata propagates properly during cache loading. + /// </summary> [Test] public void TestLoadCacheMetadata() { @@ -254,6 +160,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual("Value", meta.TypeName); } + /// <summary> + /// Tests asynchronous cache load. + /// </summary> [Test] public void TestLoadCacheAsync() { @@ -278,6 +187,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store .InnerException); } + /// <summary> + /// Tests write-through and read-through behavior. + /// </summary> [Test] public void TestPutLoad() { @@ -285,7 +197,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store cache.Put(1, "val"); - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(1, map.Count); @@ -331,6 +243,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store CheckCustomStoreError(Assert.Throws<CacheStoreException>(() => cache.Get(1)).InnerException); } + /// <summary> + /// Tests write-through and read-through behavior with binarizable values. + /// </summary> [Test] public void TestPutLoadBinarizable() { @@ -338,7 +253,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store cache.Put(1, new Value(1)); - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(1, map.Count); @@ -350,11 +265,14 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual(0, cache.GetSize()); - Assert.AreEqual(1, cache.Get(1).Index()); + Assert.AreEqual(1, cache.Get(1).Index); Assert.AreEqual(1, cache.GetSize()); } + /// <summary> + /// Tests write-through and read-through behavior with storeKeepBinary=false. + /// </summary> [Test] public void TestPutLoadObjects() { @@ -362,23 +280,26 @@ namespace Apache.Ignite.Core.Tests.Cache.Store cache.Put(1, new Value(1)); - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(1, map.Count); Value v = (Value)map[1]; - Assert.AreEqual(1, v.Index()); + Assert.AreEqual(1, v.Index); cache.LocalEvict(new[] { 1 }); Assert.AreEqual(0, cache.GetSize()); - Assert.AreEqual(1, cache.Get(1).Index()); + Assert.AreEqual(1, cache.Get(1).Index); Assert.AreEqual(1, cache.GetSize()); } + /// <summary> + /// Tests cache store LoadAll functionality. + /// </summary> [Test] public void TestPutLoadAll() { @@ -391,7 +312,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store cache.PutAll(putMap); - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(10, map.Count); @@ -417,6 +338,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual(10, cache.GetSize()); } + /// <summary> + /// Tests cache store removal. + /// </summary> [Test] public void TestRemove() { @@ -425,7 +349,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store for (int i = 0; i < 10; i++) cache.Put(i, "val_" + i); - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(10, map.Count); @@ -438,6 +362,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual("val_" + i, map[i]); } + /// <summary> + /// Tests cache store removal. + /// </summary> [Test] public void TestRemoveAll() { @@ -446,7 +373,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store for (int i = 0; i < 10; i++) cache.Put(i, "val_" + i); - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(10, map.Count); @@ -458,6 +385,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual("val_" + i, map[i]); } + /// <summary> + /// Tests cache store with transactions. + /// </summary> [Test] public void TestTx() { @@ -472,13 +402,16 @@ namespace Apache.Ignite.Core.Tests.Cache.Store tx.Commit(); } - IDictionary map = StoreMap(); + IDictionary map = GetStoreMap(); Assert.AreEqual(1, map.Count); Assert.AreEqual("val", map[1]); } + /// <summary> + /// Tests multithreaded cache loading. + /// </summary> [Test] public void TestLoadCacheMultithreaded() { @@ -496,6 +429,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual("val_" + i, cache.Get(i)); } + /// <summary> + /// Tests that cache store property values are propagated from Spring XML. + /// </summary> [Test] public void TestCustomStoreProperties() { @@ -506,6 +442,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual("String value", CacheTestStore.stringProperty); } + /// <summary> + /// Tests cache store with dynamically started cache. + /// </summary> [Test] public void TestDynamicStoreStart() { @@ -524,6 +463,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Assert.AreEqual(handleCount, reg.Count); } + /// <summary> + /// Tests the load all. + /// </summary> [Test] public void TestLoadAll([Values(true, false)] bool isAsync) { @@ -555,6 +497,49 @@ namespace Apache.Ignite.Core.Tests.Cache.Store } /// <summary> + /// Tests the argument passing to LoadCache method. + /// </summary> + [Test] + public void TestArgumentPassing() + { + var cache = GetBinaryStoreCache<object, object>(); + + Action<object> checkValue = o => + { + cache.Clear(); + Assert.AreEqual(0, cache.GetSize()); + cache.LoadCache(null, null, 1, o); + Assert.AreEqual(o, cache[1]); + }; + + // Null. + cache.LoadCache(null, null); + Assert.AreEqual(0, cache.GetSize()); + + // Empty args array. + cache.LoadCache(null); + Assert.AreEqual(0, cache.GetSize()); + + // Simple types. + checkValue(1); + checkValue(new[] {1, 2, 3}); + + checkValue("1"); + checkValue(new[] {"1", "2"}); + + checkValue(Guid.NewGuid()); + checkValue(new[] {Guid.NewGuid(), Guid.NewGuid()}); + + checkValue(DateTime.Now); + checkValue(new[] {DateTime.Now, DateTime.UtcNow}); + + // Collections. + checkValue(new ArrayList {1, "2", 3.3}); + checkValue(new List<int> {1, 2}); + checkValue(new Dictionary<int, string> {{1, "foo"}}); + } + + /// <summary> /// Get's grid name for this test. /// </summary> /// <value>Grid name.</value> @@ -563,31 +548,49 @@ namespace Apache.Ignite.Core.Tests.Cache.Store get { return null; } } - private IDictionary StoreMap() + /// <summary> + /// Gets the store map. + /// </summary> + private static IDictionary GetStoreMap() { return CacheTestStore.Map; } + /// <summary> + /// Gets the cache. + /// </summary> private ICache<int, string> GetCache() { return GetBinaryStoreCache<int, string>(); } + /// <summary> + /// Gets the binary store cache. + /// </summary> private ICache<TK, TV> GetBinaryStoreCache<TK, TV>() { return Ignition.GetIgnite(GridName).GetCache<TK, TV>(BinaryStoreCacheName); } + /// <summary> + /// Gets the object store cache. + /// </summary> private ICache<TK, TV> GetObjectStoreCache<TK, TV>() { return Ignition.GetIgnite(GridName).GetCache<TK, TV>(ObjectStoreCacheName); } + /// <summary> + /// Gets the custom store cache. + /// </summary> private ICache<int, string> GetCustomStoreCache() { return Ignition.GetIgnite(GridName).GetCache<int, string>(CustomStoreCacheName); } + /// <summary> + /// Gets the template store cache. + /// </summary> private ICache<int, string> GetTemplateStoreCache() { var cacheName = TemplateStoreCacheName.Replace("*", Guid.NewGuid().ToString()); @@ -595,6 +598,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store return Ignition.GetIgnite(GridName).GetOrCreateCache<int, string>(cacheName); } + /// <summary> + /// Checks the custom store error. + /// </summary> private static void CheckCustomStoreError(Exception err) { var customErr = err as CacheTestStore.CustomStoreException ?? @@ -607,14 +613,93 @@ namespace Apache.Ignite.Core.Tests.Cache.Store } /// <summary> - /// + /// Cache key. /// </summary> - public class NamedNodeCacheStoreTest : CacheStoreTest + internal class Key { - /** <inheritDoc /> */ - protected override string GridName + /** */ + private readonly int _idx; + + /// <summary> + /// Initializes a new instance of the <see cref="Key"/> class. + /// </summary> + public Key(int idx) + { + _idx = idx; + } + + /** <inheritdoc /> */ + public override bool Equals(object obj) { - get { return "name"; } + if (obj == null || obj.GetType() != GetType()) + return false; + + return ((Key)obj)._idx == _idx; } + + /** <inheritdoc /> */ + public override int GetHashCode() + { + return _idx; + } + } + + /// <summary> + /// Cache value. + /// </summary> + internal class Value + { + /** */ + private readonly int _idx; + + /// <summary> + /// Initializes a new instance of the <see cref="Value"/> class. + /// </summary> + public Value(int idx) + { + _idx = idx; + } + + /// <summary> + /// Gets the index. + /// </summary> + public int Index + { + get { return _idx; } + } + } + + /// <summary> + /// Cache entry predicate. + /// </summary> + [Serializable] + public class CacheEntryFilter : ICacheEntryFilter<int, string> + { + /** <inheritdoc /> */ + public bool Invoke(ICacheEntry<int, string> entry) + { + return entry.Key >= 105; + } + } + + /// <summary> + /// Cache entry predicate that throws an exception. + /// </summary> + [Serializable] + public class ExceptionalEntryFilter : ICacheEntryFilter<int, string> + { + /** <inheritdoc /> */ + public bool Invoke(ICacheEntry<int, string> entry) + { + throw new Exception("Expected exception in ExceptionalEntryFilter"); + } + } + + /// <summary> + /// Filter that can't be serialized. + /// </summary> + public class InvalidCacheEntryFilter : CacheEntryFilter + { + // No-op. } } http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs index 4224835..f80f5ce 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs @@ -66,6 +66,20 @@ namespace Apache.Ignite.Core.Tests.Cache.Store Debug.Assert(_grid != null); + if (args == null || args.Length == 0) + return; + + if (args.Length == 3 && args[0] == null) + { + // Testing arguments passing. + var key = args[1]; + var val = args[2]; + + act(key, val); + + return; + } + if (LoadMultithreaded) { int cnt = 0; http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/NamedNodeCacheStoreTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/NamedNodeCacheStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/NamedNodeCacheStoreTest.cs new file mode 100644 index 0000000..02e257f --- /dev/null +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/NamedNodeCacheStoreTest.cs @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Apache.Ignite.Core.Tests.Cache.Store +{ + using NUnit.Framework; + + /// <summary> + /// Cache store test with named node. + /// </summary> + [TestFixture] + public class NamedNodeCacheStoreTest : CacheStoreTest + { + /** <inheritDoc /> */ + protected override string GridName + { + get { return "name"; } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/03f68223/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs index 186737c..b8dc6cb 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs @@ -225,7 +225,7 @@ namespace Apache.Ignite.Core.Impl.Cache /// <summary> /// Writes the load cache data to the writer. /// </summary> - private void WriteLoadCacheData(IBinaryRawWriter writer, ICacheEntryFilter<TK, TV> p, object[] args) + private void WriteLoadCacheData(BinaryWriter writer, ICacheEntryFilter<TK, TV> p, object[] args) { if (p != null) { @@ -237,7 +237,17 @@ namespace Apache.Ignite.Core.Impl.Cache else writer.WriteObject<CacheEntryFilterHolder>(null); - writer.WriteArray(args); + if (args != null && args.Length > 0) + { + writer.WriteInt(args.Length); + + foreach (var o in args) + writer.WriteObject(o); + } + else + { + writer.WriteInt(0); + } } /** <inheritDoc /> */
