예제 #1
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();
    }
예제 #2
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();
        }
예제 #3
0
 private void freezeButton_Click(object sender, EventArgs e)
 {
     PadiDstm.Freeze(freezeTextBox.Text.ToString());
 }
예제 #4
0
        public void TestFreezeCreate(int uid0)
        {
            Console.WriteLine("------ Test: Freeze Create ------");
            Logger.Log(new String[] { "Client", "------ Test: Freeze Create ------" });

            Console.WriteLine("library created");

            try {
                Console.WriteLine("init() Done");

                PadiDstm.TxBegin();
                Console.WriteLine("txBegin Done");

                PadInt padInt0 = PadiDstm.CreatePadInt(uid0);
                Console.WriteLine("padInt0 created with uid: " + uid0);


                Console.WriteLine("####################################################################");
                Console.WriteLine("Vou fazer o primeiro ciclo de 5 writes. Depois vem o freeze");
                Console.WriteLine("####################################################################");
                Console.ReadLine();
                int i = 0;
                for (; i <= 5; i++)
                {
                    Console.WriteLine("Fiz um Write no uid 1. uid() = " + padInt0.Write(i).ToString());
                }

                Console.WriteLine("####################################################################");
                Console.WriteLine("Vou fazer o freeze Nota: Podem ser imprimidas writas que estao a ser feitas em cache! so vai parar quando fizer pedido ao server");
                Console.WriteLine("####################################################################");
                Console.ReadLine();
                // The following 2 lines assume we have 2 servers: one at port 2001 and another at port 2002
                bool res = PadiDstm.Freeze("tcp://localhost:2001/PadIntServer");
                //res = Library.Fail("tcp://localhost:2002/PadIntServer");
                Console.WriteLine("####################################################################");
                Console.WriteLine("Fiz o freeze res= " + res + "Vou fazer o segundo ciclo de 5 writes. Depois vem o commit");
                Console.WriteLine("####################################################################");
                Console.ReadLine();
                for (; i <= 10; i++)
                {
                    Console.WriteLine("Fiz um Write no uid 1. uid() = " + padInt0.Write(i).ToString());
                }

                PadiDstm.TxCommit();
                Console.WriteLine("txCommit Done");

                PadiDstm.TxBegin();
                Console.WriteLine("txBegin Done");
                /* the padInt's value must be equal to initialization value */
                PadInt padInt0A = PadiDstm.AccessPadInt(uid0);
                Console.WriteLine("####################################################################");
                Console.WriteLine("Fiz os 10 writes. padInt0A.Read()= " + padInt0A.Read() + " Press enter para 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----------" });
        }