diff --git a/CHANGELOG.md b/CHANGELOG.md index a833b42a..98e0d7f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + + + + + +### Fixed + +- Unable to parse response (invalid JSON) ([#215](https://github.com/coryodaniel/k8s/pull/215)) + + + ## [2.0.0-rc.5] - 2023-01-08 ### Changed @@ -40,10 +52,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [2.0.0-rc.0] - 2022-12-14 - - - - This version comes with some breaking changes. Please refer to the [migrations guide](./guides/migrations.md) for help on how to migrate your projects to this version. @@ -86,8 +94,6 @@ projects to this version. - Update `PKI.cert_from_map/2` to support fully qualified domain names (FQDN) - Fix for `K8s.Conn.from_file/1` ([#164](https://github.com/coryodaniel/k8s/pull/164)) - - ## [1.2.0] - 2022-12-07 ### Added diff --git a/lib/k8s/client/mint/request.ex b/lib/k8s/client/mint/request.ex index d85280d3..e4ce3ce7 100644 --- a/lib/k8s/client/mint/request.ex +++ b/lib/k8s/client/mint/request.ex @@ -88,17 +88,17 @@ defmodule K8s.Client.Mint.Request do end defp send_response(%__MODULE__{stream_to: {:reply, from}, buffer: [_ | _]} = request) do - GenServer.reply(from, request.buffer) + GenServer.reply(from, Enum.reverse(request.buffer)) struct!(request, stream_to: nil, buffer: []) end defp send_response(%__MODULE__{stream_to: {pid, ref}} = request) do - Enum.each(request.buffer, &send(pid, {ref, &1})) + request.buffer |> Enum.reverse() |> Enum.each(&send(pid, {ref, &1})) struct!(request, buffer: []) end defp send_response(%__MODULE__{stream_to: pid} = request) do - Enum.each(request.buffer, &send(pid, &1)) + request.buffer |> Enum.reverse() |> Enum.each(&send(pid, &1)) struct!(request, buffer: []) end diff --git a/lib/k8s/client/mint_http_provider.ex b/lib/k8s/client/mint_http_provider.ex index 9ac3bb2b..4052a458 100644 --- a/lib/k8s/client/mint_http_provider.ex +++ b/lib/k8s/client/mint_http_provider.ex @@ -210,7 +210,8 @@ defmodule K8s.Client.MintHTTPProvider do {:error, error} -> Logger.error("The response body is supposed to be JSON but could not be decoded.", library: :k8s, - error: error + error: error, + body: body ) nil diff --git a/test/k8s/client/runner/base_integration_test.exs b/test/k8s/client/runner/base_integration_test.exs index b9183e05..b3bb49bb 100644 --- a/test/k8s/client/runner/base_integration_test.exs +++ b/test/k8s/client/runner/base_integration_test.exs @@ -352,4 +352,20 @@ defmodule K8s.Client.Runner.BaseIntegrationTest do assert {:error, error} = result assert error.message =~ "404" end + + @tag :integration + @tag :reliability + test "concurrent requests succeed", %{conn: conn} do + results = + 0..100 + |> Task.async_stream(fn _ -> + K8s.Client.list("v1", "pod") + |> K8s.Operation.put_query_param(:limit, 100) + |> K8s.Client.put_conn(conn) + |> K8s.Client.run() + end) + |> Enum.to_list() + + assert Enum.all?(results, &match?({:ok, {:ok, %{}}}, &1)) + end end