Don't hold lock on error

This commit is contained in:
Donal McBreen
2024-04-03 12:45:11 +01:00
parent d2a719998a
commit 64f5955444
4 changed files with 24 additions and 42 deletions

View File

@@ -2,7 +2,6 @@ class Kamal::Cli::App < Kamal::Cli::Base
desc "boot", "Boot app on servers (or reboot app if already running)" desc "boot", "Boot app on servers (or reboot app if already running)"
def boot def boot
mutating do mutating do
hold_lock_on_error do
say "Get most recent version available as an image...", :magenta unless options[:version] say "Get most recent version available as an image...", :magenta unless options[:version]
using_version(version_or_latest) do |version| using_version(version_or_latest) do |version|
say "Start container with version #{version} using a #{KAMAL.config.readiness_delay}s readiness delay (or reboot if already running)...", :magenta say "Start container with version #{version} using a #{KAMAL.config.readiness_delay}s readiness delay (or reboot if already running)...", :magenta
@@ -14,7 +13,7 @@ class Kamal::Cli::App < Kamal::Cli::Base
end end
end end
#  Primary hosts and roles are returned first, so they can open the barrier # Primary hosts and roles are returned first, so they can open the barrier
barrier = Kamal::Cli::Healthcheck::Barrier.new if KAMAL.roles.many? barrier = Kamal::Cli::Healthcheck::Barrier.new if KAMAL.roles.many?
on(KAMAL.hosts, **KAMAL.boot_strategy) do |host| on(KAMAL.hosts, **KAMAL.boot_strategy) do |host|
@@ -23,7 +22,7 @@ class Kamal::Cli::App < Kamal::Cli::Base
end end
end end
#  Tag once the app booted on all hosts # Tag once the app booted on all hosts
on(KAMAL.hosts) do |host| on(KAMAL.hosts) do |host|
execute *KAMAL.auditor.record("Tagging #{KAMAL.config.absolute_image} as the latest image"), verbosity: :debug execute *KAMAL.auditor.record("Tagging #{KAMAL.config.absolute_image} as the latest image"), verbosity: :debug
execute *KAMAL.app.tag_latest_image execute *KAMAL.app.tag_latest_image
@@ -31,7 +30,6 @@ class Kamal::Cli::App < Kamal::Cli::Base
end end
end end
end end
end
desc "start", "Start existing app container on servers" desc "start", "Start existing app container on servers"
def start def start

View File

@@ -91,12 +91,11 @@ module Kamal::Cli
begin begin
yield yield
rescue rescue
if KAMAL.hold_lock_on_error? begin
error " \e[31mDeploy lock was not released\e[0m"
else
release_lock release_lock
rescue => e
say "Error releasing the deploy lock: #{e.message}", :red
end end
raise raise
end end
@@ -141,16 +140,6 @@ module Kamal::Cli
end end
end end
def hold_lock_on_error
if KAMAL.hold_lock_on_error?
yield
else
KAMAL.hold_lock_on_error = true
yield
KAMAL.hold_lock_on_error = false
end
end
def run_hook(hook, **extra_details) def run_hook(hook, **extra_details)
if !options[:skip_hooks] && KAMAL.hook.hook_exists?(hook) if !options[:skip_hooks] && KAMAL.hook.hook_exists?(hook)
details = { hosts: KAMAL.hosts.join(","), command: command, subcommand: subcommand } details = { hosts: KAMAL.hosts.join(","), command: command, subcommand: subcommand }

View File

@@ -2,13 +2,12 @@ require "active_support/core_ext/enumerable"
require "active_support/core_ext/module/delegation" require "active_support/core_ext/module/delegation"
class Kamal::Commander class Kamal::Commander
attr_accessor :verbosity, :holding_lock, :hold_lock_on_error attr_accessor :verbosity, :holding_lock
delegate :hosts, :roles, :primary_host, :primary_role, :roles_on, :traefik_hosts, :accessory_hosts, to: :specifics delegate :hosts, :roles, :primary_host, :primary_role, :roles_on, :traefik_hosts, :accessory_hosts, to: :specifics
def initialize def initialize
self.verbosity = :info self.verbosity = :info
self.holding_lock = false self.holding_lock = false
self.hold_lock_on_error = false
@specifics = nil @specifics = nil
end end
@@ -138,10 +137,6 @@ class Kamal::Commander
self.holding_lock self.holding_lock
end end
def hold_lock_on_error?
self.hold_lock_on_error
end
private private
# Lazy setup of SSHKit # Lazy setup of SSHKit
def configure_sshkit_with(config) def configure_sshkit_with(config)

View File

@@ -54,14 +54,14 @@ class CliAppTest < CliTestCase
run_command("boot", config: :with_boot_strategy) run_command("boot", config: :with_boot_strategy)
end end
test "boot errors leave lock in place" do test "boot errors don't leave lock in place" do
Kamal::Cli::App.any_instance.expects(:using_version).raises(RuntimeError) Kamal::Cli::App.any_instance.expects(:using_version).raises(RuntimeError)
assert_not KAMAL.holding_lock? assert_not KAMAL.holding_lock?
assert_raises(RuntimeError) do assert_raises(RuntimeError) do
stderred { run_command("boot") } stderred { run_command("boot") }
end end
assert KAMAL.holding_lock? assert_not KAMAL.holding_lock?
end end
test "boot with assets" do test "boot with assets" do