diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2022-09-14 18:01:44 +0200 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2022-09-14 18:01:44 +0200 |
commit | c77d8dcfa7333b32e07df7326b8943838f34a59b (patch) | |
tree | 7ef87c7597e9f6d3da345d407cad2f1eb3908149 /scenarios/fragments/minio.py | |
parent | e3409ce6b751fa92a98000ca4a2225b2ed10fdee (diff) | |
download | mknet-c77d8dcfa7333b32e07df7326b8943838f34a59b.tar.gz mknet-c77d8dcfa7333b32e07df7326b8943838f34a59b.zip |
Working s3lat with Garage
Diffstat (limited to 'scenarios/fragments/minio.py')
-rw-r--r-- | scenarios/fragments/minio.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/scenarios/fragments/minio.py b/scenarios/fragments/minio.py new file mode 100644 index 0000000..431b983 --- /dev/null +++ b/scenarios/fragments/minio.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +import json, os, sys, time, pathlib, socket, shutil + +STORAGE_PATH = os.path.join(os.getcwd(), '.minio-testnet') +HOSTS_PATH = os.path.join(STORAGE_PATH, 'hosts.txt') +UNIX_SOCK = os.path.join(STORAGE_PATH, 'deploy.sock') +DATA_PATH = lambda nid: os.path.join(STORAGE_PATH, 'data'+str(nid)) + +def main(): + if int(os.environ['ID']) == 1: leader() + else: follower() + +def leader(): + shutil.rmtree(STORAGE_PATH, ignore_errors=True) + os.makedirs(STORAGE_PATH) + print(STORAGE_PATH) + + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.bind(UNIX_SOCK) + sock.listen() + + n_serv = int(os.environ['SERVER_COUNT']) + fl = [ co for co, addr in [ sock.accept() for i in range(n_serv - 1) ]] + + identities = [ json.loads(co.makefile().readline()) for co in fl ] + [ { "ip": os.environ['IP'], "path": make_data() } ] + print(f"ident: {identities}") + msg = f"{json.dumps(identities)}\n".encode() + [ co.send(msg) for co in fl ] + + run_minio(identities) + +def follower(): + co = None + while True: + time.sleep(1) + try: + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(UNIX_SOCK) + co = sock.makefile() + break + except Exception as err: + print('conn failed, wait,', err) + my_identity = json.dumps({ "ip": os.environ['IP'], "path": make_data() }) + sock.send(f"{my_identity}\n".encode()) + identities = json.loads(co.readline()) + + run_minio(identities) + +def make_data(): + data_path = DATA_PATH(os.environ['ID']) + os.makedirs(data_path) + return data_path + +def run_minio(identities): + cmd = f"minio server --console-address ':9001' --address ':9000'" + for ident in identities: + cmd += f" http://[{ident['ip']}]:9000{ident['path']}" + cmd += f" > {os.path.join(STORAGE_PATH, 'minio'+os.environ['ID']+'.log')} 2>&1" + print("launch: ", cmd) + os.system(cmd) + +__name__ == '__main__' and main() |