Do object insertion through Cachex
So we don't flood our postgres logs with errors. Should also make things slightly faster.
This commit is contained in:
parent
99fd199bda
commit
f8388be9c6
4 changed files with 53 additions and 19 deletions
|
|
@ -13,9 +13,29 @@ defmodule Pleroma.Object do
|
|||
timestamps()
|
||||
end
|
||||
|
||||
def insert_or_get(cng) do
|
||||
{_, data} = fetch_field(cng, :data)
|
||||
id = data["id"] || data[:id]
|
||||
key = "object:#{id}"
|
||||
|
||||
fetcher = fn _ ->
|
||||
with nil <- get_by_ap_id(id),
|
||||
{:ok, object} <- Repo.insert(cng) do
|
||||
{:commit, object}
|
||||
else
|
||||
%Object{} = object -> {:commit, object}
|
||||
e -> {:ignore, e}
|
||||
end
|
||||
end
|
||||
|
||||
with {state, object} when state in [:commit, :ok] <- Cachex.fetch(:object_cache, key, fetcher) do
|
||||
{:ok, object}
|
||||
end
|
||||
end
|
||||
|
||||
def create(data) do
|
||||
Object.change(%Object{}, %{data: data})
|
||||
|> Repo.insert()
|
||||
|> insert_or_get()
|
||||
end
|
||||
|
||||
def change(struct, params \\ %{}) do
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue