Exemplo n.º 1
0
 static void PopulateNode(ManagedRSLNode node, ulong memberId)
 {
     node.HostName = "127.0.0.1";
     //node.Ip = (uint) IPAddress.Parse(node.HostName).Address;
     node.Ip       = new IPAddress(0x0100007F);
     node.MemberId = memberId.ToString();
     node.RslPort  = (ushort)(g_port + memberId * 1000);
 }
Exemplo n.º 2
0
        void ChangeConfigurationIfNeeded()
        {
            ManagedRSLMemberSet currentMemberSet = new ManagedRSLMemberSet();
            uint configurationNumber             = 0;

            GetConfiguration(currentMemberSet, ref configurationNumber);
            uint currentConfigurationNumber = 0;

            byte[] cookie = currentMemberSet.ConfigurationCookie;

            if (cookie != null)
            {
                currentConfigurationNumber = (uint)BitConverter.ToInt32(cookie, 0);
            }

            int desiredConfigurationNumber       = 0;
            int numMembersInDesiredConfiguration = 0;

            int[] memberIdsOfDesiredConfiguration = null;
            if (!ReadConfigurationFromFile(ref desiredConfigurationNumber,
                                           ref numMembersInDesiredConfiguration,
                                           ref memberIdsOfDesiredConfiguration))
            {
                return;
            }

            if (currentConfigurationNumber >= desiredConfigurationNumber)
            {
                if (currentConfigurationNumber > g_maxConfigurationReported)
                {
                    if (ReportCurrentConfiguration(currentConfigurationNumber))
                    {
                        g_maxConfigurationReported = currentConfigurationNumber;
                    }
                }
                return;
            }

            Console.WriteLine("New configuration found:");
            ManagedRSLNode[] membersOfNewConfiguration =
                new ManagedRSLNode[numMembersInDesiredConfiguration];
            for (int whichMember = 0; whichMember < numMembersInDesiredConfiguration; ++whichMember)
            {
                ManagedRSLNode node = new ManagedRSLNode();
                membersOfNewConfiguration[whichMember] = node;
                PopulateNode(node, (ulong)memberIdsOfDesiredConfiguration[whichMember]);
                Console.Write("{0} ", node.MemberId);
            }
            Console.WriteLine();
            byte[] configNumberBytes      = BitConverter.GetBytes(desiredConfigurationNumber);
            ManagedRSLMemberSet memberSet = new ManagedRSLMemberSet(
                membersOfNewConfiguration,
                configNumberBytes,
                0,
                configNumberBytes.Length);

            ChangeConfiguration(memberSet, this);
        }
Exemplo n.º 3
0
        public override bool AcceptMessageFromReplica(ManagedRSLNode node, byte[] data)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            this.Log(TestTracer.EventType.AcceptMessageFromReplicaCalled, " AcceptMessageFromReplica was called: node = {0}", node.MemberId);
            return(true);
        }
Exemplo n.º 4
0
        public override bool AcceptMessageFromReplica(ManagedRSLNode node, byte [] primaryCookie)
        {
            Console.WriteLine(this.Self.MemberId + ".AcceptMessageFromReplica(" + node.MemberId + ")");

            if (String.Equals(node.MemberId, MemberIdToEvict))
            {
                Console.WriteLine(this.Self.MemberId + ".AcceptMessageFromReplica(" + node.MemberId + ")=false --------------------------------------------");
                return(false);
            }
            return(true);
        }
Exemplo n.º 5
0
            public static BasicStateMachine CreateSM(int instance, bool designatedPrimary, TestConfig cfg, TestTracer tracer)
            {
                ManagedRSLNode[] nodes = new ManagedRSLNode[cfg.Ports.Length / 2];
                for (int i = 0; i < nodes.Length; i++)
                {
                    nodes[i] = BasicStateMachine.CreateNode(cfg.Ports[2 * i], cfg.Ports[(2 * i) + 1]);
                }

                BasicStateMachine sm = new BasicStateMachine(tracer, nodes[instance].RslPort, nodes[instance].RslLearnPort);

                try
                {
                    sm.CanBP = designatedPrimary;

                    using (ManagedRSLConfigParam rslCfg = SetupConfiguration(cfg.RslData))
                    {
                        Stopwatch w = Stopwatch.StartNew();

                        while (true)
                        {
                            if (sm.Initialize(rslCfg, sm.SelfNode, ManagedRSLProtocolVersion.ManagedRSLProtocolVersion_5, false))
                            {
                                break;
                            }

                            if (w.ElapsedMilliseconds > 10000)
                            {
                                throw new InvalidOperationException("couldn't initialize the SM");
                            }

                            Thread.Sleep(100);
                        }

                        sm.InitiateBootstrap(nodes, 10);

                        return(sm);
                    }
                }
                catch (Exception e)
                {
                    try
                    {
                        sm.Log("Exception during InitializeStateMachine {0}", e);
                    }
                    catch (Exception)
                    {
                        // ignore
                    }

                    sm.Dispose();
                    throw;
                }
            }
Exemplo n.º 6
0
        void Run(ManagedRSLNode[] nodes, ManagedRSLConfigParam cfgParam, ManagedRSLNode selfNode)
        {
            m_score       = 0;
            m_outstanding = 0;
            m_size        = 10 * 1024 * 1024;
            m_state       = new byte[m_size];
            m_clientEnd   = false;
            m_isPrimary   = false;

            bool res = Initialize(
                cfgParam,
                nodes,
                selfNode,
                ManagedRSLProtocolVersion.ManagedRSLProtocolVersion_3,
                false);

            Debug.Assert(res);

            for (int timer = 0; !m_clientEnd; timer++)
            {
                if (timer >= 1000 / SLEEP_TIME)
                {
                    timer = 0;
                    if (m_isPrimary)
                    {
                        ChangeConfigurationIfNeeded();
                    }
                }
                if (m_isPrimary && m_outstanding < 1)
                {
                    byte[] inc = BitConverter.GetBytes((int)1);
                    SendRequest(inc, this, UInt64.MaxValue);
                }
                Thread.Sleep(SLEEP_TIME);
            }
        }
Exemplo n.º 7
0
        public static ManagedRSLNode CreateNode(ushort port, ushort learnport)
        {
            ManagedRSLNode node = new ManagedRSLNode();

            try
            {
                node.Ip           = IPAddress.Loopback;
                node.HostName     = node.Ip.ToString();
                node.MemberId     = "instance_" + port;
                node.RslPort      = port;
                node.RslLearnPort = learnport;
            }
            catch (Exception)
            {
                if (node != null)
                {
                    node.Dispose();
                }

                throw;
            }

            return(node);
        }
Exemplo n.º 8
0
 public BasicRSLTestMachine(ManagedRSLNode self)
 {
     this.Self          = self;
     this.InternalState = int.MinValue;
 }
Exemplo n.º 9
0
 public override bool AcceptMessageFromReplica(ManagedRSLNode node, byte [] primaryCookie)
 {
     return(true);
 }
Exemplo n.º 10
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);
        }
Exemplo n.º 11
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
Exemplo n.º 12
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);
        }