Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Fix synctl and duplicate worker spawning (#8798)
Browse files Browse the repository at this point in the history
Synctl did not check if a worker thread was already running when using
`synctl start` and would naively start a fresh copy. This would
sometimes lead to cases where many duplicate copies of a single worker
would run.

This fix adds a pid check when starting worker threads and synctl will
now refuse to start individual workers if they're already running.
  • Loading branch information
waylon531 authored Nov 23, 2020
1 parent 59a995f commit 7127855
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/8798.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a bug where synctl could spawn duplicate copies of a worker. Contributed by Waylon Cude.
7 changes: 7 additions & 0 deletions synctl
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,13 @@ def main():
for worker in workers:
env = os.environ.copy()

# Skip starting a worker if its already running
if os.path.exists(worker.pidfile) and pid_running(
int(open(worker.pidfile).read())
):
print(worker.app + " already running")
continue

if worker.cache_factor:
os.environ["SYNAPSE_CACHE_FACTOR"] = str(worker.cache_factor)

Expand Down

0 comments on commit 7127855

Please sign in to comment.