[#3213] Misc. tweaks: proper upsert in Hashtag, better feature toggle management.

This commit is contained in:
Ivan Tashkinov 2021-02-23 13:52:28 +03:00
commit 77f3da0358
8 changed files with 30 additions and 31 deletions

View file

@ -111,4 +111,8 @@ defmodule Pleroma.Config do
end
)
end
def feature_enabled?(feature_name) do
get([:features, feature_name]) not in [nil, false, :disabled, :auto]
end
end

View file

@ -27,19 +27,15 @@ defmodule Pleroma.Hashtag do
|> String.trim()
end
def get_by_name(name) do
Repo.get_by(Hashtag, name: normalize_name(name))
end
def get_or_create_by_name(name) do
changeset = changeset(%Hashtag{}, %{name: name})
def get_or_create_by_name(name) when is_bitstring(name) do
with %Hashtag{} = hashtag <- get_by_name(name) do
{:ok, hashtag}
else
_ ->
%Hashtag{}
|> changeset(%{name: name})
|> Repo.insert()
end
Repo.insert(
changeset,
on_conflict: [set: [name: get_field(changeset, :name)]],
conflict_target: :name,
returning: true
)
end
def get_or_create_by_names(names) when is_list(names) do

View file

@ -24,7 +24,7 @@ defmodule Pleroma.Migrators.HashtagsTableMigrator do
defdelegate put_stat(key, value), to: State, as: :put_data_key
defdelegate increment_stat(key, increment), to: State, as: :increment_data_key
@feature_config_path [:database, :improved_hashtag_timeline]
@feature_config_path [:features, :improved_hashtag_timeline]
@reg_name {:global, __MODULE__}
def whereis, do: GenServer.whereis(@reg_name)
@ -296,16 +296,12 @@ defmodule Pleroma.Migrators.HashtagsTableMigrator do
end
defp on_complete(data_migration) do
cond do
data_migration.feature_lock ->
:noop
not is_nil(feature_state()) ->
:noop
true ->
Config.put(@feature_config_path, true)
:ok
if data_migration.feature_lock || feature_state() == :disabled do
Logger.warn("#{__MODULE__}: migration complete but feature is locked; consider enabling.")
:noop
else
Config.put(@feature_config_path, :enabled)
:ok
end
end

View file

@ -1273,7 +1273,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|> exclude_invisible_actors(opts)
|> exclude_visibility(opts)
if Config.get([:database, :improved_hashtag_timeline]) do
if Config.feature_enabled?(:improved_hashtag_timeline) do
query
|> restrict_hashtag_any(opts)
|> restrict_hashtag_all(opts)