Updated slow indexing to maintain its old schedule if re-enabled
This commit is contained in:
parent
0523c3c72e
commit
f6eedb1783
3 changed files with 43 additions and 3 deletions
|
|
@ -28,10 +28,12 @@ defmodule Pinchflat.SlowIndexing.SlowIndexingHelpers do
|
||||||
Returns {:ok, %Task{}}
|
Returns {:ok, %Task{}}
|
||||||
"""
|
"""
|
||||||
def kickoff_indexing_task(%Source{} = source, job_args \\ %{}, job_opts \\ []) do
|
def kickoff_indexing_task(%Source{} = source, job_args \\ %{}, job_opts \\ []) do
|
||||||
|
job_offset_seconds = calculate_job_offset_seconds(source)
|
||||||
|
|
||||||
Tasks.delete_pending_tasks_for(source, "FastIndexingWorker")
|
Tasks.delete_pending_tasks_for(source, "FastIndexingWorker")
|
||||||
Tasks.delete_pending_tasks_for(source, "MediaCollectionIndexingWorker", include_executing: true)
|
Tasks.delete_pending_tasks_for(source, "MediaCollectionIndexingWorker", include_executing: true)
|
||||||
|
|
||||||
MediaCollectionIndexingWorker.kickoff_with_task(source, job_args, job_opts)
|
MediaCollectionIndexingWorker.kickoff_with_task(source, job_args, job_opts ++ [schedule_in: job_offset_seconds])
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
@ -154,4 +156,14 @@ defmodule Pinchflat.SlowIndexing.SlowIndexingHelpers do
|
||||||
changeset
|
changeset
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Find the difference between the current time and the last time the source was indexed
|
||||||
|
defp calculate_job_offset_seconds(%Source{last_indexed_at: nil}), do: 0
|
||||||
|
|
||||||
|
defp calculate_job_offset_seconds(source) do
|
||||||
|
offset_seconds = DateTime.diff(DateTime.utc_now(), source.last_indexed_at, :second)
|
||||||
|
index_frequency_seconds = source.index_frequency_minutes * 60
|
||||||
|
|
||||||
|
max(0, index_frequency_seconds - offset_seconds)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -328,8 +328,6 @@ defmodule Pinchflat.Sources do
|
||||||
|
|
||||||
case {current_changes, applied_changes} do
|
case {current_changes, applied_changes} do
|
||||||
{%{index_frequency_minutes: mins}, %{enabled: true}} when mins > 0 ->
|
{%{index_frequency_minutes: mins}, %{enabled: true}} when mins > 0 ->
|
||||||
# TODO: consider scheduling the task for the future based on the index_frequency_minutes
|
|
||||||
# compared to `last_indexed_at`
|
|
||||||
SlowIndexingHelpers.kickoff_indexing_task(source)
|
SlowIndexingHelpers.kickoff_indexing_task(source)
|
||||||
|
|
||||||
{%{enabled: true}, %{index_frequency_minutes: mins}} when mins > 0 ->
|
{%{enabled: true}, %{index_frequency_minutes: mins}} when mins > 0 ->
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,36 @@ defmodule Pinchflat.SlowIndexing.SlowIndexingHelpersTest do
|
||||||
assert_enqueued(worker: MediaCollectionIndexingWorker, args: %{"id" => source.id})
|
assert_enqueued(worker: MediaCollectionIndexingWorker, args: %{"id" => source.id})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "schedules a job for the future based on when the source was last indexed" do
|
||||||
|
source = source_fixture(index_frequency_minutes: 30, last_indexed_at: now_minus(5, :minutes))
|
||||||
|
|
||||||
|
assert {:ok, _} = SlowIndexingHelpers.kickoff_indexing_task(source)
|
||||||
|
|
||||||
|
[job] = all_enqueued(worker: MediaCollectionIndexingWorker, args: %{"id" => source.id})
|
||||||
|
|
||||||
|
assert_in_delta DateTime.diff(job.scheduled_at, DateTime.utc_now(), :minute), 25, 1
|
||||||
|
end
|
||||||
|
|
||||||
|
test "schedules a job immediately if the source was indexed far in the past" do
|
||||||
|
source = source_fixture(index_frequency_minutes: 30, last_indexed_at: now_minus(60, :minutes))
|
||||||
|
|
||||||
|
assert {:ok, _} = SlowIndexingHelpers.kickoff_indexing_task(source)
|
||||||
|
|
||||||
|
[job] = all_enqueued(worker: MediaCollectionIndexingWorker, args: %{"id" => source.id})
|
||||||
|
|
||||||
|
assert_in_delta DateTime.diff(job.scheduled_at, DateTime.utc_now(), :second), 0, 1
|
||||||
|
end
|
||||||
|
|
||||||
|
test "schedules a job immediately if the source has never been indexed" do
|
||||||
|
source = source_fixture(index_frequency_minutes: 30, last_indexed_at: nil)
|
||||||
|
|
||||||
|
assert {:ok, _} = SlowIndexingHelpers.kickoff_indexing_task(source)
|
||||||
|
|
||||||
|
[job] = all_enqueued(worker: MediaCollectionIndexingWorker, args: %{"id" => source.id})
|
||||||
|
|
||||||
|
assert_in_delta DateTime.diff(job.scheduled_at, DateTime.utc_now(), :second), 0, 1
|
||||||
|
end
|
||||||
|
|
||||||
test "creates and attaches a task" do
|
test "creates and attaches a task" do
|
||||||
source = source_fixture(index_frequency_minutes: 1)
|
source = source_fixture(index_frequency_minutes: 1)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue