Improves RetryQueue behavior
reduces to one single timer firing once a second switches to a parallel worker model
This commit is contained in:
parent
f5d7b0003e
commit
cb286fdeba
2 changed files with 202 additions and 24 deletions
|
|
@ -3,7 +3,8 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule MockActivityPub do
|
||||
def publish_one(ret) do
|
||||
def publish_one({ret, waiter}) do
|
||||
send(waiter, :complete)
|
||||
{ret, "success"}
|
||||
end
|
||||
end
|
||||
|
|
@ -15,21 +16,33 @@ defmodule Pleroma.Web.Federator.RetryQueueTest do
|
|||
@small_retry_count 0
|
||||
@hopeless_retry_count 10
|
||||
|
||||
setup do
|
||||
RetryQueue.reset_stats()
|
||||
end
|
||||
|
||||
test "RetryQueue responds to stats request" do
|
||||
assert %{delivered: 0, dropped: 0} == RetryQueue.get_stats()
|
||||
end
|
||||
|
||||
test "failed posts are retried" do
|
||||
{:retry, _timeout} = RetryQueue.get_retry_params(@small_retry_count)
|
||||
|
||||
assert {:noreply, %{delivered: 1}} ==
|
||||
RetryQueue.handle_info({:send, :ok, MockActivityPub, @small_retry_count}, %{
|
||||
delivered: 0
|
||||
})
|
||||
wait_task =
|
||||
Task.async(fn ->
|
||||
receive do
|
||||
:complete -> :ok
|
||||
end
|
||||
end)
|
||||
|
||||
RetryQueue.enqueue({:ok, wait_task.pid}, MockActivityPub, @small_retry_count)
|
||||
Task.await(wait_task)
|
||||
assert %{delivered: 1, dropped: 0} == RetryQueue.get_stats()
|
||||
end
|
||||
|
||||
test "posts that have been tried too many times are dropped" do
|
||||
{:drop, _timeout} = RetryQueue.get_retry_params(@hopeless_retry_count)
|
||||
|
||||
assert {:noreply, %{dropped: 1}} ==
|
||||
RetryQueue.handle_cast({:maybe_enqueue, %{}, nil, @hopeless_retry_count}, %{
|
||||
dropped: 0
|
||||
})
|
||||
RetryQueue.enqueue({:ok, nil}, MockActivityPub, @hopeless_retry_count)
|
||||
assert %{delivered: 0, dropped: 1} == RetryQueue.get_stats()
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue