From 671dd2f6bc4518743a06e1bfae01ef82f6944850 Mon Sep 17 00:00:00 2001 From: John Bell Date: Tue, 31 May 2022 19:14:15 +0000 Subject: [PATCH] fix: Avoid crash when mojito connect is closed for the metrics client --- .gitmodules | 2 +- lib/unleash/client.ex | 11 ++++++++--- lib/unleash/metrics.ex | 5 +++++ lib/unleash/strategy/flexible_rollout.ex | 2 +- test/support/mojito.ex | 4 ++-- test/unleash/metrics_test.exs | 4 ++-- test/unleash_test.exs | 4 ++-- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7bed823..fb7f177 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "priv/client-specification"] path = priv/client-specification - url = git://github.com/unleash/client-specification + url = https://github.com/unleash/client-specification branch = master diff --git a/lib/unleash/client.ex b/lib/unleash/client.ex index eca2f15..4a53237 100644 --- a/lib/unleash/client.ex +++ b/lib/unleash/client.ex @@ -58,12 +58,17 @@ defmodule Unleash.Client do defp handle_feature_response(mojito) do case mojito do - %Mojito.Response{status_code: 304} -> :cached - %Mojito.Response{status_code: 200} -> pull_out_data(mojito) + %Mojito.Response{status_code: 304} -> + :cached + + %Mojito.Response{status_code: 200} -> + pull_out_data(mojito) + resp = %Mojito.Response{status_code: _status} -> Logger.warn(fn -> - "Unexpected response #{inspect resp}. Using cached features" + "Unexpected response #{inspect(resp)}. Using cached features" end) + :cached end end diff --git a/lib/unleash/metrics.ex b/lib/unleash/metrics.ex index bd08ac3..b6f02cb 100644 --- a/lib/unleash/metrics.ex +++ b/lib/unleash/metrics.ex @@ -57,6 +57,11 @@ defmodule Unleash.Metrics do {:noreply, send_metrics(state)} end + def handle_info({:mojito_response, _ref, message}, state) do + Logger.warning("Unexpected response from Mojito #{inspect(message, pretty: true)}") + {:noreply, send_metrics(state)} + end + if Config.test?() do def handle_call(:send_metrics, _from, state) do {:reply, :ok, send_metrics(state)} diff --git a/lib/unleash/strategy/flexible_rollout.ex b/lib/unleash/strategy/flexible_rollout.ex index 1443cec..682e4cd 100644 --- a/lib/unleash/strategy/flexible_rollout.ex +++ b/lib/unleash/strategy/flexible_rollout.ex @@ -23,7 +23,7 @@ defmodule Unleash.Strategy.FlexibleRollout do %{ group: group, percentage: percentage, - sticky_vaule: sticky_value, + sticky_value: sticky_value, stickiness: Map.get(params, "stickiness") }} else diff --git a/test/support/mojito.ex b/test/support/mojito.ex index 2bc9e8d..56d591c 100644 --- a/test/support/mojito.ex +++ b/test/support/mojito.ex @@ -8,11 +8,11 @@ defmodule Mojito.Behavior do status_code: pos_integer, headers: headers, body: String.t(), - complete: boolean, + complete: boolean } @type error :: %Mojito.Error{ reason: any, - message: String.t() | nil, + message: String.t() | nil } @callback get(String.t(), headers) :: {:ok, response} | {:error, error} | no_return diff --git a/test/unleash/metrics_test.exs b/test/unleash/metrics_test.exs index 40491dc..9660ff8 100644 --- a/test/unleash/metrics_test.exs +++ b/test/unleash/metrics_test.exs @@ -44,10 +44,10 @@ defmodule Unleash.MetricsTest do test "should not crash metric for unrecorded toggle", %{metrics: metrics} do Unleash.Metrics.add_metric({:unrecorded_feature_toggle, false}, metrics) - + # Force metrics to process message :sys.get_state(metrics) - + assert Process.alive?(metrics) end end diff --git a/test/unleash_test.exs b/test/unleash_test.exs index 5439ed2..c89011c 100644 --- a/test/unleash_test.exs +++ b/test/unleash_test.exs @@ -15,8 +15,8 @@ defmodule UnleashTest do Application.put_env(:unleash, Unleash, http_client: MojitoMock) assert capture_log(fn -> - Unleash.Client.features() - end) =~ ~r/Unexpected response.+Using cached features/ + Unleash.Client.features() + end) =~ ~r/Unexpected response.+Using cached features/ end end