mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-16 20:22:53 -06:00
19644 set atomic transactions for Job Script run
This commit is contained in:
parent
3cd0a930dc
commit
caaed888f7
@ -2,10 +2,11 @@ import logging
|
|||||||
import traceback
|
import traceback
|
||||||
from contextlib import ExitStack
|
from contextlib import ExitStack
|
||||||
|
|
||||||
from django.db import transaction
|
from django.db import router, transaction
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from core.signals import clear_events
|
from core.signals import clear_events
|
||||||
|
from dcim.models import Device
|
||||||
from extras.models import Script as ScriptModel
|
from extras.models import Script as ScriptModel
|
||||||
from netbox.jobs import JobRunner
|
from netbox.jobs import JobRunner
|
||||||
from netbox.registry import registry
|
from netbox.registry import registry
|
||||||
@ -39,10 +40,15 @@ class ScriptJob(JobRunner):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
|
# A script can modify multiple models so need to do an atomic lock on
|
||||||
|
# both the default database (for non ChangeLogged models) and potentially
|
||||||
|
# any other database (for ChangeLogged models) - choosing Device as
|
||||||
|
# the model to use as it has ChangeLoggingMixin
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
script.output = script.run(data, commit)
|
with transaction.atomic(router.db_for_write(Device)):
|
||||||
if not commit:
|
script.output = script.run(data, commit)
|
||||||
raise AbortTransaction()
|
if not commit:
|
||||||
|
raise AbortTransaction()
|
||||||
except AbortTransaction:
|
except AbortTransaction:
|
||||||
script.log_info(message=_("Database changes have been reverted automatically."))
|
script.log_info(message=_("Database changes have been reverted automatically."))
|
||||||
if script.failed:
|
if script.failed:
|
||||||
|
Loading…
Reference in New Issue
Block a user