private static void PerformClientReconnect(IIgnite client) { var disconnectedEvt = new ManualResetEventSlim(false); client.ClientDisconnected += (sender, args) => { disconnectedEvt.Set(); }; var reconnectedEvt = new ManualResetEventSlim(false); ClientReconnectEventArgs reconnectEventArgs = null; client.ClientReconnected += (sender, args) => { reconnectEventArgs = args; reconnectedEvt.Set(); }; var gridName = string.Format("%{0}%", client.Name); TestUtilsJni.SuspendThreads(gridName); Thread.Sleep(9000); TestUtilsJni.ResumeThreads(gridName); Assert.Catch(() => client.CreateCache <int, int>("_fail").Put(1, 1)); var disconnected = disconnectedEvt.Wait(TimeSpan.FromSeconds(3)); Assert.IsTrue(disconnected); Assert.Catch(() => client.CreateCache <int, int>("_fail").Put(1, 1)); var reconnected = reconnectedEvt.Wait(TimeSpan.FromSeconds(15)); Assert.IsTrue(reconnected); Assert.IsFalse(reconnectEventArgs.HasClusterRestarted); }
public void TestClusterRestart() { var serverCfg = new IgniteConfiguration(TestUtils.GetTestConfiguration()) { CacheConfiguration = new[] { new CacheConfiguration(CacheName) } }; var clientCfg = new IgniteConfiguration(TestUtils.GetTestConfiguration()) { GridName = "client", ClientMode = true }; var server = Ignition.Start(serverCfg); var client = Ignition.Start(clientCfg); ClientReconnectEventArgs eventArgs = null; client.ClientReconnected += (sender, args) => { eventArgs = args; }; var cache = client.GetCache <int, int>(CacheName); cache[1] = 1; Ignition.Stop(server.Name, true); var cacheEx = Assert.Throws <CacheException>(() => cache.Get(1)); var ex = cacheEx.InnerException as ClientDisconnectedException; Assert.IsNotNull(ex); // Start the server and wait for reconnect. Ignition.Start(serverCfg); Assert.IsTrue(ex.ClientReconnectTask.Result); // Check the event args. Thread.Sleep(100); // Wait for event handler Assert.IsNotNull(eventArgs); Assert.IsTrue(eventArgs.HasClusterRestarted); // Refresh the cache instance and check that it works. var cache1 = client.GetCache <int, int>(CacheName); Assert.AreEqual(0, cache1.GetSize()); cache1[1] = 2; Assert.AreEqual(2, cache1[1]); // Check that old cache instance does not work. var cacheEx1 = Assert.Throws <InvalidOperationException>(() => cache.Get(1)); Assert.AreEqual("Cache has been closed or destroyed: " + CacheName, cacheEx1.Message); }
public void TestClusterRestart() { var serverCfg = new IgniteConfiguration(TestUtils.GetTestConfiguration()) { CacheConfiguration = new[] { new CacheConfiguration(CacheName) } }; var clientCfg = new IgniteConfiguration(TestUtils.GetTestConfiguration()) { IgniteInstanceName = "client", ClientMode = true }; var server = Ignition.Start(serverCfg); Assert.AreEqual(1, server.GetCluster().GetNodes().Count); var client = Ignition.Start(clientCfg); Assert.AreEqual(2, client.GetCluster().GetNodes().Count); ClientReconnectEventArgs eventArgs = null; client.ClientReconnected += (sender, args) => { eventArgs = args; }; var cache = client.GetCache <int, Person>(CacheName); cache[1] = new Person(1); Ignition.Stop(server.Name, true); var cacheEx = Assert.Throws <CacheException>(() => cache.Get(1)); var ex = cacheEx.InnerException as ClientDisconnectedException; Assert.IsNotNull(ex); // Wait a bit for cluster restart detection. Thread.Sleep(1000); // Start the server and wait for reconnect. Ignition.Start(serverCfg); // Check reconnect task. Assert.IsTrue(ex.ClientReconnectTask.Result); // Wait a bit for notifications. Thread.Sleep(100); // Check the event args. Assert.IsNotNull(eventArgs); Assert.IsTrue(eventArgs.HasClusterRestarted); // Refresh the cache instance and check that it works. var cache1 = client.GetCache <int, Person>(CacheName); Assert.AreEqual(0, cache1.GetSize()); cache1[1] = new Person(2); Assert.AreEqual(2, cache1[1].Id); // Check that old cache instance still works. Assert.AreEqual(2, cache.Get(1).Id); }