Only use barrier when needed, more descriptive info

This commit is contained in:
Donal McBreen
2024-05-20 12:17:01 +01:00
parent bb2ca81d87
commit ee758d951a
4 changed files with 18 additions and 18 deletions

View File

@@ -15,7 +15,7 @@ class Kamal::Cli::App < Kamal::Cli::Base
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 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|
KAMAL.roles_on(host).each do |role| KAMAL.roles_on(host).each do |role|

View File

@@ -43,8 +43,8 @@ class Kamal::Cli::App::Boot
reach_barrier reach_barrier
rescue => e rescue => e
if barrier_role? && barrier.close if barrier_role? && barrier&.close
info "Deploy failed, so closed barrier (#{host})" info "First #{KAMAL.primary_role} container unhealthy, stopping other roles (#{host})"
error capture_with_info(*app.logs(version: version)) error capture_with_info(*app.logs(version: version))
error capture_with_info(*app.container_health_log(version: version)) error capture_with_info(*app.container_health_log(version: version))
end end
@@ -71,7 +71,7 @@ class Kamal::Cli::App::Boot
if barrier if barrier
if barrier_role? if barrier_role?
if barrier.open if barrier.open
info "Opened barrier (#{host})" info "First #{KAMAL.primary_role} container healthy, continuing other roles (#{host})"
end end
else else
wait_for_barrier wait_for_barrier
@@ -80,11 +80,11 @@ class Kamal::Cli::App::Boot
end end
def wait_for_barrier def wait_for_barrier
info "Waiting at web barrier (#{host})..." info "Waiting for a healthy #{KAMAL.primary_role} container (#{host})..."
barrier.wait barrier.wait
info "Barrier opened (#{host})" info "First #{KAMAL.primary_role} container is healthy, continuing (#{host})"
rescue Kamal::Cli::Healthcheck::Error rescue Kamal::Cli::Healthcheck::Error
info "Barrier closed, shutting down new container (#{host})..." info "First #{KAMAL.primary_role} container is unhealthy, stopping (#{host})"
raise raise
end end

View File

@@ -136,10 +136,10 @@ class CliAppTest < CliTestCase
.returns("running").at_least_once # workers health check .returns("running").at_least_once # workers health check
run_command("boot", config: :with_roles, host: nil).tap do |output| run_command("boot", config: :with_roles, host: nil).tap do |output|
assert_match "Waiting at web barrier (1.1.1.3)...", output assert_match "Waiting for a healthy web container (1.1.1.3)...", output
assert_match "Waiting at web barrier (1.1.1.4)...", output assert_match "Waiting for a healthy web container (1.1.1.4)...", output
assert_match "Barrier opened (1.1.1.3)", output assert_match "First web container is healthy, continuing (1.1.1.3)", output
assert_match "Barrier opened (1.1.1.4)", output assert_match "First web container is healthy, continuing (1.1.1.4)", output
end end
end end
@@ -160,10 +160,10 @@ class CliAppTest < CliTestCase
stderred do stderred do
run_command("boot", config: :with_roles, host: nil, allow_execute_error: true).tap do |output| run_command("boot", config: :with_roles, host: nil, allow_execute_error: true).tap do |output|
assert_match "Waiting at web barrier (1.1.1.3)...", output assert_match "Waiting for a healthy web container (1.1.1.3)...", output
assert_match "Waiting at web barrier (1.1.1.4)...", output assert_match "Waiting for a healthy web container (1.1.1.4)...", output
assert_match "Barrier closed, shutting down new container (1.1.1.3)...", output assert_match "First web container is unhealthy, stopping (1.1.1.3)", output
assert_match "Barrier closed, shutting down new container (1.1.1.4)...", output assert_match "First web container is unhealthy, stopping (1.1.1.4)", output
assert_match "Running docker container ls --all --filter name=^app-web-latest$ --quiet | xargs docker stop on 1.1.1.1", output assert_match "Running docker container ls --all --filter name=^app-web-latest$ --quiet | xargs docker stop on 1.1.1.1", output
assert_match "Running docker container ls --all --filter name=^app-web-latest$ --quiet | xargs docker stop on 1.1.1.2", output assert_match "Running docker container ls --all --filter name=^app-web-latest$ --quiet | xargs docker stop on 1.1.1.2", output
assert_match "Running docker container ls --all --filter name=^app-workers-latest$ --quiet | xargs docker stop on 1.1.1.3", output assert_match "Running docker container ls --all --filter name=^app-workers-latest$ --quiet | xargs docker stop on 1.1.1.3", output

View File

@@ -25,9 +25,9 @@ class BrokenDeployTest < IntegrationTest
private private
def assert_failed_deploy(output) def assert_failed_deploy(output)
assert_match "Waiting at web barrier (vm3)...", output assert_match "Waiting for a healthy web container (vm3)...", output
assert_match /Deploy failed, so closed barrier \(vm[12]\)/, output assert_match /First #{KAMAL.primary_role} container is unhealthy, stopping \(vm[12]\)/, output
assert_match "Barrier closed, shutting down new container (vm3)...", output assert_match "First #{KAMAL.primary_role} container unhealthy, stopping other roles (vm3)...", output
assert_match "nginx: [emerg] unexpected end of file, expecting \";\" or \"}\" in /etc/nginx/conf.d/default.conf:2", output assert_match "nginx: [emerg] unexpected end of file, expecting \";\" or \"}\" in /etc/nginx/conf.d/default.conf:2", output
assert_match 'ERROR {"Status":"unhealthy","FailingStreak":0,"Log":[]}', output assert_match 'ERROR {"Status":"unhealthy","FailingStreak":0,"Log":[]}', output
end end