sineed

sineed

Oban Pro: DynamicCron doesn't support unique option

Hello!

I just started upgrading Oban from OSS version to Pro and found that the old config:

config :my_project, Oban,
  repo: MyProject.Repo,
  plugins: [
    Oban.Plugins.Pruner,
    {Oban.Plugins.Cron,
     crontab: [
       {
         "* * * * *", # runs every minute
         MyProject.Worker,
         max_attempts: 1,
         unique: [
           # Unique in every 15 minutes
           period: 60 * 15,
           states: [:available, :scheduled, :executing]
         ]
       }
     ]}
  ],
  queues: [...]

then converted to Pro version:

config :my_project, Oban,
  engine: Oban.Pro.Queue.SmartEngine,
  repo: MyProject.Repo,
  plugins: [
    Oban.Pro.Plugins.DynamicLifeline,
    Oban.Pro.Plugins.DynamicPruner,
    {Oban.Pro.Plugins.DynamicCron,
     crontab: [
       {
         "* * * * *", # runs every minute
         MyProject.Worker,
         max_attempts: 1,
         unique: [
           # Unique in every 15 minutes
           period: 60 * 15,
           states: [:available, :scheduled, :executing]
         ]
       }
     ]}
  ],
  queues: [...]

Produces the following error:

17:41:15.098 [module=gen_server ][error] GenServer {Oban.Registry, {Oban, {:plugin, Oban.Pro.Plugins.DynamicCron}}} terminating
** (stop) %ArgumentError{message: [opts: {"expected cron opts to be one of [:args, :max_attempts, :priority, :queue, :tags, :timezone]", []}]}
Last message: {:continue, :start}

Oban version: 2.12.1
Oban Pro version: 0.11.1

I compared code of DynamicCron between the latest Pro version which is 0.12.4 and version 0.11.1. The diff is empty which tells me it should work the same in the latest version.

Is this intended for Pro, so I can set job uniqueness period in OSS version but cannot do that in Pro?

Meanwhile I’m trying to set it as an option inside use Oban.Worker.

First Post!

sineed

sineed

Yes, moving this unique option inside a Worker worked. I think it should be pointed in docs that unique cannot be used in the app config.

Most Liked

sorentwo

sorentwo

Oban Core Team

Sorry for the confusion!

There is a section in the docs that calls out which options are allowed:

The following call demonstrates updating every possible option:

{:ok, _} =
  DynamicCron.update(
    "cron-1",
    expression: "1 * * * *",
    max_attempts: 10,
    name: "special-cron",
    paused: false,
    priority: 0,
    queue: "dedicated",
    tags: ["client", "scheduled"],
    timezone: "Europe/Amsterdam",
    worker: Other.Worker,
  )

Setting unique overrides on Cron is usually a recipe for confusion, which is why it isn’t available as an option.

Last Post!

sineed

sineed

I agree it is confusing to see unique setting inside the cron definition. At the same time the job may take longer than we expect (it interacts with external system) so we have to ensure it is not enqueuing when external system down/slowly responds.

Where Next?

Popular in Questions Top

New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New

Other popular topics Top

KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36820 110
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New
AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New

We're in Beta

About us Mission Statement