Ejemplo n.º 1
0
def test_get_max_index_term():
    rl = log.RaftLog(None)
    le = log.logentry(2, 'abcd', {})
    rl.add(le)
    assert rl.get_max_index_term() == (1, 2)
    le = log.logentry(6, 'abcdefg', {})
    rl.add(le)
    assert rl.get_max_index_term() == (2, 6)
Ejemplo n.º 2
0
def test_get_max_index_term():
    rl = log.RaftLog(None)
    le = log.logentry(2, 'abcd', {})
    rl.add(le)
    assert rl.get_max_index_term() == (1, 2)
    le = log.logentry(6, 'abcdefg', {})
    rl.add(le)
    assert rl.get_max_index_term() == (2, 6)
Ejemplo n.º 3
0
def test_get_term():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(4, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    assert rl.get_term_of(0) == 0
    assert rl.get_term_of(1) == 2
    assert rl.get_term_of(2) == 4
Ejemplo n.º 4
0
def test_logs_after_index():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    assert rl.logs_after_index(1) == {2: le2, 3: le3}
Ejemplo n.º 5
0
def test_get_term():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(4, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    assert rl.get_term_of(0) == 0
    assert rl.get_term_of(1) == 2
    assert rl.get_term_of(2) == 4
Ejemplo n.º 6
0
def test_remove():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(4, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    rl.remove(1)
    assert rl.get_by_uuid('abcd') == None
    assert rl.get_by_index(1) == None
Ejemplo n.º 7
0
def test_logs_after_index():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    assert rl.logs_after_index(1) == {2: le2, 3: le3}
Ejemplo n.º 8
0
def test_remove():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(4, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    rl.remove(1)
    assert rl.get_by_uuid('abcd') == None
    assert rl.get_by_index(1) == None
Ejemplo n.º 9
0
def test_get():
    rl = log.RaftLog(None)
    assert rl.get(2) == None
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    assert rl.get(2) == le2
    assert rl.get_by_uuid('abcd') == le1
    assert rl.get_by_index(1) == le1
Ejemplo n.º 10
0
def test_committed_logs_after_index():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    rl.commit(2, 2)
    assert rl.committed_logs_after_index(1) == {2: le2}
Ejemplo n.º 11
0
def test_committed_logs_after_index():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    rl.commit(2, 2)
    assert rl.committed_logs_after_index(1) == {2: le2}
Ejemplo n.º 12
0
def test_get():
    rl = log.RaftLog(None)
    assert rl.get(2) == None
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    assert rl.get(2) == le2
    assert rl.get_by_uuid('abcd') == le1
    assert rl.get_by_index(1) == le1
Ejemplo n.º 13
0
def test_exists():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    assert rl.exists(0, 0) == True
    assert rl.exists(1, 2) == True
    assert rl.exists(1, 1) == False
    assert rl.exists(3, 4) == True
Ejemplo n.º 14
0
def test_exists():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    assert rl.exists(0, 0) == True
    assert rl.exists(1, 2) == True
    assert rl.exists(1, 1) == False
    assert rl.exists(3, 4) == True
Ejemplo n.º 15
0
def test_committed_by_uuid():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    rl.commit(2, 2)
    assert rl.is_committed_by_uuid('abcd') == True
    assert rl.is_committed_by_uuid('abcdef') == False
    assert rl.is_committed_by_uuid('abcde') == True
    assert rl.is_committed_by_uuid('xyz') == False
Ejemplo n.º 16
0
def test_is_committed():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    rl.commit(2, 2)
    assert rl.is_committed(1, 2) == True
    assert rl.is_committed(2, 2) == True
    assert rl.is_committed(2, 1) == False
    assert rl.is_committed(3, 4) == False
Ejemplo n.º 17
0
def test_is_committed():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    rl.commit(2, 2)
    assert rl.is_committed(1, 2) == True
    assert rl.is_committed(2, 2) == True
    assert rl.is_committed(2, 1) == False
    assert rl.is_committed(3, 4) == False
Ejemplo n.º 18
0
def test_committed_by_uuid():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    rl.commit(2, 2)
    assert rl.is_committed_by_uuid('abcd') == True
    assert rl.is_committed_by_uuid('abcdef') == False
    assert rl.is_committed_by_uuid('abcde') == True
    assert rl.is_committed_by_uuid('xyz') == False
Ejemplo n.º 19
0
def test_maxindex():
    rl = log.RaftLog(None)
    assert rl.maxindex() == 0
    le = log.logentry(2, 'abcd', {})
    rl.add(le)
    assert rl.maxindex() == 1
    le = log.logentry(2, 'abcde', {})
    le['index'] = 12
    rl.add(le)
    assert rl.maxindex() == 12
    le = log.logentry(2, 'abcdef', {})
    le['index'] = 5
    rl.add(le)
    assert rl.maxindex() == 5
Ejemplo n.º 20
0
def test_maxindex():
    rl = log.RaftLog(None)
    assert rl.maxindex() == 0
    le = log.logentry(2, 'abcd', {})
    rl.add(le)
    assert rl.maxindex() == 1
    le = log.logentry(2, 'abcde', {})
    le['index'] = 12
    rl.add(le)
    assert rl.maxindex() == 12
    le = log.logentry(2, 'abcdef', {})
    le['index'] = 5
    rl.add(le)
    assert rl.maxindex() == 5
Ejemplo n.º 21
0
def test_get_commit_index():
    rl = log.RaftLog(None)
    assert rl.get_commit_index() == 0
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    assert rl.get_commit_index() == 0
    rl.commit(2, 2)
    assert rl.get_commit_index() == 2
    rl = log.RaftLog(None)
    rl.get_by_index(0)['committed'] = False
    assert rl.get_commit_index() == 0
Ejemplo n.º 22
0
def test_get_commit_index():
    rl = log.RaftLog(None)
    assert rl.get_commit_index() == 0
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(2, 'abcde', {})
    le3 = log.logentry(4, 'abcdef', {})
    rl.add(le1)
    rl.add(le2)
    rl.add(le3)
    assert rl.get_commit_index() == 0
    rl.commit(2, 2)
    assert rl.get_commit_index() == 2
    rl = log.RaftLog(None)
    rl.get_by_index(0)['committed'] = False
    assert rl.get_commit_index() == 0
Ejemplo n.º 23
0
 def possible_update_commit(self):
     # we're in an update; see if the update msg
     # has committed, and go to phase 2 or finish
     if not self.log.is_committed_by_uuid(self.update_uuid):
         # it hasn't
         return
     umsg = self.log.get_by_uuid(self.update_uuid)
     data = copy.deepcopy(umsg['msg'])
     if data['phase'] == 1 and self.newpeers:
         # the *first* phase of the update has been committed
         # new leaders are guaranteed to be in the union of the
         # old and new configs.  now update the configuration
         # to the new one only.
         data['phase'] = 2
         newid = uuid.uuid4().hex
         self.update_uuid = newid
         data['id'] = newid
         self.oldpeers = self.peers
         self.peers = self.newpeers
         self.newpeers = None
         logentry = log.logentry(self.term, newid, data)
         self.log.add(logentry)
     else:
         # the *second* phase is now committed.  tell all our
         # current peers about the successful commit, drop
         # the old config entirely and, if necessary, step down
         self.send_ae()  # send this to peers who might be about to dispeer
         self.oldpeers = None
         self.update_uuid = None
         if not self.uuid in self.peers:
             self.running = False
Ejemplo n.º 24
0
 def possible_update_commit(self):
     # we're in an update; see if the update msg
     # has committed, and go to phase 2 or finish
     if not self.log.is_committed_by_uuid(self.update_uuid):
         # it hasn't
         return
     umsg = self.log.get_by_uuid(self.update_uuid)
     data = copy.deepcopy(umsg['msg'])
     if data['phase'] == 1 and self.newpeers:
         # the *first* phase of the update has been committed
         # new leaders are guaranteed to be in the union of the
         # old and new configs.  now update the configuration
         # to the new one only.
         data['phase'] = 2
         newid = uuid.uuid4().hex
         self.update_uuid = newid
         data['id'] = newid
         self.oldpeers = self.peers
         self.peers = self.newpeers
         self.newpeers = None
         logentry = log.logentry(self.term, newid, data)
         self.log.add(logentry)
     else:
         # the *second* phase is now committed.  tell all our
         # current peers about the successful commit, drop
         # the old config entirely and, if necessary, step down
         self.send_ae()  # send this to peers who might be about to dispeer
         self.oldpeers = None
         self.update_uuid = None
         if not self.uuid in self.peers:
             self.running = False
Ejemplo n.º 25
0
def test_force_commit():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    assert le['committed'] == False
    rl.force_commit(1)
    assert le['committed'] == True
    rl.force_commit(5) # bad indices do nothing
Ejemplo n.º 26
0
def test_force_commit():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    assert le['committed'] == False
    rl.force_commit(1)
    assert le['committed'] == True
    rl.force_commit(5)  # bad indices do nothing
Ejemplo n.º 27
0
def test_add():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(4, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    assert le1['index'] == 1
    assert le2['index'] == 2
    # double adds do nothing
    le1_2 = log.logentry(2, 'abcd', {})
    rl.add(le1_2)
    assert 'index' not in le1_2
    assert rl.get_by_uuid('abcd') == le1
    le = log.logentry(6, 'xyz', {})
    le['index'] = 1
    rl.add(le)
    assert rl.get_by_uuid('abcd') == None
    assert rl.get_by_uuid('abcde') == None
Ejemplo n.º 28
0
def test_commit():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    assert le['committed'] == False
    rl.commit(1, 6)
    assert le['committed'] == True
    with pytest.raises(AssertionError):
        rl.commit(1, 8)
Ejemplo n.º 29
0
def test_add():
    rl = log.RaftLog(None)
    le1 = log.logentry(2, 'abcd', {})
    le2 = log.logentry(4, 'abcde', {})
    rl.add(le1)
    rl.add(le2)
    assert le1['index'] == 1
    assert le2['index'] == 2
    # double adds do nothing
    le1_2 = log.logentry(2, 'abcd', {})
    rl.add(le1_2)
    assert 'index' not in le1_2
    assert rl.get_by_uuid('abcd') == le1
    le = log.logentry(6, 'xyz', {})
    le['index'] = 1
    rl.add(le)
    assert rl.get_by_uuid('abcd') == None
    assert rl.get_by_uuid('abcde') == None
Ejemplo n.º 30
0
def test_commit():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    assert le['committed'] == False
    rl.commit(1, 6)
    assert le['committed'] == True
    with pytest.raises(AssertionError):
        rl.commit(1, 8)
Ejemplo n.º 31
0
def test_num_acked():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    assert rl.num_acked(1) == 0
    rl.add_ack(1, 6, 'f')
    assert rl.num_acked(1) == 1
    # double acks don't increase our count
    rl.add_ack(1, 6, 'f')
    assert rl.num_acked(1) == 1
    rl.add_ack(1, 6, 'g')
    assert rl.num_acked(1) == 2
Ejemplo n.º 32
0
def test_num_acked():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    assert rl.num_acked(1) == 0
    rl.add_ack(1, 6, 'f')
    assert rl.num_acked(1) == 1
    # double acks don't increase our count
    rl.add_ack(1, 6, 'f')
    assert rl.num_acked(1) == 1
    rl.add_ack(1, 6, 'g')
    assert rl.num_acked(1) == 2
Ejemplo n.º 33
0
 def add_to_log(self, msg):
     uuid = msg['id']
     logentry = log.logentry(self.term, uuid, msg)
     index = self.log.add(logentry)
     self.save()
     self.log.add_ack(index, self.term, self.uuid)
Ejemplo n.º 34
0
def test_add_ack():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    rl.add_ack(1, 6, 'f')
    assert 'f' in rl.get_by_uuid('xyz')['acked']
Ejemplo n.º 35
0
def test_has_uuid():
    rl = log.RaftLog(None)
    le = log.logentry(2, 'abcd', {})
    rl.add(le)
    assert rl.has_uuid('abcd') == True
    assert rl.has_uuid('dcba') == False
Ejemplo n.º 36
0
def test_has_uuid():
    rl = log.RaftLog(None)
    le = log.logentry(2, 'abcd', {})
    rl.add(le)
    assert rl.has_uuid('abcd') == True
    assert rl.has_uuid('dcba') == False
Ejemplo n.º 37
0
 def add_to_log(self, msg):
     uuid = msg['id']
     logentry = log.logentry(self.term, uuid, msg)
     index = self.log.add(logentry)
     self.save()
     self.log.add_ack(index, self.term, self.uuid)
Ejemplo n.º 38
0
def test_add_ack():
    rl = log.RaftLog(None)
    le = log.logentry(6, 'xyz', {})
    rl.add(le)
    rl.add_ack(1, 6, 'f')
    assert 'f' in rl.get_by_uuid('xyz')['acked']