mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Problem: Tendermint configuration not present in BigchainDB config (#2342)
* Problem: Tendermint configuration not present in BigchainDB config * Handle tendermint configurations properly - Update docs * Nitpick * Missed some conflicts * Make changes in tendermint/lib.py instead of deprecated core.py - Also remove redundant info from docs about default values * Fix docsserver automethod
This commit is contained in:
parent
af996650c3
commit
1bad851e07
@ -59,6 +59,10 @@ config = {
|
||||
'advertised_host': 'localhost',
|
||||
'advertised_port': 9985,
|
||||
},
|
||||
'tendermint': {
|
||||
'host': 'localhost',
|
||||
'port': 46657,
|
||||
},
|
||||
# FIXME: hardcoding to localmongodb for now
|
||||
'database': _database_map['localmongodb'],
|
||||
'log': {
|
||||
|
@ -21,7 +21,6 @@ from bigchaindb.commands import utils
|
||||
from bigchaindb.commands.utils import (configure_bigchaindb,
|
||||
input_on_stderr)
|
||||
from bigchaindb.log import setup_logging
|
||||
from bigchaindb.tendermint.lib import BigchainDB
|
||||
from bigchaindb.tendermint.utils import public_key_from_base64
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
@ -82,6 +81,10 @@ def run_configure(args):
|
||||
val = conf['database'][key]
|
||||
conf['database'][key] = input_on_stderr('Database {}? (default `{}`): '.format(key, val), val)
|
||||
|
||||
for key in ('host', 'port'):
|
||||
val = conf['tendermint'][key]
|
||||
conf['tendermint'][key] = input_on_stderr('Tendermint {}? (default `{}`)'.format(key, val), val)
|
||||
|
||||
if config_path != '-':
|
||||
bigchaindb.config_utils.write_config(conf, config_path)
|
||||
else:
|
||||
@ -94,7 +97,7 @@ def run_configure(args):
|
||||
def run_upsert_validator(args):
|
||||
"""Store validators which should be synced with Tendermint"""
|
||||
|
||||
b = bigchaindb.Bigchain()
|
||||
b = bigchaindb.tendermint.lib.BigchainDB()
|
||||
public_key = public_key_from_base64(args.public_key)
|
||||
validator = {'pub_key': {'type': 'ed25519',
|
||||
'data': public_key},
|
||||
@ -110,7 +113,7 @@ def run_upsert_validator(args):
|
||||
|
||||
|
||||
def _run_init():
|
||||
bdb = bigchaindb.Bigchain()
|
||||
bdb = bigchaindb.tendermint.lib.BigchainDB()
|
||||
|
||||
schema.init_database(connection=bdb.connection)
|
||||
|
||||
@ -167,7 +170,7 @@ def run_start(args):
|
||||
setup_logging()
|
||||
|
||||
logger.info('BigchainDB Version %s', bigchaindb.__version__)
|
||||
run_recover(BigchainDB())
|
||||
run_recover(bigchaindb.tendermint.lib.BigchainDB())
|
||||
|
||||
try:
|
||||
if not args.skip_initialize_database:
|
||||
|
@ -248,10 +248,8 @@ def autoconfigure(filename=None, config=None, force=False):
|
||||
|
||||
# override configuration with env variables
|
||||
newconfig = env_config(newconfig)
|
||||
|
||||
if config:
|
||||
newconfig = update(newconfig, config)
|
||||
|
||||
set_config(newconfig) # sets bigchaindb.config
|
||||
|
||||
|
||||
|
@ -41,8 +41,6 @@ class Bigchain(object):
|
||||
connection (:class:`~bigchaindb.backend.connection.Connection`):
|
||||
A connection to the database.
|
||||
"""
|
||||
config_utils.autoconfigure()
|
||||
|
||||
consensusPlugin = bigchaindb.config.get('consensus_plugin')
|
||||
|
||||
if consensusPlugin:
|
||||
@ -50,8 +48,6 @@ class Bigchain(object):
|
||||
else:
|
||||
self.consensus = BaseConsensusRules
|
||||
|
||||
self.connection = connection if connection else backend.connect(**bigchaindb.config['database'])
|
||||
|
||||
def delete_transaction(self, *transaction_id):
|
||||
"""Delete a transaction from the backlog.
|
||||
|
||||
|
@ -2,17 +2,17 @@ import asyncio
|
||||
import json
|
||||
import logging
|
||||
import time
|
||||
from os import getenv
|
||||
|
||||
import aiohttp
|
||||
|
||||
from bigchaindb import config
|
||||
from bigchaindb.common.utils import gen_timestamp
|
||||
from bigchaindb.events import EventTypes, Event
|
||||
from bigchaindb.tendermint.utils import decode_transaction_base64
|
||||
|
||||
|
||||
HOST = getenv('BIGCHAINDB_TENDERMINT_HOST', 'localhost')
|
||||
PORT = int(getenv('BIGCHAINDB_TENDERMINT_PORT', 46657))
|
||||
HOST = config['tendermint']['host']
|
||||
PORT = config['tendermint']['port']
|
||||
URL = 'ws://{}:{}/websocket'.format(HOST, PORT)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -5,7 +5,6 @@ MongoDB.
|
||||
import logging
|
||||
from collections import namedtuple
|
||||
from copy import deepcopy
|
||||
from os import getenv
|
||||
from uuid import uuid4
|
||||
|
||||
try:
|
||||
@ -15,8 +14,8 @@ except ImportError:
|
||||
from sha3 import sha3_256
|
||||
|
||||
import requests
|
||||
|
||||
from bigchaindb import backend
|
||||
import bigchaindb
|
||||
from bigchaindb import backend, config_utils
|
||||
from bigchaindb import Bigchain
|
||||
from bigchaindb.models import Transaction
|
||||
from bigchaindb.common.exceptions import (SchemaValidationError,
|
||||
@ -28,24 +27,26 @@ from bigchaindb import exceptions as core_exceptions
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
BIGCHAINDB_TENDERMINT_HOST = getenv('BIGCHAINDB_TENDERMINT_HOST',
|
||||
'localhost')
|
||||
BIGCHAINDB_TENDERMINT_PORT = getenv('BIGCHAINDB_TENDERMINT_PORT',
|
||||
'46657')
|
||||
ENDPOINT = 'http://{}:{}/'.format(BIGCHAINDB_TENDERMINT_HOST,
|
||||
BIGCHAINDB_TENDERMINT_PORT)
|
||||
MODE_LIST = ('broadcast_tx_async',
|
||||
'broadcast_tx_sync',
|
||||
'broadcast_tx_commit')
|
||||
|
||||
|
||||
class BigchainDB(Bigchain):
|
||||
|
||||
def __init__(self, connection=None, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
config_utils.autoconfigure()
|
||||
self.mode_list = ('broadcast_tx_async',
|
||||
'broadcast_tx_sync',
|
||||
'broadcast_tx_commit')
|
||||
self.tendermint_host = bigchaindb.config['tendermint']['host']
|
||||
self.tendermint_port = bigchaindb.config['tendermint']['port']
|
||||
self.endpoint = 'http://{}:{}/'.format(self.tendermint_host, self.tendermint_port)
|
||||
self.connection = connection if connection else backend.connect(**bigchaindb.config['database'])
|
||||
|
||||
def post_transaction(self, transaction, mode):
|
||||
"""Submit a valid transaction to the mempool."""
|
||||
if not mode or mode not in MODE_LIST:
|
||||
if not mode or mode not in self.mode_list:
|
||||
raise ValidationError(('Mode must be one of the following {}.')
|
||||
.format(', '.join(MODE_LIST)))
|
||||
.format(', '.join(self.mode_list)))
|
||||
|
||||
payload = {
|
||||
'method': mode,
|
||||
@ -54,7 +55,7 @@ class BigchainDB(Bigchain):
|
||||
'id': str(uuid4())
|
||||
}
|
||||
# TODO: handle connection errors!
|
||||
return requests.post(ENDPOINT, json=payload)
|
||||
return requests.post(self.endpoint, json=payload)
|
||||
|
||||
def write_transaction(self, transaction, mode):
|
||||
# This method offers backward compatibility with the Web API.
|
||||
@ -69,7 +70,7 @@ class BigchainDB(Bigchain):
|
||||
|
||||
return (202, '')
|
||||
# result = response['result']
|
||||
# if mode == MODE_LIST[2]:
|
||||
# if mode == self.mode_list[2]:
|
||||
# return self._process_commit_mode_response(result)
|
||||
# else:
|
||||
# status_code = result['code']
|
||||
@ -348,7 +349,7 @@ class BigchainDB(Bigchain):
|
||||
|
||||
def get_validators(self):
|
||||
try:
|
||||
resp = requests.get('{}validators'.format(ENDPOINT))
|
||||
resp = requests.get('{}validators'.format(self.endpoint))
|
||||
validators = resp.json()['result']['validators']
|
||||
for v in validators:
|
||||
v.pop('accum')
|
||||
|
@ -3,5 +3,3 @@ The BigchainDB Class
|
||||
####################
|
||||
|
||||
.. autoclass:: bigchaindb.tendermint.BigchainDB
|
||||
|
||||
.. automethod:: bigchaindb.tendermint.lib.BigchainDB.__init__
|
||||
|
@ -33,6 +33,8 @@ For convenience, here's a list of all the relevant environment variables (docume
|
||||
`BIGCHAINDB_LOG_DATEFMT_LOGFILE`<br>
|
||||
`BIGCHAINDB_LOG_FMT_CONSOLE`<br>
|
||||
`BIGCHAINDB_LOG_FMT_LOGFILE`<br>
|
||||
`BIGCHAINDB_TENDERMINT_HOST`<br>
|
||||
`BIGCHAINDB_TENDERMINT_PORT`<br>
|
||||
|
||||
|
||||
The local config file is `$HOME/.bigchaindb` by default (a file which might not even exist), but you can tell BigchainDB to use a different file by using the `-c` command-line option, e.g. `bigchaindb -c path/to/config_file.json start`
|
||||
@ -426,3 +428,26 @@ logging of the `core.py` module to be more verbose, you would set the
|
||||
```
|
||||
|
||||
**Defaults to**: `{}`
|
||||
|
||||
## tendermint.host & tendermint.port
|
||||
|
||||
The settings with names of the form `tendermint.*` are for
|
||||
consensus(Tendermint) backend that we are using:
|
||||
|
||||
* `tendermint.host` is the hostname (FQDN)/IP address of the tendermint backend.
|
||||
* `tendermint.port` is self-explanatory.
|
||||
|
||||
**Example using environment variables**
|
||||
```text
|
||||
export BIGCHAINDB_TENDERMINT_HOST=tendermint
|
||||
export BIGCHAINDB_TENDERMINT_PORT=46657
|
||||
```
|
||||
|
||||
**Default values**
|
||||
|
||||
```js
|
||||
"tendermint": {
|
||||
"host": "localhost",
|
||||
"port": 46657,
|
||||
}
|
||||
```
|
||||
|
@ -90,7 +90,7 @@ def test_bigchain_run_init_when_db_exists(mocker, capsys):
|
||||
def test__run_init(mocker):
|
||||
from bigchaindb.commands.bigchaindb import _run_init
|
||||
bigchain_mock = mocker.patch(
|
||||
'bigchaindb.commands.bigchaindb.bigchaindb.Bigchain')
|
||||
'bigchaindb.commands.bigchaindb.bigchaindb.tendermint.lib.BigchainDB')
|
||||
init_db_mock = mocker.patch(
|
||||
'bigchaindb.commands.bigchaindb.schema.init_database',
|
||||
autospec=True,
|
||||
|
@ -107,6 +107,10 @@ def _configure_bigchaindb(request):
|
||||
|
||||
config = {
|
||||
'database': bigchaindb._database_map[backend],
|
||||
'tendermint': {
|
||||
'host': 'localhost',
|
||||
'port': 46657,
|
||||
}
|
||||
}
|
||||
config['database']['name'] = test_db_name
|
||||
config = config_utils.env_config(config)
|
||||
|
Loading…
x
Reference in New Issue
Block a user