From f739e00fa30f3af678137bd8b27ece24f7963df0 Mon Sep 17 00:00:00 2001 From: Viktor Erlingsson Date: Mon, 16 Dec 2024 15:43:00 +0100 Subject: [PATCH 1/4] exit 5 instead of raising error if no etcd endpoint responds --- src/lavinmq/etcd.cr | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lavinmq/etcd.cr b/src/lavinmq/etcd.cr index 58bd8be050..9fcb81c91a 100644 --- a/src/lavinmq/etcd.cr +++ b/src/lavinmq/etcd.cr @@ -261,7 +261,8 @@ module LavinMQ Log.debug { "Could not connect to #{address}: #{ex}" } next end - raise Error.new("No endpoint responded") + Log.fatal { "No etcd endpoint responded" } + exit 5 # 5th character in the alphabet is E(etcd) end private def update_endpoints(tcp, address) From 9043a69c1dab93b1ea6eafcc234c72f91c262af4 Mon Sep 17 00:00:00 2001 From: Viktor Erlingsson Date: Wed, 18 Dec 2024 09:35:00 +0100 Subject: [PATCH 2/4] Raise on fatal errors instead of exit So that the errors can be caught in specs. In lavinmq.cr is the exit done --- src/lavinmq/etcd.cr | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lavinmq/etcd.cr b/src/lavinmq/etcd.cr index 9fcb81c91a..92aa113121 100644 --- a/src/lavinmq/etcd.cr +++ b/src/lavinmq/etcd.cr @@ -244,6 +244,8 @@ module LavinMQ end end + class NoEtcdEndpoint < Exception; end + private def connect : Tuple(TCPSocket, String) @endpoints.shuffle!.each do |address| host, port = address.split(':', 2) @@ -262,7 +264,7 @@ module LavinMQ next end Log.fatal { "No etcd endpoint responded" } - exit 5 # 5th character in the alphabet is E(etcd) + raise NoEtcdEndpoint.new end private def update_endpoints(tcp, address) From 82dd2438339c23a042021555d3a8c9099b37a949 Mon Sep 17 00:00:00 2001 From: Viktor Erlingsson Date: Tue, 14 Jan 2025 16:34:54 +0100 Subject: [PATCH 3/4] Revert "Raise on fatal errors instead of exit" This reverts commit 4911532565d3cfcff26deee07dd98525fd71e66e. --- src/lavinmq/etcd.cr | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/lavinmq/etcd.cr b/src/lavinmq/etcd.cr index 92aa113121..9fcb81c91a 100644 --- a/src/lavinmq/etcd.cr +++ b/src/lavinmq/etcd.cr @@ -244,8 +244,6 @@ module LavinMQ end end - class NoEtcdEndpoint < Exception; end - private def connect : Tuple(TCPSocket, String) @endpoints.shuffle!.each do |address| host, port = address.split(':', 2) @@ -264,7 +262,7 @@ module LavinMQ next end Log.fatal { "No etcd endpoint responded" } - raise NoEtcdEndpoint.new + exit 5 # 5th character in the alphabet is E(etcd) end private def update_endpoints(tcp, address) From 358485384a81b1aaaa708ecc5740398ab0768c07 Mon Sep 17 00:00:00 2001 From: Viktor Erlingsson Date: Thu, 16 Jan 2025 10:29:21 +0100 Subject: [PATCH 4/4] rescue SpecExit in etcd specs when expecting exits --- spec/etcd_spec.cr | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/etcd_spec.cr b/spec/etcd_spec.cr index 5e2920b09c..ae650d7601 100644 --- a/spec/etcd_spec.cr +++ b/spec/etcd_spec.cr @@ -27,7 +27,7 @@ describe LavinMQ::Etcd do etcd.watch("foo") do |val| w.send val end - rescue LavinMQ::Etcd::Error + rescue SpecExit # expect this when etcd nodes are terminated end w.receive # sync @@ -51,7 +51,7 @@ describe LavinMQ::Etcd do etcd.elect_listen(key) do |value| leader.send value end - rescue LavinMQ::Etcd::Error + rescue SpecExit # expect this when etcd nodes are terminated end lease = etcd.elect(key, "bar", 1) @@ -59,7 +59,7 @@ describe LavinMQ::Etcd do spawn(name: "elect other leader spec") do begin etcd.elect(key, "bar2", 1) - rescue LavinMQ::Etcd::Error + rescue SpecExit # expect this when etcd nodes are terminated end end