diff options
author | lain <lain@soykaf.club> | 2019-02-09 22:01:08 +0100 |
---|---|---|
committer | lain <lain@soykaf.club> | 2019-02-09 22:01:08 +0100 |
commit | f8388be9c69981958e9a96dce68fc39bdedb5cd3 (patch) | |
tree | 52c4bc943eaab9bd4a4e8ea700dd1b71299bad33 /lib/pleroma/object.ex | |
parent | 99fd199bda8bd90cd3e8c69d54087531ddc02eac (diff) | |
download | pleroma-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.ex | 22 |
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 |