Skip to content

Commit b327626

Browse files
authored
elixir-client: Fix consumption of client streams across processes (#2798)
Fixes #2797
1 parent ad1994e commit b327626

3 files changed

Lines changed: 28 additions & 1 deletion

File tree

.changeset/tidy-teachers-fetch.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@core/elixir-client": patch
3+
---
4+
5+
Fix consumption of embedded API across processes

packages/elixir-client/lib/electric/client/embedded.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ if Code.ensure_loaded?(Electric.Shapes.Api) do
4747
schema: Api.schema(response),
4848
next_cursor: nil,
4949
request_timestamp: timestamp,
50-
body: response.body
50+
# Ensure we enumerate the response body in the same process that made the
51+
# original api request so the cleanup shape process cleanup works
52+
body: Enum.into(response.body, [])
5153
}
5254
end
5355

packages/elixir-client/test/electric/client/embedded_test.exs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,24 @@ defmodule Electric.Client.EmbeddedTest do
202202
_msgs = stream(%{ctx | shape: shape}, 4)
203203
end
204204
end
205+
206+
test "is able to read response body in separate processes", ctx do
207+
parent = self()
208+
209+
{:ok, _id1} = insert_item(ctx)
210+
{:ok, _id2} = insert_item(ctx)
211+
{:ok, _id3} = insert_item(ctx)
212+
213+
stream = stream(ctx, live: false)
214+
215+
{:ok, _} =
216+
Task.start_link(fn ->
217+
Enum.each(stream, &send(parent, {:msg, &1}))
218+
end)
219+
220+
assert_receive {:msg, %ChangeMessage{}}, 1000
221+
assert_receive {:msg, %ChangeMessage{}}, 1000
222+
assert_receive {:msg, %ChangeMessage{}}, 1000
223+
assert_receive {:msg, up_to_date()}, 1000
224+
end
205225
end

0 commit comments

Comments
 (0)