def main(): # Arguments can be either of: # -p primary server, at tcp://localhost:5001 # -b backup server, at tcp://localhost:5002 if '-p' in sys.argv: star = BinaryStar(True, "tcp://*:5003", "tcp://localhost:5004") star.register_voter("tcp://*:5001", zmq.ROUTER, echo) elif '-b' in sys.argv: star = BinaryStar(False, "tcp://*:5004", "tcp://localhost:5003") star.register_voter("tcp://*:5002", zmq.ROUTER, echo) else: print("Usage: bstarsrv2.py { -p | -b }\n") return star.start()
def main(): parser = ArgumentParser() group = parser.add_mutually_exclusive_group() group.add_argument("-p", "--primary", action="store_true", default=False) group.add_argument("-b", "--backup", action="store_true", default=False) parser.add_argument("-v", "--verbose", action="store_true", default=False) args = parser.parse_args() # Arguments can be either of: # -p primary server, at tcp://localhost:5001 # -b backup server, at tcp://localhost:5002 if args.primary: star = BinaryStar(True, "tcp://*:5003", "tcp://localhost:5004") star.register_voter("tcp://*:5001", zmq.ROUTER, echo) elif args.backup: star = BinaryStar(False, "tcp://*:5004", "tcp://localhost:5003") star.register_voter("tcp://*:5002", zmq.ROUTER, echo) else: print("Provide either -p{rimary} | -b{ackup}") sys.exit(1) star.start()
def __init__(self, primary=True, ports=(5556, 5566)): self.primary = primary if primary: self.port, self.peer = ports frontend = "tcp://*:5003" backend = "tcp://localhost:5004" self.kvmap = {} else: self.peer, self.port = ports frontend = "tcp://*:5004" backend = "tcp://localhost:5003" self.ctx = zmq.Context.instance() self.pending = [] self.bstar = BinaryStar(primary, frontend, backend) self.bstar.register_voter("tcp://*:%i" % self.port, zmq.ROUTER, self.handle_snapshot) # Set up our clone server sockets self.publisher = self.ctx.socket(zmq.PUB) self.collector = self.ctx.socket(zmq.SUB) self.collector.setsockopt(zmq.SUBSCRIBE, b'') self.publisher.bind("tcp://*:%d" % (self.port + 1)) self.collector.bind("tcp://*:%d" % (self.port + 2)) # Set up our own clone client interface to peer self.subscriber = self.ctx.socket(zmq.SUB) self.subscriber.setsockopt(zmq.SUBSCRIBE, b'') self.subscriber.connect("tcp://localhost:%d" % (self.peer + 1)) # Register state change handlers self.bstar.master_callback = self.become_master self.bstar.slave_callback = self.become_slave # Wrap sockets in ZMQStreams for IOLoop handlers self.publisher = ZMQStream(self.publisher) self.subscriber = ZMQStream(self.subscriber) self.collector = ZMQStream(self.collector) # Register our handlers with reactor self.collector.on_recv(self.handle_collect) self.flush_callback = PeriodicCallback(self.flush_ttl, 1000) self.hugz_callback = PeriodicCallback(self.send_hugz, 1000) # basic log formatting: logging.basicConfig(format="%(asctime)s %(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=logging.INFO)