aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/object.ex
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-02-09 22:01:08 +0100
committerlain <lain@soykaf.club>2019-02-09 22:01:08 +0100
commitf8388be9c69981958e9a96dce68fc39bdedb5cd3 (patch)
tree52c4bc943eaab9bd4a4e8ea700dd1b71299bad33 /lib/pleroma/object.ex
parent99fd199bda8bd90cd3e8c69d54087531ddc02eac (diff)
downloadpleroma-f8388be9c69981958e9a96dce68fc39bdedb5cd3.tar.gz
Do object insertion through Cachex
So we don't flood our postgres logs with errors. Should also make things slightly faster.
Diffstat (limited to 'lib/pleroma/object.ex')
-rw-r--r--lib/pleroma/object.ex22
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 7b46a3b05..96079cf22 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -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