コード例 #1
0
    def test_two_candidates_one_wins(self):
        followers = []

        for i in range(6):
            board = MemoryBoard()
            state = Follower()
            followers.append(Server(i, state, [], board, []))

        board = MemoryBoard()
        state = Candidate()
        c0 = Server(7, state, [], board, followers[0:2])

        board = MemoryBoard()
        state = Candidate()
        c1 = Server(8, state, [], board, followers[2:])

        for i in range(2):
            followers[i]._neighbors.append(c0)
            followers[i].on_message(followers[i]._messageBoard.get_message())

        for i in range(2, 6):
            followers[i]._neighbors.append(c1)
            followers[i].on_message(followers[i]._messageBoard.get_message())

        c0._total_nodes = 7
        c1._total_nodes = 7

        for i in range(2):
            c0.on_message(c0._messageBoard.get_message())

        for i in range(4):
            c1.on_message(c1._messageBoard.get_message())

        self.assertEquals(type(c0._state), Candidate)
        self.assertEquals(type(c1._state), Leader)
コード例 #2
0
    def test_candidate_server_wins_election(self):
        board = MemoryBoard()
        state = Follower()
        server0 = Server(0, state, [], board, [])

        board = MemoryBoard()
        state = Follower()
        oserver = Server(1, state, [], board, [])

        board = MemoryBoard()
        state = Candidate()
        server = Server(2, state, [], board, [oserver, server0])

        server0._neighbors.append(server)
        oserver._neighbors.append(server)

        oserver.on_message(oserver._messageBoard.get_message())
        server0.on_message(server0._messageBoard.get_message())

        server._total_nodes = 3

        server.on_message(server._messageBoard.get_message())
        server.on_message(server._messageBoard.get_message())

        self.assertEquals(type(server._state), Leader)
コード例 #3
0
ファイル: run.py プロジェクト: nitijain/raft-simulator
print "1. Start a new server"
print "2. Kill a server: name"
print "3. Resume a server: name"
print "4. Client command: name, message_string"
print "5. Initiate first election"

thread = Thread(target=checkMesages, args=())
thread.start()

while (True):
    command = raw_input()
    args = command.split()
    if args[0] == "1":
        state = Follower()
        server = Server(available_id, state, [], [])
        server._total_nodes = available_id + 1
        isLeader = 0
        for i in range(available_id):
            server._neighbors.append(config[i]["object"])
            if type(config[i]["object"]._state) == Leader:
                isLeader = 1
            config[i]["object"]._total_nodes = available_id + 1
            config[i]["object"]._neighbors.append(server)
        if isLeader:
            server._state.on_resume()

        thread = Thread(target=serverFunction, args=(available_id, ))
        config[available_id] = {"object": server}
        available_id += 1
        thread.start()
    elif args[0] == "2":