mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-23 00:26:30 +00:00
Merge branch 'fix/2473-purge-expired-activities-duplicates' into 'develop'
fix and delete purge activities duplicates Closes #2473 See merge request pleroma/pleroma!3285
This commit is contained in:
commit
6a2d3fb9a3
3 changed files with 31 additions and 1 deletions
|
@ -60,6 +60,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Creating incorrect IPv4 address-style HTTP links when encountering certain numbers.
|
- Creating incorrect IPv4 address-style HTTP links when encountering certain numbers.
|
||||||
- Reblog API Endpoint: Do not set visibility parameter to public by default and let CommonAPI to infer it from status, so a user can reblog their private status without explicitly setting reblog visibility to private.
|
- Reblog API Endpoint: Do not set visibility parameter to public by default and let CommonAPI to infer it from status, so a user can reblog their private status without explicitly setting reblog visibility to private.
|
||||||
- Tag URLs in statuses are now absolute
|
- Tag URLs in statuses are now absolute
|
||||||
|
- Removed duplicate jobs to purge expired activities
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>API Changes</summary>
|
<summary>API Changes</summary>
|
||||||
|
|
|
@ -7,7 +7,7 @@ defmodule Pleroma.Workers.PurgeExpiredActivity do
|
||||||
Worker which purges expired activity.
|
Worker which purges expired activity.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use Oban.Worker, queue: :activity_expiration, max_attempts: 1
|
use Oban.Worker, queue: :activity_expiration, max_attempts: 1, unique: [period: :infinity]
|
||||||
|
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.RemoveDuplicatesFromActivityExpirationQueue do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
import Ecto.Query, only: [from: 2]
|
||||||
|
|
||||||
|
def up do
|
||||||
|
duplicate_ids =
|
||||||
|
from(j in Oban.Job,
|
||||||
|
where: j.queue == "activity_expiration",
|
||||||
|
where: j.worker == "Pleroma.Workers.PurgeExpiredActivity",
|
||||||
|
where: j.state == "scheduled",
|
||||||
|
select:
|
||||||
|
{fragment("(?)->>'activity_id'", j.args), fragment("array_agg(?)", j.id), count(j.id)},
|
||||||
|
group_by: fragment("(?)->>'activity_id'", j.args),
|
||||||
|
having: count(j.id) > 1
|
||||||
|
)
|
||||||
|
|> Pleroma.Repo.all()
|
||||||
|
|> Enum.map(fn {_, ids, _} ->
|
||||||
|
max_id = Enum.max(ids)
|
||||||
|
List.delete(ids, max_id)
|
||||||
|
end)
|
||||||
|
|> List.flatten()
|
||||||
|
|
||||||
|
from(j in Oban.Job, where: j.id in ^duplicate_ids)
|
||||||
|
|> Pleroma.Repo.delete_all()
|
||||||
|
end
|
||||||
|
|
||||||
|
def down, do: :noop
|
||||||
|
end
|
Loading…
Reference in a new issue