A built-in run cancelled by migration cutover can still execute

Open
#1 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@pheus is already working on this.

Since Oct 23, 2026.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
backend

Research direction

Reproduce the race through Customization > Scripts and Scripts > Migration with one RQ worker, following the linked migration guide's worker arrangement. Observe the queued task across cancellation, cutover, and repointing, including a recurring run. Done means a cancelled built-in run does not execute, its eligible replacement runs once through the plugin, and no later built-in occurrence survives the completed cutover.

Written by the indexing model from the issue text.

Description

app: scripts status: needs triage type: bug
Plugin Version

v0.0.1

NetBox Version

v4.7.1

Python Version

3.12

Steps to Reproduce
  1. Under Customization > Scripts, schedule a built-in Custom Script to run a few minutes ahead. Use a recurring run to observe the scheduling effects as well.
  2. Under Scripts > Migration, run inventory and Stage Projects, then wait for valid revisions. Keep one RQ worker running.
  3. Select Enter cutover so cancellation overlaps the scheduler queueing the now-due run. This is a timing race. With Accept concurrent workers selected, a second worker taking the run just before cancellation can produce the same result.
  4. Run Activate Projects, then Repoint references.
Expected Behavior

A run reported as cancelled does not execute on the built-in side. Its eligible replacement executes once through the plugin.

Observed Behavior

The built-in Script executes despite the cancellation. Its Job changes from Failed back to Running. If it starts after repointing has recreated the run, both versions execute.

A recurring run also queues another built-in occurrence. The Jobs page may associate that occurrence with the replacement Script even though it still executes the built-in Script. The completed cutover does not cancel it, so the built-in schedule continues and cleanup retains its module.

NetBox starts the Job from the queued task's copy without checking the intervening cancellation. The migration guide describes the scheduler window.

Dominant language
Python
Stars
8
Forks
0
Avg merge
11h 23m
Merged PRs (30d)
24

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from netbox-community/netbox-scripts

All issues in netbox-community/netbox-scripts

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.