Prune old Update activities #683
4 changed files with 97 additions and 6 deletions
|
@ -26,6 +26,15 @@ def prune_undos do
|
||||||
|> Repo.delete_all(timeout: :infinity)
|
|> Repo.delete_all(timeout: :infinity)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prune_updates do
|
||||||
|
before_time = cutoff()
|
||||||
|
|
||||||
|
from(a in Activity,
|
||||||
|
where: fragment("?->>'type' = ?", a.data, "Update") and a.inserted_at < ^before_time
|
||||||
|
)
|
||||||
|
|> Repo.delete_all(timeout: :infinity)
|
||||||
|
end
|
||||||
|
|
||||||
def prune_removes do
|
def prune_removes do
|
||||||
before_time = cutoff()
|
before_time = cutoff()
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,9 @@ def perform(_job) do
|
||||||
Logger.info("Pruning old undos")
|
Logger.info("Pruning old undos")
|
||||||
ActivityPruner.prune_undos()
|
ActivityPruner.prune_undos()
|
||||||
|
|
||||||
|
Logger.info("Pruning old updates")
|
||||||
|
ActivityPruner.prune_updates()
|
||||||
|
|
||||||
Logger.info("Pruning old removes")
|
Logger.info("Pruning old removes")
|
||||||
ActivityPruner.prune_removes()
|
ActivityPruner.prune_removes()
|
||||||
|
|
||||||
|
|
|
@ -6,22 +6,52 @@ defmodule Pleroma.Activity.PrunerTest do
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
describe "prune_deletes" do
|
describe "prune_transient_activities" do
|
||||||
test "it prunes old delete objects" do
|
test "it prunes old transient activities" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
old_time = DateTime.utc_now() |> DateTime.add(-31 * 24, :hour)
|
||||||
|
|
||||||
new_delete = insert(:delete_activity, type: "Delete", user: user)
|
new_delete = insert(:delete_activity, type: "Delete", user: user)
|
||||||
|
|
||||||
old_delete =
|
old_delete =
|
||||||
insert(:delete_activity,
|
insert(:delete_activity,
|
||||||
type: "Delete",
|
|
||||||
user: user,
|
user: user,
|
||||||
inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour)
|
inserted_at: old_time
|
||||||
)
|
)
|
||||||
|
|
||||||
|
new_update = insert(:update_activity, type: "Update", user: user)
|
||||||
|
|
||||||
|
old_update =
|
||||||
|
insert(:update_activity,
|
||||||
|
type: "Update",
|
||||||
|
user: user,
|
||||||
|
inserted_at: old_time
|
||||||
|
)
|
||||||
|
|
||||||
|
new_undo = insert(:undo_activity)
|
||||||
|
|
||||||
|
old_undo = insert(:undo_activity, inserted_at: old_time)
|
||||||
|
|
||||||
|
new_remove = insert(:remove_activity)
|
||||||
|
|
||||||
|
old_remove = insert(:remove_activity, inserted_at: old_time)
|
||||||
|
|
||||||
Pruner.prune_deletes()
|
Pruner.prune_deletes()
|
||||||
|
Pruner.prune_updates()
|
||||||
|
Pruner.prune_undos()
|
||||||
|
Pruner.prune_removes()
|
||||||
|
|
||||||
assert Activity.get_by_id(new_delete.id)
|
assert Activity.get_by_id(new_delete.id)
|
||||||
refute Activity.get_by_id(old_delete.id)
|
refute Activity.get_by_id(old_delete.id)
|
||||||
|
|
||||||
|
assert Activity.get_by_id(new_update.id)
|
||||||
|
refute Activity.get_by_id(old_update.id)
|
||||||
|
|
||||||
|
assert Activity.get_by_id(new_undo.id)
|
||||||
|
refute Activity.get_by_id(old_undo.id)
|
||||||
|
|
||||||
|
assert Activity.get_by_id(new_remove.id)
|
||||||
|
refute Activity.get_by_id(old_remove.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ defmodule Pleroma.Factory do
|
||||||
|
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
alias Pleroma.Web.ActivityPub.UserView
|
||||||
|
|
||||||
@rsa_keys [
|
@rsa_keys [
|
||||||
"test/fixtures/rsa_keys/key_1.pem",
|
"test/fixtures/rsa_keys/key_1.pem",
|
||||||
|
@ -307,7 +308,7 @@ def add_activity_factory(attrs \\ %{}) do
|
||||||
featured_collection_activity(attrs, "Add")
|
featured_collection_activity(attrs, "Add")
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_activity_factor(attrs \\ %{}) do
|
def remove_activity_factory(attrs \\ %{}) do
|
||||||
featured_collection_activity(attrs, "Remove")
|
featured_collection_activity(attrs, "Remove")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -328,7 +329,7 @@ defp featured_collection_activity(attrs, type) do
|
||||||
"target" => user.featured_address,
|
"target" => user.featured_address,
|
||||||
"object" => note.data["object"],
|
"object" => note.data["object"],
|
||||||
"actor" => note.data["actor"],
|
"actor" => note.data["actor"],
|
||||||
"type" => "Add",
|
"type" => type,
|
||||||
"to" => [Pleroma.Constants.as_public()],
|
"to" => [Pleroma.Constants.as_public()],
|
||||||
"cc" => [user.follower_address]
|
"cc" => [user.follower_address]
|
||||||
}
|
}
|
||||||
|
@ -554,6 +555,54 @@ def delete_activity_factory(attrs \\ %{}) do
|
||||||
|> Map.merge(attrs)
|
|> Map.merge(attrs)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def undo_activity_factory(attrs \\ %{}) do
|
||||||
|
like_activity = attrs[:like_activity] || insert(:like_activity)
|
||||||
|
attrs = Map.drop(attrs, [:like_activity])
|
||||||
|
|
||||||
|
data =
|
||||||
|
%{
|
||||||
|
"id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
|
||||||
|
"type" => "Undo",
|
||||||
|
"actor" => like_activity.data["actor"],
|
||||||
|
"to" => like_activity.data["to"],
|
||||||
|
"object" => like_activity.data["id"],
|
||||||
|
"published" => DateTime.utc_now() |> DateTime.to_iso8601(),
|
||||||
|
"context" => like_activity.data["context"]
|
||||||
|
}
|
||||||
|
|
||||||
|
%Pleroma.Activity{
|
||||||
|
data: data,
|
||||||
|
actor: data["actor"],
|
||||||
|
recipients: data["to"]
|
||||||
|
}
|
||||||
|
|> Map.merge(attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_activity_factory(attrs \\ %{}) do
|
||||||
|
user = attrs[:user] || insert(:user, nickname: "testuser")
|
||||||
|
attrs = Map.drop(attrs, [:user])
|
||||||
|
|
||||||
|
user_data =
|
||||||
|
UserView.render("user.json", %{user: user})
|
||||||
|
|> Map.merge(%{"name" => "new display name"})
|
||||||
|
|
||||||
|
data = %{
|
||||||
|
"type" => "Update",
|
||||||
|
"to" => [
|
||||||
|
user_data["followers"],
|
||||||
|
"https://www.w3.org/ns/activitystreams#Public"
|
||||||
|
],
|
||||||
|
"actor" => user_data["id"],
|
||||||
|
"object" => user_data
|
||||||
|
}
|
||||||
|
|
||||||
|
%Pleroma.Activity{
|
||||||
|
actor: user_data["id"],
|
||||||
|
data: data
|
||||||
|
}
|
||||||
|
|> Map.merge(attrs)
|
||||||
|
end
|
||||||
|
|
||||||
def oauth_app_factory do
|
def oauth_app_factory do
|
||||||
%Pleroma.Web.OAuth.App{
|
%Pleroma.Web.OAuth.App{
|
||||||
client_name: sequence(:client_name, &"Some client #{&1}"),
|
client_name: sequence(:client_name, &"Some client #{&1}"),
|
||||||
|
|
Loading…
Reference in a new issue