IGNITE-6050 Fix eternal wait in DataStreamerTest.TestBufferSize This closes #2448
(cherry picked from commit 2cf1260) Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/251a333d Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/251a333d Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/251a333d Branch: refs/heads/ignite-2.1.5-p1 Commit: 251a333dfbf09d3f6b69bbb2b7658eb3d88fcf0a Parents: a318c4a Author: Pavel Tupitsyn <[email protected]> Authored: Tue Aug 29 14:16:00 2017 +0300 Committer: Dmitriy Govorukhin <[email protected]> Committed: Mon Sep 25 13:33:13 2017 +0300 ---------------------------------------------------------------------- .../Dataload/DataStreamerTest.cs | 71 +++++++++++++------- 1 file changed, 48 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/251a333d/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Dataload/DataStreamerTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Dataload/DataStreamerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Dataload/DataStreamerTest.cs index de95003..fe5955f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Dataload/DataStreamerTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Dataload/DataStreamerTest.cs @@ -38,6 +38,9 @@ namespace Apache.Ignite.Core.Tests.Dataload /** Node. */ private IIgnite _grid; + /** Node 2. */ + private IIgnite _grid2; + /** Cache. */ private ICache<int, int?> _cache; @@ -49,7 +52,7 @@ namespace Apache.Ignite.Core.Tests.Dataload { _grid = Ignition.Start(TestUtils.GetTestConfiguration()); - Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration()) + _grid2 = Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration()) { IgniteInstanceName = "grid1" }); @@ -228,42 +231,64 @@ namespace Apache.Ignite.Core.Tests.Dataload [Test] public void TestBufferSize() { - using (IDataStreamer<int, int> ldr = _grid.GetDataStreamer<int, int>(CacheName)) + using (var ldr = _grid.GetDataStreamer<int, int>(CacheName)) { - var fut = ldr.AddData(1, 1); + const int timeout = 5000; + + var part1 = GetPrimaryPartitionKeys(_grid, 4); + var part2 = GetPrimaryPartitionKeys(_grid2, 4); + + var task = ldr.AddData(part1[0], part1[0]); Thread.Sleep(100); - Assert.IsFalse(fut.IsCompleted); + Assert.IsFalse(task.IsCompleted); ldr.PerNodeBufferSize = 2; - ldr.AddData(2, 2); - ldr.AddData(3, 3); - ldr.AddData(4, 4).Wait(); - fut.Wait(); + ldr.AddData(part2[0], part2[0]); + ldr.AddData(part1[1], part1[1]); + Assert.IsTrue(ldr.AddData(part2[1], part2[1]).Wait(timeout)); + Assert.IsTrue(task.Wait(timeout)); - Assert.AreEqual(1, _cache.Get(1)); - Assert.AreEqual(2, _cache.Get(2)); - Assert.AreEqual(3, _cache.Get(3)); - Assert.AreEqual(4, _cache.Get(4)); + Assert.AreEqual(part1[0], _cache.Get(part1[0])); + Assert.AreEqual(part1[1], _cache.Get(part1[1])); + Assert.AreEqual(part2[0], _cache.Get(part2[0])); + Assert.AreEqual(part2[1], _cache.Get(part2[1])); - ldr.AddData(new List<KeyValuePair<int, int>> + Assert.IsTrue(ldr.AddData(new[] { - new KeyValuePair<int, int>(5, 5), - new KeyValuePair<int, int>(6, 6), - new KeyValuePair<int, int>(7, 7), - new KeyValuePair<int, int>(8, 8) - }).Wait(); - - Assert.AreEqual(5, _cache.Get(5)); - Assert.AreEqual(6, _cache.Get(6)); - Assert.AreEqual(7, _cache.Get(7)); - Assert.AreEqual(8, _cache.Get(8)); + new KeyValuePair<int, int>(part1[2], part1[2]), + new KeyValuePair<int, int>(part1[3], part1[3]), + new KeyValuePair<int, int>(part2[2], part2[2]), + new KeyValuePair<int, int>(part2[3], part2[3]) + }).Wait(timeout)); + + Assert.AreEqual(part1[2], _cache.Get(part1[2])); + Assert.AreEqual(part1[3], _cache.Get(part1[3])); + Assert.AreEqual(part2[2], _cache.Get(part2[2])); + Assert.AreEqual(part2[3], _cache.Get(part2[3])); } } /// <summary> + /// Gets the primary partition keys. + /// </summary> + private static int[] GetPrimaryPartitionKeys(IIgnite ignite, int count) + { + var affinity = ignite.GetAffinity(CacheName); + + var localNode = ignite.GetCluster().GetLocalNode(); + + var part = affinity.GetPrimaryPartitions(localNode).First(); + + return Enumerable.Range(0, int.MaxValue) + .Where(k => affinity.GetPartition(k) == part) + .Take(count) + .ToArray(); + } + + /// <summary> /// Test close. /// </summary> [Test]
