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.

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.

Where Next?

Popular in Questions Top

sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New

Other popular topics Top

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
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
marick
I had some trouble figuring out how to make many-to-many associations work. Once I got it working, I wrote a blog post. Because I’m a nov...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
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
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement