Problem: We need to store the election_id as part of the validator_update so we can efficiently check which election was resposible for the change

Solution: Added the parameter to `store_validator_set` and aligned the tests
This commit is contained in:
z-bowen 2018-08-30 12:02:43 +02:00
parent 7a0b474d11
commit 4c64b6c52c
7 changed files with 10 additions and 8 deletions

View File

@ -54,7 +54,7 @@ class App(BaseApplication):
validator_set = [vutils.decode_validator(v) for v in genesis.validators] validator_set = [vutils.decode_validator(v) for v in genesis.validators]
block = Block(app_hash='', height=0, transactions=[]) block = Block(app_hash='', height=0, transactions=[])
self.bigchaindb.store_block(block._asdict()) self.bigchaindb.store_block(block._asdict())
self.bigchaindb.store_validator_set(1, validator_set) self.bigchaindb.store_validator_set(1, validator_set, '')
return ResponseInitChain() return ResponseInitChain()
def info(self, request): def info(self, request):

View File

@ -432,13 +432,14 @@ class BigchainDB(object):
def store_pre_commit_state(self, state): def store_pre_commit_state(self, state):
return backend.query.store_pre_commit_state(self.connection, state) return backend.query.store_pre_commit_state(self.connection, state)
def store_validator_set(self, height, validators): def store_validator_set(self, height, validators, election_id):
"""Store validator set at a given `height`. """Store validator set at a given `height`.
NOTE: If the validator set already exists at that `height` then an NOTE: If the validator set already exists at that `height` then an
exception will be raised. exception will be raised.
""" """
return backend.query.store_validator_set(self.connection, {'height': height, return backend.query.store_validator_set(self.connection, {'height': height,
'validators': validators}) 'validators': validators,
'election_id': election_id})
Block = namedtuple('Block', ('app_hash', 'height', 'transactions')) Block = namedtuple('Block', ('app_hash', 'height', 'transactions'))

View File

@ -227,7 +227,7 @@ class ValidatorElection(Transaction):
validator_updates) validator_updates)
updated_validator_set = [v for v in updated_validator_set if v['voting_power'] > 0] updated_validator_set = [v for v in updated_validator_set if v['voting_power'] > 0]
bigchain.store_validator_set(new_height+1, updated_validator_set) bigchain.store_validator_set(new_height+1, updated_validator_set, election.id)
return [encode_validator(election.asset['data'])] return [encode_validator(election.asset['data'])]
return [] return []

View File

@ -237,7 +237,7 @@ def test_new_validator_set(b):
validators = [node1] validators = [node1]
updates = [node1_new_power, node2] updates = [node1_new_power, node2]
b.store_validator_set(1, validators) b.store_validator_set(1, validators, 'election_id')
updated_validator_set = new_validator_set(b.get_validators(1), updates) updated_validator_set = new_validator_set(b.get_validators(1), updates)
updated_validators = [] updated_validators = []

View File

@ -71,7 +71,8 @@ def inconclusive_election(b, concluded_election, new_validator):
validators = b.get_validators(height=1) validators = b.get_validators(height=1)
validators[0]['voting_power'] = 15 validators[0]['voting_power'] = 15
validator_update = {'validators': validators, validator_update = {'validators': validators,
'height': 3} 'height': 3,
'election_id': 'some_other_election'}
query.store_validator_set(b.connection, validator_update) query.store_validator_set(b.connection, validator_update)
return concluded_election return concluded_election

View File

@ -368,4 +368,4 @@ def reset_validator_set(b, node_keys, height):
validators.append({'pub_key': {'type': 'ed25519', validators.append({'pub_key': {'type': 'ed25519',
'data': node_pub}, 'data': node_pub},
'voting_power': 10}) 'voting_power': 10})
b.store_validator_set(height, validators) b.store_validator_set(height, validators, 'election_id')

View File

@ -14,7 +14,7 @@ def test_get_validators_endpoint(b, client):
'pub_key': {'data': '4E2685D9016126864733225BE00F005515200727FBAB1312FC78C8B76831255A', 'pub_key': {'data': '4E2685D9016126864733225BE00F005515200727FBAB1312FC78C8B76831255A',
'type': 'ed25519'}, 'type': 'ed25519'},
'voting_power': 10}] 'voting_power': 10}]
b.store_validator_set(23, validator_set) b.store_validator_set(23, validator_set, 'election_id')
res = client.get(VALIDATORS_ENDPOINT) res = client.get(VALIDATORS_ENDPOINT)
assert is_validator(res.json[0]) assert is_validator(res.json[0])