Source code for raftnode.raftnode

"""Main module."""
from threading import Thread
from queue import Queue
import socket
from raftnode import logger
from raftnode.election import Election
from raftnode.store import Store
from raftnode.transport import Transport


[docs]class RaftNode(Transport): def __init__(self, my_ip: str, peers: list, timeout: int, **kwargs): self.q = Queue() self.__store = Store(**kwargs) self.__transport = Transport(my_ip, timeout=timeout, queue=self.q) self.__election = Election( transport=self.__transport, store=self.__store, queue=self.q) self.q.put({'election': self.__election}) self.__peers = peers
[docs] def run(self): ''' start the server, add peers and election timer ''' try: logger.info('starting transport') self.start_transport() logger.info('adding peers') self.start_adding_peers(peers=self.__peers) logger.info('initializing timeout') except Exception as e: self.__transport.server.shutdown(socket.SHUT_RDWR) self.__transport.server.close()
# self.start_timeout()
[docs] def start_transport(self): ''' start the socket server for this node ''' Thread(target=self.__transport.serve).start()
[docs] def start_adding_peers(self, peers): ''' if peers are specified at the runtime, add them to the list of peers ''' if peers: for peer in peers: Thread(target=self.__transport.req_add_peer, args=(peer,)).start()
[docs] def start_timeout(self): ''' start the election timer ''' self.__election.init_timeout()