Files
ternfs-XTXMarkets/python/pyeggsfs.py
Francesco Mazzoli 276f9409c7 Kill rust
2022-10-04 15:06:00 +00:00

60 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
from multiprocessing import Process
import argparse
import sys
from typing import List
import os
from pathlib import Path
import logging.config
import time
import os
import signal
import shard
import shuckle
import block_service
import cdc
class Daemon(Process):
def __init__(self, parent, *args, **kwargs):
super().__init__(daemon=True, *args, **kwargs)
self._parent = parent
def run(self):
try:
Process.run(self)
except Exception as err:
os.kill(self._parent, signal.SIGINT)
raise err
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Runs every component of EggsFS')
parser.add_argument('path', help='Location to store DBs and blocks')
parser.add_argument('--block_services', help='Number of block services', type=int, default=10)
parser.add_argument('-v', '--verbose', action='store_true')
config = parser.parse_args(sys.argv[1:])
logging.config.dictConfig({
'version': 1,
'loggers': {
'quart.app': {'level': 'WARNING'},
'quart.serving': {'level': 'WARNING'},
'root': {'level': 'DEBUG' if config.verbose else 'WARNING'},
},
})
parent = os.getpid()
funs: List[Daemon] = []
for i in range(config.block_services):
bs_path = Path(config.path) / f'bs_{i}'
bs_path.mkdir(exist_ok=True)
funs.append(Daemon(parent, target=block_service.main, kwargs={'path': str(bs_path), 'port': 40000+i, 'storage_class': 2}))
funs.append(Daemon(parent, target=cdc.main, args=(config.path,)))
for i in range(256):
funs.append(Daemon(parent, target=shard.main, kwargs={'db_dir': config.path, 'shard': i, 'wait_for_shuckle': True}))
for fun in funs:
fun.start()
shuckle.main(config.path)