Ejemplo n.º 1
0
        private void DoTest(TestConfig cfg, TestActions actions, int timeoutMillis)
        {
            ManualResetEvent ev = new ManualResetEvent(false);

            cfg.Ports = new ushort[6];

            for (int i = 0; i < 6; i++)
            {
                cfg.Ports[i] = StateMachineManager.GetFreePort();
            }

            cfg.RslData = ".\\rsldata";
            cfg.LogPath = ".\\logpath";

            if (Directory.Exists(cfg.RslData))
            {
                Directory.Delete(cfg.RslData, true);
            }

            if (Directory.Exists(cfg.LogPath))
            {
                Directory.Delete(cfg.LogPath, true);
            }

            TestTracer tr = new TestTracer();

            AppDomainStarter ad0             = null;
            AppDomainStarter ad1             = null;
            AppDomainStarter ad2             = null;
            Exception        resultException = null;

            if (cfg.Subject1 != null)
            {
                cfg.Subject1 = cfg.Subject1.Split('=').Last();
            }

            if (cfg.Subject2 != null)
            {
                cfg.Subject2 = cfg.Subject2.Split('=').Last();
            }

            ManagedRSLStateMachine.Init(cfg.LogPath, cfg.Th1, cfg.Th2, cfg.Subject1, cfg.ThumbprintsParent1, cfg.Subject2, cfg.Subjectparent2, false, true, false, false);

            ThreadPool.QueueUserWorkItem(_ =>
            {
                if (!ev.WaitOne(timeoutMillis))
                {
                    resultException = new TimeoutException("not finished on time");
                    ad0.Stop();
                    ad1.Stop();
                    ad2.Stop();
                }
            });

            try
            {
                ad0        = new AppDomainStarter("sm0", 0, cfg);
                ad0.Tracer = tr;
                ad0.Start(true);

                ad1        = new AppDomainStarter("sm1", 1, cfg);
                ad1.Tracer = tr;
                ad1.Start(false);

                ad2        = new AppDomainStarter("sm2", 2, cfg);
                ad2.Tracer = tr;
                ad2.Start(false);

                ad0.SM.WaitForPrimary(30000);

                Console.WriteLine("we got the primary!!");
                ad0.SM.ReplicateCommand(new CommandA(11));
                ad0.SM.ReplicateCommand(new CommandB("eleven"), true);

                if (actions.HasFlag(TestActions.FailoverPrimary))
                {
                    Console.WriteLine("stopping first instance...");
                    ad1.SM.CanBP = true;
                    ad0.Stop();
                    ad1.SM.WaitForPrimary(30000);
                }

                Thread.Sleep(5000);
                if (actions.HasFlag(TestActions.ThumbprintRollover))
                {
                    Console.WriteLine("rolling over thumbprints");
                    ManagedRSLStateMachine.ReplaceThumbprints(cfg.Th3, cfg.Th4, false, false);
                }

                if (actions.HasFlag(TestActions.RecoverFirstInstance) || actions.HasFlag(TestActions.ReturnToFirstPrimary))
                {
                    Console.WriteLine("restarting first instance");
                    ad0.Start(false);
                }

                if (actions.HasFlag(TestActions.ReturnToFirstPrimary))
                {
                    Console.WriteLine("failing second instance into first instance");
                    ad0.SM.CanBP = true;
                    ad1.Stop();
                    ad0.SM.WaitForPrimary(30000);
                }

                ev.Set();
            }
            catch (Exception e)
            {
                if (resultException == null)
                {
                    resultException = e;
                }
            }
            finally
            {
                Console.WriteLine("Unloading all");

                if (ad0 != null)
                {
                    ad0.Stop();
                }

                if (ad1 != null)
                {
                    ad1.Stop();
                }

                if (ad2 != null)
                {
                    ad2.Stop();
                }

                ManagedRSLStateMachine.Unload();
            }

            if (resultException != null)
            {
                if (resultException.InnerException != null)
                {
                    resultException = resultException.InnerException;
                }

                throw resultException;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Starts the configured number of replicas, this function will create
        /// the necessery files that are needed for the aplicaton to run
        /// </summary>
        /// <param name="numberOfReplicas">numberOfReplicas</param>
        /// <returns></returns>
        public int StartUp(int numberOfReplicas)
        {
            cfg = new ManagedRSLConfigParam();
            cfg.NewLeaderGracePeriodSec    = 10;
            cfg.HeartBeatIntervalSec       = 2;
            cfg.ElectionDelaySec           = 5;
            cfg.MaxElectionRandomizeSec    = 1;
            cfg.InitializeRetryIntervalSec = 1;
            cfg.PrepareRetryIntervalSec    = 1;
            cfg.VoteRetryIntervalSec       = 1;
            cfg.CPQueryRetryIntervalSec    = 5;
            cfg.MaxCheckpointIntervalSec   = 0;
            cfg.MaxLogLenMB              = 100;
            cfg.SendTimeoutSec           = 10;
            cfg.ReceiveTimeoutSec        = 10;
            cfg.MaxCacheLengthMB         = 50;
            cfg.MaxVotesInLog            = 1000;
            cfg.MaxOutstandingPerReplica = 10;
            cfg.MaxCheckpoints           = 2;
            cfg.MaxLogs                      = 5;
            cfg.LogLenRandomize              = 20;
            cfg.ElectionRandomize            = 10;
            cfg.FastReadSeqThreshold         = 5;
            cfg.InMemoryExecutionQueueSizeMB = 10;
            cfg.NumReaderThreads             = 5;
            cfg.MaxMessageSizeMB             = 1;
            cfg.WorkingDir                   = RSLWorkingDir;

            ManagedRSLNode[] nodes = new ManagedRSLNode[numberOfReplicas];
            for (int i = 0; i < nodes.Length; i++)
            {
                nodes[i]          = new ManagedRSLNode();
                nodes[i].MemberId = (i + 1).ToString();
                nodes[i].RslPort  = (ushort)(5000 + (100 * (i + 1)));
                nodes[i].HostName = "127.0.0.1";
                nodes[i].Ip       = new IPAddress(0x0100007F); // 127.0.0.1
            }

            int startedReplicas = 0;

            if (_replicaSet == null)
            {
                _replicaSet = new List <BasicRSLTestMachine>();

                ManagedRSLStateMachine.NotificationsCallback = OnNotification;

                ManagedRSLStateMachine.Init(".\\" + RSLDebugLogsDir);
                for (int i = 0; i < nodes.Length; i++)
                {
                    BasicRSLTestMachine replica = new BasicRSLTestMachine(nodes[i]);
                    try
                    {
                        bool res = replica.Initialize(
                            cfg,
                            nodes[i],
                            ManagedRSLProtocolVersion.ManagedRSLProtocolVersion_4,
                            false);
                        Debug.Assert(res);
                        startedReplicas++;
                        _replicaSet.Add(replica);
                        _allReplicaSet.Add(replica);
                    }
                    catch (Exception e)
                    {
                        if (e is NullReferenceException || e is System.Runtime.InteropServices.SEHException)
                        {
                            throw;
                        }
                    } //catch
                }     // for

                Console.WriteLine("Bootstrapping");
                byte[] buf = new byte[] { 1 };
                ManagedRSLMemberSet memberSet = new ManagedRSLMemberSet(nodes, buf, 0, 1);

                foreach (BasicRSLTestMachine replica in _allReplicaSet)
                {
                    RSLResponse resp = replica.Bootstrap(memberSet, 10);
                    Console.WriteLine(resp);
                }
            }
            else
            {
                startedReplicas = _replicaSet.Count;
            }

            return(startedReplicas);
        } //StartUp
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                PrintUsage(null);
                Exit(1);
            }
            int id = Int32.Parse(args[0]);

            ManagedRSLStateMachine.Init(@".\debuglogs\" + id);

            ManagedRSLConfigParam cfgParam = new ManagedRSLConfigParam();

            // Initialize the default config param
            cfgParam.NewLeaderGracePeriodSec    = 15;
            cfgParam.HeartBeatIntervalSec       = 2;
            cfgParam.ElectionDelaySec           = 10;
            cfgParam.MaxElectionRandomizeSec    = 1;
            cfgParam.InitializeRetryIntervalSec = 1;
            cfgParam.PrepareRetryIntervalSec    = 1;
            cfgParam.VoteRetryIntervalSec       = 3;
            cfgParam.CPQueryRetryIntervalSec    = 5;
            cfgParam.MaxCheckpointIntervalSec   = 0;
            cfgParam.JoinMessagesIntervalSec    = 1;
            cfgParam.MaxLogLenMB              = 1;
            cfgParam.SendTimeoutSec           = 5;
            cfgParam.ReceiveTimeoutSec        = 5;
            cfgParam.MaxCacheLengthMB         = 50;
            cfgParam.MaxVotesInLog            = 10000;
            cfgParam.MaxOutstandingPerReplica = 10;
            cfgParam.MaxCheckpoints           = 4;
            cfgParam.MaxLogs                      = 10;
            cfgParam.LogLenRandomize              = 20;
            cfgParam.ElectionRandomize            = 10;
            cfgParam.FastReadSeqThreshold         = 5;
            cfgParam.InMemoryExecutionQueueSizeMB = 10;
            cfgParam.NumReaderThreads             = 3;
            cfgParam.WorkingDir                   = @".\data";

            int configNumber = 0;
            int numReplicas  = 0;

            int[] memberIds = null;
            bool  res       = ReadConfigurationFromFile(ref configNumber, ref numReplicas, ref memberIds);

            Debug.Assert(res);

            // Populate member set
            if (id <= 0)
            {
                PrintUsage("invalid member id!");
                Exit(1);
            }

            int bufSize = 100 * 1024;

            g_buf = new byte[bufSize];
            for (int i = 0; i < bufSize; i++)
            {
                g_buf[i] = (byte)('a' + (i % 26));
            }

            ManagedRSLNode[] nodes = new ManagedRSLNode[numReplicas];
            for (int i = 0; i < numReplicas; i++)
            {
                nodes[i] = new ManagedRSLNode();
                PopulateNode(nodes[i], (uint)memberIds[i]);
            }
            ManagedRSLNode selfNode = new ManagedRSLNode();

            PopulateNode(selfNode, (uint)id);

            // Start replica
            Console.WriteLine("Starting member #" + selfNode.MemberId);
            TestRSLStateMachineProcessor sm = new TestRSLStateMachineProcessor();

            sm.Run(nodes, cfgParam, selfNode);
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            uint      lastRequested = 0;
            Hashtable arguments     = ParseArguments(args);

            imPrimary = false;

            int id          = (int)arguments["id"];
            int targetState = (int)arguments["cases"];
            int numReplicas = (int)arguments["numreplicas"];

            //Create the output stream
            try
            {
                //_writer = new System.IO.StreamWriter((String)arguments["out"], true);
                _writer = Console.Out;
            }
            catch
            {
                System.Environment.Exit(-1);
            }

            //Start up the common infraestructure
            ManagedRSLConfigParam cfg = new ManagedRSLConfigParam();

            cfg.NewLeaderGracePeriodSec    = 10;
            cfg.HeartBeatIntervalSec       = 2;
            cfg.ElectionDelaySec           = 5;
            cfg.MaxElectionRandomizeSec    = 1;
            cfg.InitializeRetryIntervalSec = 1;
            cfg.PrepareRetryIntervalSec    = 1;
            cfg.VoteRetryIntervalSec       = 1;
            cfg.CPQueryRetryIntervalSec    = 5;
            cfg.MaxCheckpointIntervalSec   = 0;
            cfg.JoinMessagesIntervalSec    = 1;
            cfg.MaxLogLenMB              = 10;
            cfg.SendTimeoutSec           = 10;
            cfg.ReceiveTimeoutSec        = 10;
            cfg.MaxCacheLengthMB         = 50;
            cfg.MaxVotesInLog            = 1000;
            cfg.MaxOutstandingPerReplica = 10;
            cfg.MaxCheckpoints           = 2;
            cfg.MaxLogs                      = 5;
            cfg.LogLenRandomize              = 20;
            cfg.ElectionRandomize            = 10;
            cfg.FastReadSeqThreshold         = 5;
            cfg.InMemoryExecutionQueueSizeMB = 10;
            cfg.NumReaderThreads             = 5;
            cfg.MaxMessageSizeMB             = 1;
            cfg.WorkingDir                   = ".\\rslib" + id;

            ManagedRSLNode[] nodes = new ManagedRSLNode[numReplicas];
            for (int i = 0; i < nodes.Length; i++)
            {
                nodes[i]          = new ManagedRSLNode();
                nodes[i].MemberId = (i + 1).ToString();
                nodes[i].RslPort  = (ushort)(20000 + (1000 * (i + 1)));
                nodes[i].HostName = "127.0.0.1";
                nodes[i].Ip       = new IPAddress(0x0100007F); // 127.0.0.1
            }
            ManagedRSLNode selfNode = new ManagedRSLNode();

            selfNode.MemberId = id.ToString();
            selfNode.RslPort  = (ushort)(20000 + (1000 * id));
            selfNode.HostName = "127.0.0.1";
            selfNode.Ip       = new IPAddress(0x0100007F); // 127.0.0.1

            ManagedRSLStateMachine.Init(".\\debuglogs" + id);

            //Create and initialize the state machine
            _stateMachine = new StateMachine((int)arguments["reqsize"]);

            if (_stateMachine.Initialize(cfg, nodes, selfNode, ManagedRSLProtocolVersion.ManagedRSLProtocolVersion_4, false) == false)
            {
                System.Environment.Exit(-1);
            }

            //Wait 3 seconds for the pending request to be executed
            System.Threading.Thread.Sleep(3000);

            _writer.WriteLine("{1} Initial state: {0}", _stateMachine.State, DateTime.Now);
            lastRequested = _stateMachine.State;

            //Execute the test scenario
            while (_stateMachine.State < targetState)
            {
                if (imPrimary)
                {
                    if (_stateMachine.State == lastRequested)
                    {
                        if (_stateMachine.WriteToState((UInt32)_stateMachine.State + 1) == true)
                        {
                            lastRequested = _stateMachine.State + 1;
                            lock (_writer)
                            {
                                _writer.WriteLine("{1} Request: {0}", lastRequested, DateTime.Now);
                            }
                        }
                    }
                }
                else
                {
                    lastRequested = _stateMachine.State;
                }
                _stateMachine.ReadFromState();
                _writer.Flush();
                System.Threading.Thread.Sleep(1);
            }
            _stateMachine.DumpState();
            _writer.Flush();
            try
            {
                _writerFlag = new System.IO.StreamWriter(String.Format("{0}.done", arguments["out"]), true);
                _writerFlag.WriteLine("DONE");
                _writerFlag.Close();
            }
            catch
            {
                System.Environment.Exit(-1);
            }

            _writer.Close();
            System.Threading.Thread.Sleep(int.MaxValue);
        }