Exemple #1
0
        public virtual TestProtocolServer AddServer(int serverId, URI serverUri)
        {
            TestProtocolServer server = NewTestProtocolServer(serverId, serverUri);

            Debug(serverUri.ToString(), "joins network");

            Participants[serverUri.ToString()] = server;

            return(server);
        }
Exemple #2
0
        protected internal virtual TestProtocolServer NewTestProtocolServer(int serverId, URI serverUri)
        {
            ProtocolServerFactory protocolServerFactory = new MultiPaxosServerFactory(new ClusterConfiguration("default", _logService.InternalLogProvider), _logService.InternalLogProvider, _monitors.newMonitor(typeof(StateMachines.Monitor)));

            ServerIdElectionCredentialsProvider electionCredentialsProvider = new ServerIdElectionCredentialsProvider();

            electionCredentialsProvider.ListeningAt(serverUri);
            TestProtocolServer protocolServer = new TestProtocolServer(_logService.InternalLogProvider, _timeoutStrategy, protocolServerFactory, serverUri, new InstanceId(serverId), new InMemoryAcceptorInstanceStore(), electionCredentialsProvider);

            protocolServer.AddStateTransitionListener(new StateTransitionLogger(_logService.InternalLogProvider, new AtomicBroadcastSerializer(new ObjectStreamFactory(), new ObjectStreamFactory())));
            return(protocolServer);
        }
Exemple #3
0
 public TestMessageSource(TestProtocolServer outerInstance)
 {
     this._outerInstance = outerInstance;
 }
Exemple #4
0
        public virtual int Tick()
        {
            // Deliver messages whose delivery time has passed
            _now += _tickDuration;

            //       logger.debug( "tick:"+now );

            IEnumerator <MessageDelivery> iter = _messageDeliveries.GetEnumerator();

            while (iter.MoveNext())
            {
                MessageDelivery messageDelivery = iter.Current;
                if (messageDelivery.MessageDeliveryTime <= _now)
                {
                    long delay = _strategy.messageDelay(messageDelivery.Message, messageDelivery.Server.Server.boundAt().ToString());
                    if (delay != NetworkLatencyStrategy_Fields.LOST)
                    {
                        messageDelivery.Server.process(messageDelivery.Message);
                    }
//JAVA TO C# CONVERTER TODO TASK: .NET enumerators are read-only:
                    iter.remove();
                }
            }

            // Check and trigger timeouts
            foreach (TestProtocolServer testServer in Participants.Values)
            {
                testServer.Tick(_now);
            }

            // Get all sent messages from all test servers
            IList <Message> messages = new List <Message>();

            foreach (TestProtocolServer testServer in Participants.Values)
            {
                testServer.SendMessages(messages);
            }

            // Now send them and figure out latency
            foreach (Message message in messages)
            {
                string to    = message.getHeader(Message.HEADER_TO);
                long   delay = 0;
                if (message.getHeader(Message.HEADER_TO).Equals(message.getHeader(Message.HEADER_FROM)))
                {
                    Log.debug("Sending message to itself; zero latency");
                }
                else
                {
                    delay = _strategy.messageDelay(message, to);
                }

                if (delay == NetworkLatencyStrategy_Fields.LOST)
                {
                    Log.debug("Send message to " + to + " was lost");
                }
                else
                {
                    TestProtocolServer server = Participants[to];
                    Log.debug("Send to " + to + ": " + message);
                    _messageDeliveries.Add(new MessageDelivery(_now + delay, message, server));
                }
            }

//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: java.util.Iterator<org.neo4j.helpers.collection.Pair<java.util.concurrent.Future<?>, Runnable>> waiters = futureWaiter.iterator();
            IEnumerator <Pair <Future <object>, ThreadStart> > waiters = _futureWaiter.GetEnumerator();

            while (waiters.MoveNext())
            {
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: org.neo4j.helpers.collection.Pair<java.util.concurrent.Future<?>, Runnable> next = waiters.Current;
                Pair <Future <object>, ThreadStart> next = waiters.Current;
                if (next.First().Done)
                {
                    next.Other().run();
//JAVA TO C# CONVERTER TODO TASK: .NET enumerators are read-only:
                    waiters.remove();
                }
            }

            return(_messageDeliveries.Count);
        }