commit: 08a444f6c3591fec60d11638587c60c5dc417a48
parent 12d682c62f45917182ca22b4ce8c7a98d8a9b4dd
Author: feld <feld@feld.me>
Date:   Mon, 19 Aug 2024 16:49:08 +0000
Merge branch 'reachability' into 'develop'
Fix reachability based on results of publishing attempts
See merge request pleroma/pleroma!4231
Diffstat:
3 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/changelog.d/publisher-reachability.fix b/changelog.d/publisher-reachability.fix
@@ -0,0 +1 @@
+Address case where instance reachability status couldn't be updated
diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex
@@ -148,12 +148,17 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
                {"digest", p.digest}
              ]
            ) do
-      maybe_set_reachable(p.unreachable_since, p.inbox)
+      if not is_nil(p.unreachable_since) do
+        Instances.set_reachable(p.inbox)
+      end
 
       result
     else
       {_post_result, %{status: code} = response} = e ->
-        maybe_set_unreachable(p.unreachable_since, p.inbox)
+        if is_nil(p.unreachable_since) do
+          Instances.set_unreachable(p.inbox)
+        end
+
         Logger.metadata(activity: p.activity_id, inbox: p.inbox, status: code)
         Logger.error("Publisher failed to inbox #{p.inbox} with status #{code}")
 
@@ -174,7 +179,10 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
         connection_pool_snooze()
 
       e ->
-        maybe_set_unreachable(p.unreachable_since, p.inbox)
+        if is_nil(p.unreachable_since) do
+          Instances.set_unreachable(p.inbox)
+        end
+
         Logger.metadata(activity: p.activity_id, inbox: p.inbox)
         Logger.error("Publisher failed to inbox #{p.inbox} #{inspect(e)}")
         {:error, e}
@@ -183,12 +191,6 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
 
   defp connection_pool_snooze, do: {:snooze, 3}
 
-  defp maybe_set_reachable(%NaiveDateTime{}, inbox), do: Instances.set_reachable(inbox)
-  defp maybe_set_reachable(_, _), do: :ok
-
-  defp maybe_set_unreachable(nil, inbox), do: Instances.set_unreachable(inbox)
-  defp maybe_set_unreachable(%NaiveDateTime{}, _), do: :ok
-
   defp signature_host(%URI{port: port, scheme: scheme, host: host}) do
     if port == URI.default_port(scheme) do
       host
diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs
@@ -180,7 +180,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
                Publisher.prepare_one(%{
                  inbox: inbox,
                  activity_id: activity.id,
-                 unreachable_since: NaiveDateTime.utc_now()
+                 unreachable_since: NaiveDateTime.utc_now() |> NaiveDateTime.to_string()
                })
                |> Publisher.publish_one()
 
@@ -269,7 +269,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
                         Publisher.prepare_one(%{
                           inbox: inbox,
                           activity_id: activity.id,
-                          unreachable_since: NaiveDateTime.utc_now()
+                          unreachable_since: NaiveDateTime.utc_now() |> NaiveDateTime.to_string()
                         })
                         |> Publisher.publish_one()
              end) =~ "connrefused"