bigchaindb/bigchaindb/processes.py

83 lines
2.2 KiB
Python

import logging
import multiprocessing as mp
import rethinkdb as r
from bigchaindb import Bigchain
from bigchaindb.voter import Voter
from bigchaindb.block import Block
logger = logging.getLogger(__name__)
class Processes(object):
def __init__(self):
# initialize the class
self.q_new_block = mp.Queue()
self.q_new_transaction = mp.Queue()
def map_backlog(self):
# listen to changes on the backlog and redirect the changes
# to the correct queues
# create a bigchain instance
b = Bigchain()
for change in r.table('backlog').changes().run(b.conn):
# insert
if change['old_val'] is None:
self.q_new_transaction.put(change['new_val'])
# delete
if change['new_val'] is None:
pass
# update
if change['new_val'] is not None and change['old_val'] is not None:
pass
def map_bigchain(self):
# listen to changes on the bigchain and redirect the changes
# to the correct queues
# create a bigchain instance
b = Bigchain()
for change in r.table('bigchain').changes().run(b.conn):
# insert
if change['old_val'] is None:
self.q_new_block.put(change['new_val'])
# delete
elif change['new_val'] is None:
pass
# update
elif change['new_val'] is not None and change['old_val'] is not None:
pass
def start(self):
# instantiate block and voter
block = Block(self.q_new_transaction)
# initialize the processes
p_map_bigchain = mp.Process(name='bigchain_mapper', target=self.map_bigchain)
p_map_backlog = mp.Process(name='backlog_mapper', target=self.map_backlog)
p_block = mp.Process(name='block', target=block.start)
p_voter = Voter(self.q_new_block)
# start the processes
logger.info('starting bigchain mapper')
p_map_bigchain.start()
logger.info('starting backlog mapper')
p_map_backlog.start()
logger.info('starting block')
p_block.start()
logger.info('starting voter')
p_voter.start()