# `Relyra.Workers.MetadataRefresh`
[🔗](https://github.com/szTheory/relyra/blob/v1.1.0/lib/relyra/workers/metadata_refresh.ex#L17)

Optional Oban worker that drives `Relyra.Metadata.Scheduler.run_due/2`
per D-02. Compiles whether or not Oban is in the adopter's deps tree
(Pitfall 5 — `mix compile --no-optional-deps --warnings-as-errors`
lane).

Adopters add ONE Cron line to their host config:

    config :my_app, Oban,
      repo: MyApp.Repo,
      queues: [relyra_metadata: 1],
      plugins: [
        {Oban.Plugins.Cron,
         crontab: [
           {"*/15 * * * *", Relyra.Workers.MetadataRefresh,
            args: %{"repo" => "MyApp.Repo"}}
         ]}
      ]

The 15-minute Cron interval is fine even though Phase 21 cadence
presets are 1h+ — `Scheduler.run_due/2` only acts on rows whose
`next_refresh_at` is in the past, so an empty tick just emits the
`:skipped` event (D-07) and returns.

`unique:` constraint per D-03: at most one in-flight job per
source_id across the entire Oban cluster. Multi-node dedup is
delegated to `Oban.Peers.Database` leader election.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
