Пример #1
0
def test_acceptor_should_not_accept_before_grant():
    acceptor = Acceptor(SuggestionId(0, '0'), None)
    assert acceptor.last_value is None
    assert acceptor.grant_id is None
    sug = SuggestionId(0, '0')
    with pytest.raises(Exception):
        assert acceptor.should_accept(sug)
Пример #2
0
Файл: server.py Проект: dwoz/pax
 async def propose(self, key, value):
     loop = asyncio.get_running_loop()
     serial = self.table.wid
     sug_id = SuggestionId(serial, self.name)
     proposer = Proposer(
         self.peers,
         sug_id,
         [key, value],
     )
     tasks = []
     for peer in self.peers:
         task = loop.create_task(self.peer_protocols[peer].permission(str(sug_id)))
         tasks.append(task)
     for name, result in await asyncio.gather(*tasks):
         if result:
             proposer.grant(name)
     tasks = []
     if not proposer.can_propose:
         raise Exception("Unable to propose value")
     for peer in self.peers:
         task = loop.create_task(self.peer_protocols[peer].propose(str(sug_id), [key, value]))
         tasks.append(task)
     for name, result in await asyncio.gather(*tasks):
         if result:
             proposer.accept(name)
     if not proposer.value_accepted:
         raise Exception("Value not accepted")
     tasks = []
     for peer in self.peers:
         task = loop.create_task(self.peer_protocols[peer].learn([key, value]))
         tasks.append(task)
     for name, result in await asyncio.gather(*tasks):
         log.debug("Learner response %s %r", name, result)
     return str(sug_id), value
Пример #3
0
def test_proposer_grant():
    config = {
        'a': ('127.0.0.1', 55501),
        'b': ('127.0.0.1', 55502),
        'c': ('127.0.0.1', 55503),
    }
    sug_id = SuggestionId(1, 'a')
    proposer = Proposer(config, sug_id, 'test value')
    assert proposer.can_propose == False
    proposer.grant('a')
    proposer.grant('b')
    assert proposer.can_propose == True
Пример #4
0
def test_proposer_accept():
    config = {
        'a': ('127.0.0.1', 55501),
        'b': ('127.0.0.1', 55502),
        'c': ('127.0.0.1', 55503),
    }
    sug_id = SuggestionId(1, 'a')
    proposer = Proposer(config, sug_id, 'test value')

    assert proposer.value_accepted is False
    proposer.accept('a')
    proposer.accept('b')
    assert proposer.value_accepted is True
Пример #5
0
def test_paxos():
    config = {
        'a': ('127.0.0.1', 55501),
        'b': ('127.0.0.1', 55502),
        'c': ('127.0.0.1', 55503),
    }
    sug_id = SuggestionId(0, '0')
    acceptors = {k: Acceptor(sug_id, None) for k in config}
    sug_id = SuggestionId(1, 'a')
    value = 'meh'
    proposer = Proposer(
        config,
        sug_id,
        value,
    )
    learner = Learner()
    for a in proposer.peers:
        assert acceptors[a].should_grant(sug_id)
        acceptors[a].grant(sug_id)
    for a in proposer.peers:
        assert acceptors[a].should_accept(sug_id)
        acceptors[a].accept(sug_id, value)
    learner.learn(value)
    assert learner.value == value
Пример #6
0
def test_acceptor_grant():
    acceptor = Acceptor(SuggestionId(0, '0'), None)
    sug = SuggestionId(0, 'a')
    acceptor.grant(sug)
    acceptor.grant_id == sug
Пример #7
0
def test_acceptor_should_not_accept_after_grant():
    acceptor = Acceptor(SuggestionId(0, '0'), None, SuggestionId(0, 'b'))
    # Grant id is grater than id to be accepted
    sug = SuggestionId(0, 'a')
    assert acceptor.should_accept(sug) is False
Пример #8
0
def test_acceptor_should_accept():
    acceptor = Acceptor(SuggestionId(0, '0'), None, SuggestionId(0, 'a'))
    sug = SuggestionId(0, 'a')
    assert acceptor.should_accept(sug) is True
Пример #9
0
def test_acceptor_should_not_grant():
    acceptor = Acceptor(SuggestionId(0, '0'), None)
    sug = SuggestionId(0, '0')
    assert acceptor.should_grant(sug) is False
Пример #10
0
def test_suggestion_id_parse():
    sug = SuggestionId.parse('1,a')
    assert sug.uid == 1
    assert sug.node == 'a'
Пример #11
0
def test_suggestion_id_to_str():
    assert str(SuggestionId('1', 'a')) == '1,a'