Calculate and apply the necessary changes to update a running globaltag
For this we take two globaltags: the running one and a staging one
containing all the payloads and iovs to be added to the running tag. We then
1. Make sure they are in the correct states (RUNNING and VALIDATED)
2. Make sure all payloads in the running tag start and end (except for open
iovs) before the given ``valid_from`` run
3. Make sure the staging tag is overlap and gap free
4. Make all payloads in staging start at either 0,0 or on/after the given
``valid_from`` run
5. Make sure all payloads in staging are unbound unless the mode is
``ALLOW_CLOSED`` or ``FIX_CLOSED``. In case of ``FIX_CLOSED`` extend the
last iov to infinity
6. Close all payloads to be updated in the running tag that are open just
before the validity in the staging tag.
Definition at line 56 of file runningupdate.py.
def __init__ |
( |
|
self, |
|
|
|
db, |
|
|
|
running, |
|
|
|
staging, |
|
|
|
valid_from, |
|
|
|
mode, |
|
|
|
dry_run = False |
|
) |
| |
Initialize the class
Arguments:
db (ConditionsDB): reference to the database object
running (str): name of the running tag
staging (str): name of the staging tag
valid_from (tuple(int,int)): first valid exp,run
mode (RunningTagUpdateMode): the mode of the update
dry_run (bool): If true only check, don't do anything.
But be more lenient with globaltag state of staging.
Definition at line 76 of file runningupdate.py.
76 def __init__(self, db, running, staging, valid_from, mode, dry_run=False):
77 """Initialize the class
80 db (ConditionsDB): reference to the database object
81 running (str): name of the running tag
82 staging (str): name of the staging tag
83 valid_from (tuple(int,int)): first valid exp,run
84 mode (RunningTagUpdateMode): the mode of the update
85 dry_run (bool): If true only check, don't do anything.
86 But be more lenient with globaltag state of staging.
93 valid_from = tuple(map(int, valid_from))
94 if len(valid_from) != 2:
95 raise ValueError(
"exp,run number needs to have two elements")
96 except Exception
as e:
97 raise RunningTagUpdaterError(
"No first valid run for the update specified", error=str(e))
from e
101 self._dry_run = dry_run
103 self._valid_from = valid_from
109 self._allow_closed = mode
in (RunningTagUpdateMode.ALLOW_CLOSED, RunningTagUpdateMode.FIX_CLOSED,
110 RunningTagUpdateMode.FULL_REPLACEMENT)
112 self._fix_closed = (mode == RunningTagUpdateMode.FIX_CLOSED)
115 self._staging_coverage =
None
117 self._operations =
None
120 self._running_info = db.get_globalTagInfo(running)
122 self._staging_info = db.get_globalTagInfo(staging)
124 self._check_state(running, self._running_info,
"RUNNING")
125 self._check_state(staging, self._staging_info,
"VALIDATED")
129 self._running_payloads = db.get_all_iovs(self._running_info[
'name'])
131 self._staging_payloads = db.get_all_iovs(self._staging_info[
'name'])
133 self._staging_first_iovs = {}