public void TestFailWhileInTransaction() { const int UID1 = 10; const int UID2 = -10; const int WRITE = 5; const int MAX = 100; bool result = PadiDstm.Init(); bool beginSuccess = PadiDstm.TxBegin(); PadInt padInt1 = PadiDstm.CreatePadInt(UID1); padInt1.Write(WRITE); PadInt padInt2 = PadiDstm.CreatePadInt(UID2); padInt2.Write(WRITE); //Servers de 1 a 2 //Fail do server 1 server[kill].Kill(); Thread.Sleep(3000); PadiDstm.TxCommit(); //Depois de falhar PadiDstm.Status(); //PadiDstm.Fail(failedServerURL); bool f = PadiDstm.Freeze(failedServerURL); Assert.IsFalse(f); bool r = PadiDstm.Recover(failedServerURL); Assert.IsFalse(r); //Server falhou antes de fazer commit de t1, //logo deve Thread.Sleep(1000); //Server nao consegui fazer commit //fez abort dos creates //access deve retornar null beginSuccess = PadiDstm.TxBegin(); padInt1 = PadiDstm.AccessPadInt(UID1); Assert.IsNull(padInt1); padInt2 = PadiDstm.AccessPadInt(UID2); Assert.IsNull(padInt2); PadiDstm.TxCommit(); }
public void TestRecover() { Console.WriteLine("------ Test: Recover ------"); Logger.Log(new String[] { "Client", "------ Test: Recover ------" }); Console.WriteLine("library created"); try { Console.WriteLine("init() Done"); PadiDstm.TxBegin(); Console.WriteLine("txBegin Done"); // The following 2 lines assume we have 2 servers: one at port 2001 and another at port 2002 bool res = PadiDstm.Recover("tcp://localhost:2001/PadIntServer"); Console.WriteLine("####################################################################"); Console.WriteLine("Fiz o recover res= " + res + " Depois vem o commit"); Console.WriteLine("####################################################################"); Console.ReadLine(); PadiDstm.TxCommit(); Console.WriteLine("txCommit Done"); Console.WriteLine("closeChannel Done"); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("------------"); Logger.Log(new String[] { "---------Read Freeze end----------" }); }
static void Main(string[] args) { bool res; PadiDstm.Init(); res = PadiDstm.TxBegin(); PadInt pi_a = PadiDstm.CreatePadInt(0); PadInt pi_b = PadiDstm.CreatePadInt(1); res = PadiDstm.TxCommit(); res = PadiDstm.TxBegin(); pi_a = PadiDstm.AccessPadInt(0); pi_b = PadiDstm.AccessPadInt(1); PadInt pi_c = PadiDstm.AccessPadInt(0); PadInt pi_d = PadiDstm.AccessPadInt(1); pi_a.Write(36); pi_b.Write(37); Console.WriteLine("a = " + pi_a.Read()); Console.WriteLine("b = " + pi_b.Read()); PadiDstm.Status(); // The following 3 lines assume we have 2 servers: one at port 2001 and another at port 2002 res = PadiDstm.Freeze("tcp://localhost:2001/Server"); res = PadiDstm.Recover("tcp://localhost:2001/Server"); //res = PadiDstm.Fail("tcp://localhost:2003/Server"); // mudei para 2003 porque no 2002 ta o backup do 2001 res = PadiDstm.TxCommit(); }
/* * public bool TestCreateTwoPadIntsOneServerFrozen(){ * // Test7: Recovers both servers, freezes one and tries to create two padInts * // Expected result: both padInts assigned to the same server * launchMaster(); * launchTwoServers(); * try { * bool res = PadiDstm.TxBegin(); * //res = PadiDstm.Recover("tcp://localhost:2001/Server"); // continuacao do metodo anterior * //res = PadiDstm.Recover("tcp://localhost:2002/Server"); // continuacao do metodo anterior * res = PadiDstm.Freeze("tcp://localhost:2001/Server"); * PadInt pi_j = PadiDstm.CreatePadInt(7); * PadInt pi_k = PadiDstm.CreatePadInt(8); * res = PadiDstm.TxCommit(); * master.Kill(); * server1.Kill(); * server2.Kill(); * return res; * } catch (TxException e) { * Console.WriteLine("TestCreateTwoPadIntsOneServerFrozen error: " + e); * master.Kill(); * server1.Kill(); * server2.Kill(); * return false; * } * } */ /* DataServers status tests */ /* * public bool TestAccessPadIntOnFrozenSever(){ * // Test8: Tries to access a padInt on the frozen server * // Fails the 2002 server first to grant assignment to 2001 server * // Expected result: delay, exception or error message? * launchMaster(); * launchTwoServers(); * try { * bool res = PadiDstm.TxBegin(); * // res = PadiDstm.Recover("tcp://localhost:2001/Server"); // continuacao do metodo anterior * res = PadiDstm.Fail("tcp://localhost:2002/Server"); * PadInt pi_l = PadiDstm.CreatePadInt(9); // assigned to 2001 * res = PadiDstm.Recover("tcp://localhost:2002/Server"); * res = PadiDstm.Freeze("tcp://localhost:2001/Server"); * PadInt pi_m = PadiDstm.AccessPadInt(9); // fica à espera do Recover * res = PadiDstm.TxCommit(); * master.Kill(); * server1.Kill(); * server2.Kill(); * return res; * } catch (TxException e) { * Console.WriteLine("TestAccessPadIntOnFrozenSever error: " + e); * master.Kill(); * server1.Kill(); * server2.Kill(); * return false; * } * } */ public bool TestAccessPadIntOnFailedServer() { // Test9: Tries to access, read and write a padInt on the failed server // Fails the 2001 server first to grant assignment to 2002 server // Expected result: exception or error message? launchMaster(); launchTwoServers(); try { bool res = PadiDstm.TxBegin(); // res = PadiDstm.Recover("tcp://localhost:2001/Server"); // continuacao do metodo anterior res = PadiDstm.Fail("tcp://localhost:2001/Server"); PadInt pi_n = PadiDstm.CreatePadInt(10); // assigned to 2002 res = PadiDstm.Recover("tcp://localhost:2001/Server"); res = PadiDstm.Fail("tcp://localhost:2002/Server"); pi_n = PadiDstm.AccessPadInt(10); Console.WriteLine(pi_n.Read()); pi_n.Write(5); Console.WriteLine(pi_n.Read()); res = PadiDstm.TxCommit(); //Assert.Fail("No exception thrown!"); // não deve chegar aqui! master.Kill(); server1.Kill(); server2.Kill(); return(res); } catch (TxException e) { Console.WriteLine("TestAccessPadIntOnFailedServer error: " + e); master.Kill(); server1.Kill(); server2.Kill(); return(false); } }
private void recoverButton_Click(object sender, EventArgs e) { PadiDstm.Recover(recoverTextBox.Text.ToString()); }