From b1beb2fcc6b02477cd6d0cfe82d6508fc87384e7 Mon Sep 17 00:00:00 2001 From: ludamad Date: Tue, 16 Apr 2024 18:49:34 +0000 Subject: [PATCH] race condition fix --- dist/index.js | 8 ++++++-- src/ec2/userdata.ts | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 549c1b6..abff8f4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -732,11 +732,15 @@ class UserData { `echo "${bumpShutdown}; touch /run/shutdown-refcount/start_run_\\$(date +%s)_\\$RANDOM" > /run/delay_shutdown.sh`, `echo "[ \\$(find /run/shutdown-refcount/ -name 'start_run_*' | wc -l) -eq \\$(find /run/shutdown-refcount/ -name 'end_run_*' | wc -l) ] && shutdown -P 5 ; true" > /run/if_refcount0_shutdown.sh`, `echo "${bumpShutdown}; touch /run/shutdown-refcount/end_run_\\$(date +%s)_\\$RANDOM ; /run/if_refcount0_shutdown.sh " > /run/refcount_and_delay_shutdown.sh`, + `echo "flock /run/refcount-lock /run/delay_shutdown.sh" > /run/safe_delay_shutdown.sh`, + `echo "flock /run/refcount-lock /run/refcount_and_delay_shutdown.sh" > /run/safe_refcount_and_delay_shutdown.sh`, "chmod +x /run/delay_shutdown.sh", "chmod +x /run/refcount_and_delay_shutdown.sh", "chmod +x /run/if_refcount0_shutdown.sh", - "export ACTIONS_RUNNER_HOOK_JOB_STARTED=/run/delay_shutdown.sh", - "export ACTIONS_RUNNER_HOOK_JOB_COMPLETED=/run/refcount_and_delay_shutdown.sh", + "chmod +x /run/safe_refcount_and_delay_shutdown.sh", + "chmod +x /run/safe_if_refcount0_shutdown.sh", + "export ACTIONS_RUNNER_HOOK_JOB_STARTED=/run/safe_delay_shutdown.sh", + "export ACTIONS_RUNNER_HOOK_JOB_COMPLETED=/run/safe_refcount_and_delay_shutdown.sh", "mkdir -p actions-runner && cd actions-runner", 'echo "ACTIONS_RUNNER_HOOK_JOB_STARTED=/run/delay_shutdown.sh" > .env', 'echo "ACTIONS_RUNNER_HOOK_JOB_COMPLETED=/run/refcount_and_delay_shutdown.sh" > .env', diff --git a/src/ec2/userdata.ts b/src/ec2/userdata.ts index c01614d..8a4b9b2 100644 --- a/src/ec2/userdata.ts +++ b/src/ec2/userdata.ts @@ -37,11 +37,15 @@ export class UserData { `echo "${bumpShutdown}; touch /run/shutdown-refcount/start_run_\\$(date +%s)_\\$RANDOM" > /run/delay_shutdown.sh`, `echo "[ \\$(find /run/shutdown-refcount/ -name 'start_run_*' | wc -l) -eq \\$(find /run/shutdown-refcount/ -name 'end_run_*' | wc -l) ] && shutdown -P 5 ; true" > /run/if_refcount0_shutdown.sh`, `echo "${bumpShutdown}; touch /run/shutdown-refcount/end_run_\\$(date +%s)_\\$RANDOM ; /run/if_refcount0_shutdown.sh " > /run/refcount_and_delay_shutdown.sh`, + `echo "flock /run/refcount-lock /run/delay_shutdown.sh" > /run/safe_delay_shutdown.sh`, + `echo "flock /run/refcount-lock /run/refcount_and_delay_shutdown.sh" > /run/safe_refcount_and_delay_shutdown.sh`, "chmod +x /run/delay_shutdown.sh", "chmod +x /run/refcount_and_delay_shutdown.sh", "chmod +x /run/if_refcount0_shutdown.sh", - "export ACTIONS_RUNNER_HOOK_JOB_STARTED=/run/delay_shutdown.sh", - "export ACTIONS_RUNNER_HOOK_JOB_COMPLETED=/run/refcount_and_delay_shutdown.sh", + "chmod +x /run/safe_refcount_and_delay_shutdown.sh", + "chmod +x /run/safe_if_refcount0_shutdown.sh", + "export ACTIONS_RUNNER_HOOK_JOB_STARTED=/run/safe_delay_shutdown.sh", + "export ACTIONS_RUNNER_HOOK_JOB_COMPLETED=/run/safe_refcount_and_delay_shutdown.sh", "mkdir -p actions-runner && cd actions-runner", 'echo "ACTIONS_RUNNER_HOOK_JOB_STARTED=/run/delay_shutdown.sh" > .env', 'echo "ACTIONS_RUNNER_HOOK_JOB_COMPLETED=/run/refcount_and_delay_shutdown.sh" > .env',