예제 #1
0
        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();
        }
예제 #2
0
        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----------" });
        }
예제 #3
0
    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();
    }
예제 #4
0
    /*
     * 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);
        }
    }
예제 #5
0
 private void recoverButton_Click(object sender, EventArgs e)
 {
     PadiDstm.Recover(recoverTextBox.Text.ToString());
 }