mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Fixed mongodb queries to work with pipelines.
Added some logging to the pipeline processes
This commit is contained in:
parent
0fdcff90f9
commit
3529bf9114
@ -39,7 +39,9 @@ class MongoDBChangeFeed(ChangeFeed):
|
||||
self.connection._connect()
|
||||
# namespace to allow us to only listen to changes in a single
|
||||
# collection
|
||||
namespace = '{}.{}'.format(self.connection.dbname, self.table)
|
||||
dbname = self.connection.dbname
|
||||
table = self.table
|
||||
namespace = '{}.{}'.format(dbname, table)
|
||||
# last timestamp in the oplog. We only care for operations happening
|
||||
# in the future.
|
||||
last_ts = self.connection.conn.local.oplog.rs.find()\
|
||||
@ -70,9 +72,13 @@ class MongoDBChangeFeed(ChangeFeed):
|
||||
# on delete it only returns the id of the document
|
||||
self.outqueue.put(record['o'])
|
||||
elif is_update and (self.operation & ChangeFeed.UPDATE):
|
||||
# not sure what to do here. Lets return the entire
|
||||
# operation
|
||||
self.outqueue.put(record)
|
||||
# the oplog entry for updates only returns the update
|
||||
# operations to apply to the document and not the
|
||||
# document itself. So here we first read the document
|
||||
# and then return it
|
||||
doc = self.connection.conn[dbname][table]\
|
||||
.find_one(record['o2'])
|
||||
self.outqueue.put(doc)
|
||||
|
||||
|
||||
@register_changefeed(MongoDBConnection)
|
||||
|
@ -20,9 +20,14 @@ def write_transaction(conn, signed_transaction):
|
||||
|
||||
@register_query(MongoDBConnection)
|
||||
def update_transaction(conn, transaction_id, doc):
|
||||
# with mongodb we need to add update operators to the doc
|
||||
update_doc = {'$set': {
|
||||
'assignee': doc['assignee'],
|
||||
'assignment_timestamp': doc['assignment_timestamp']
|
||||
}}
|
||||
return conn.db['backlog']\
|
||||
.find_one_and_update({'id': transaction_id},
|
||||
doc,
|
||||
update_doc,
|
||||
return_document=ReturnDocument.AFTER)
|
||||
|
||||
|
||||
|
@ -44,6 +44,8 @@ class BlockPipeline:
|
||||
if tx['assignee'] == self.bigchain.me:
|
||||
tx.pop('assignee')
|
||||
tx.pop('assignment_timestamp')
|
||||
# required for mongodb
|
||||
tx.pop('_id', None)
|
||||
return tx
|
||||
|
||||
def validate_tx(self, tx):
|
||||
|
@ -48,6 +48,8 @@ class StaleTransactionMonitor:
|
||||
Returns:
|
||||
transaction
|
||||
"""
|
||||
# NOTE: Maybe this is to verbose?
|
||||
logger.info('Reassigning transaction with id %s', tx['id'])
|
||||
self.bigchain.reassign_transaction(tx)
|
||||
return tx
|
||||
|
||||
|
@ -5,10 +5,10 @@ of actions to do on transactions is specified in the ``create_pipeline``
|
||||
function.
|
||||
"""
|
||||
|
||||
import logging
|
||||
from collections import Counter
|
||||
|
||||
from multipipes import Pipeline, Node
|
||||
from bigchaindb.common import exceptions
|
||||
|
||||
import bigchaindb
|
||||
from bigchaindb import Bigchain
|
||||
@ -16,6 +16,10 @@ from bigchaindb import backend
|
||||
from bigchaindb.backend.changefeed import ChangeFeed
|
||||
from bigchaindb.consensus import BaseConsensusRules
|
||||
from bigchaindb.models import Transaction, Block
|
||||
from bigchaindb.common import exceptions
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Vote:
|
||||
@ -132,7 +136,9 @@ class Vote:
|
||||
Args:
|
||||
vote: the vote to write.
|
||||
"""
|
||||
|
||||
validity = 'valid' if vote['vote']['is_block_valid'] else 'invalid'
|
||||
logger.info("Voting '%s' for block %s", validity,
|
||||
vote['vote']['voting_for_block'])
|
||||
self.bigchain.write_vote(vote)
|
||||
return vote
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user