changed file naming style consistent with the existing go client code Update example.py Changed file and folder names Rename LeaderElection.py to leaderelection.py Rename threadingWithException.py to threadingwithexception.py Rename ConfigMapLock.py to configmaplock.py LeaderElection to leaderelection Added boiler plate headers, updated variable and function names consistent with the guidelines, removed the ctypes dependency by using traces to kill threads, changed logic for leader now it gives up and doesn't re-join as a follower if it fails to update lease added correct boiler plate year Rename threadingWithTrace.py to threadingwithtrace.py Update leaderelection.py Update example.py Changes based on review - logging, OnStoppedLeading is not killed abruptly, OnStartedLeading is not run in a separate thread, adding README Update example.py updated comments set threads as daemon Update README.md Code made consistent with other clients. Update example.py Update leaderelection.py Error & exception handling for the annotation, reduced indentation Adding serializing functions for serializing & de-serializing locks, leader_election_record as a class Adding a test Adding boilerplate header Rename leaderelectiontest.py to leaderelection_test.py Updated boiler plates handling imports for pytest handling 'HTTP not found' compatibility with python 2 & 3, & handling relative imports Update leaderelection.py to check tests for tox assertEquals -> assertEqual Update leaderelection_test.py making Threading compatible for Python 2 changing datetime.timestamp for backward compatibility with Python 2.7 Adding comments for test_Leader_election_with_renew_deadline & making candidates run in parallel for test_leader_election remove redundant daemon = True reassignment common thread lock for MockResourceLock |
||
|---|---|---|
| .. | ||
| resourcelock | ||
| __init__.py | ||
| electionconfig.py | ||
| example.py | ||
| leaderelection_test.py | ||
| leaderelection.py | ||
| leaderelectionrecord.py | ||
| README.md | ||
Leader Election Example
This example demonstrates how to use the leader election library.
Running
Run the following command in multiple separate terminals preferably an odd number. Each running process uses a unique identifier displayed when it starts to run.
- When a program runs, if a lock object already exists with the specified name, all candidates will start as followers.
- If a lock object does not exist with the specified name then whichever candidate creates a lock object first will become the leader and the rest will be followers.
- The user will be prompted about the status of the candidates and transitions.
Command to run
python example.py
Now kill the existing leader. You will see from the terminal outputs that one of the remaining running processes will be elected as the new leader.