From 07a236a2c32f1c984432f2edfcfdd15d896bedcb Mon Sep 17 00:00:00 2001 From: Mark Linvill <36269251+mlinvill@users.noreply.github.com> Date: Tue, 25 Jul 2023 09:21:50 -0400 Subject: [PATCH] Tweak timeouts. Add dot.env.example .env file. --- demo.sh | 5 +++-- distributed/lock.py | 8 ++++---- dot.env.example | 5 +++++ main.py | 16 +++++++++++++--- requirements.txt | 1 + setup.py | 1 + 6 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 dot.env.example diff --git a/demo.sh b/demo.sh index 2be5c94..776575b 100755 --- a/demo.sh +++ b/demo.sh @@ -25,8 +25,9 @@ HOSTC="${MYIP}:8102" HOSTD="${MYIP}:8103" -echo "Starting HOSTURI=${HOSTA} PEERA_URI=${HOSTB} PEERB_URI=${HOSTC} PEERC_URI=${HOSTD} ./main.py" -( HOSTURI="${HOSTA}" PEERA_URI="${HOSTB}" PEERB_URI="${HOSTC}" PEERC_URI="${HOSTD}" ./main.py ) & hosta_pid=$! +# This should be the default .env case. Let's test that. +echo "Starting ./main.py with default .env" +( ./main.py ) & hosta_pid=$! echo "Starting HOSTURI=${HOSTB} PEERA_URI=${HOSTA} PEERB_URI=${HOSTC} PEERC_URI=${HOSTD} ./main.py" ( HOSTURI="${HOSTB}" PEERA_URI="${HOSTA}" PEERB_URI="${HOSTC}" PEERC_URI="${HOSTD}" ./main.py ) & hostb_pid=$! diff --git a/distributed/lock.py b/distributed/lock.py index 56e7985..92ad548 100644 --- a/distributed/lock.py +++ b/distributed/lock.py @@ -47,7 +47,7 @@ class DistributedLock: """ def __init__(self, mynode: str, peerlist: List, leader: Value): - self.autounlocktime = 35 + self.autounlocktime = 25 self.peers = peerlist or [] self.lockmanager = None self.syncobj = None @@ -74,14 +74,14 @@ def run(self): while True: try: if self.lockmanager.tryAcquire( - "coincidenceLock", sync=True, timeout=randint(40, 60) + "coincidenceLock", sync=True, timeout=randint(30, 60) ): # we have the write lock self.setleaderstate(True) - sleep(14) + sleep(10) else: self.setleaderstate(False) - sleep(randint(1, 5)) + sleep(randint(1, 15)) except Exception as errmsg: print(f"Exception! {errmsg}") diff --git a/dot.env.example b/dot.env.example new file mode 100644 index 0000000..697960f --- /dev/null +++ b/dot.env.example @@ -0,0 +1,5 @@ +HOSTURI="127.0.0.1:8100" + +PEERA_URI="127.0.0.1:8101" +PEERB_URI="127.0.0.1:8102" +PEERC_URI="127.0.0.1:8103" diff --git a/main.py b/main.py index c14946f..23e5c11 100755 --- a/main.py +++ b/main.py @@ -8,6 +8,7 @@ import os import sys from dotenv import load_dotenv +import click from typing import List from time import sleep @@ -30,14 +31,19 @@ def runlock(mynode: str, peerlist: List, leader_state: Value): distributedlock.run() -if __name__ == "__main__": +@click.group(invoke_without_command=True) +@click.option('--env', type=str, default='.env', + show_default='.env', help='environment file containing the host/peer configuration') +@click.pass_context +def main(ctx, env): mp.set_start_method("spawn") MYHOSTURI = False peers = [] console = Console() - load_dotenv() + envf = env or '.env' + load_dotenv(envf) if "HOSTURI" in os.environ: MYHOSTURI = os.environ["HOSTURI"] @@ -50,7 +56,7 @@ def runlock(mynode: str, peerlist: List, leader_state: Value): assert MYHOSTURI is not False - assert len(peers) != 0 + assert len(peers) > 0 console.log(f"I am {MYHOSTURI}") console.log(f"peers are {peers}") @@ -75,3 +81,7 @@ def runlock(mynode: str, peerlist: List, leader_state: Value): finally: p.join() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 33c82b6..42be115 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +click python-dotenv rich pysyncobj diff --git a/setup.py b/setup.py index 33801cf..f7f81da 100644 --- a/setup.py +++ b/setup.py @@ -12,6 +12,7 @@ license='MIT', packages=['distributedlock'], install_requires=[ + 'click', 'python-dotenv', 'pysyncobj', 'rich',