memgraph/tests/distributed/master.py
Teon Banek 8d934ed801 Remove raft from the codebase
Summary:
The raft implementation has been stale for a while now. It doesn't
compile, nor uses Cap'n Proto for serialization. In the future we would
probably rewrite it, so it doesn't need to be part of the repo at this
moment.

Reviewers: mferencevic, mtomic, buda

Reviewed By: mferencevic

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D1513
2018-07-30 14:14:10 +02:00

82 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import atexit
import importlib
import logging
import os
import signal
import subprocess
import time
import xmlrpc.client
# workaround for xmlrpc max/min integer size
xmlrpc.client.MAXINT = 2**100
xmlrpc.client.MININT = -2**100
from argparse import ArgumentParser
from jail_service import JailService
def parse_args():
"""
Parse command line arguments
"""
argp = ArgumentParser(description=__doc__)
argp.add_argument("--test-suite", default="card_fraud",
help="Tests suite")
argp.add_argument("--test", default="example_test",
help="Test specification in python module")
argp.add_argument("--machines-num", default="4",
help="Number of machines in cluster")
return argp.parse_args()
def wait_for_server(interface, port, delay=0.1):
cmd = ["nc", "-z", "-w", "1", interface, port]
while subprocess.call(cmd) != 0:
time.sleep(0.01)
time.sleep(delay)
def main(args):
workers = {}
machine_ids = []
machines_num = int(args.machines_num)
# initialize workers
for i in range(machines_num):
id = i + 1
machine_id = "MACHINE{id}".format(id=id)
machine_ids.append(machine_id)
machine_interface = os.environ[machine_id]
machine_port = 8000 + id * 100
if (id == 1):
worker = JailService()
else:
host = "http://{interface}:{port}".format(
interface=machine_interface,
port=str(machine_port))
worker = xmlrpc.client.ServerProxy(host)
wait_for_server(machine_interface, str(machine_port))
workers[machine_id] = worker
# cleanup at exit
@atexit.register
def cleanup():
for machine_id in machine_ids[1:]:
try:
workers[machine_id].shutdown()
except ConnectionRefusedError:
pass
# run test
test = importlib.import_module(
"{suite}.{test}".format(suite=args.test_suite, test=args.test))
test.run(machine_ids, workers)
if __name__ == "__main__":
args = parse_args()
main(args)