Skip to content

Commit 660a612

Browse files
Vmxm custom multiplex delay (#350)
Change the multiplex delay parameters to be input as a dictionary to allow for beamline specific parameters. Also change the equality when checking for the maximum number of tries from >= to >.
1 parent 53175ca commit 660a612

1 file changed

Lines changed: 28 additions & 10 deletions

File tree

src/dlstbx/services/trigger.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,15 @@ class MultiplexParameters(pydantic.BaseModel):
216216
spacegroup: Optional[str] = None
217217
automatic: Optional[bool] = False
218218
comment: Optional[str] = None
219-
backoff_delay: float = pydantic.Field(default=8, alias="backoff-delay")
220-
backoff_max_try: int = pydantic.Field(default=10, alias="backoff-max-try")
221-
backoff_multiplier: float = pydantic.Field(default=2, alias="backoff-multiplier")
219+
backoff_delay: Dict[str, float] = pydantic.Field(
220+
default={"default": 8}, alias="backoff-delay"
221+
)
222+
backoff_max_try: Dict[str, int] = pydantic.Field(
223+
default={"default": 10}, alias="backoff-max-try"
224+
)
225+
backoff_multiplier: Dict[str, float] = pydantic.Field(
226+
default={"default": 2}, alias="backoff-multiplier"
227+
)
222228
wavelength_tolerance: float = pydantic.Field(default=1e-4, ge=0)
223229
diffraction_plan_info: Optional[DiffractionPlanInfo] = None
224230
recipe: Optional[str] = None
@@ -1795,9 +1801,9 @@ def trigger_multiplex(
17951801
"name": "sample_bar",
17961802
}
17971803
],
1798-
"backoff-delay": 8, # default
1799-
"backoff-max-try": 10, # default
1800-
"backoff-multiplier": 2, # default
1804+
"backoff-delay": {'default': 8}
1805+
"backoff-max-try": {'default': 10, 'i02-1': 7}
1806+
"backoff-multiplier": {'default': 2}
18011807
}
18021808
"""
18031809
dcid = parameters.dcid
@@ -1880,14 +1886,26 @@ def trigger_multiplex(
18801886
# Calculate message delay for exponential backoff in case a processing
18811887
# program for a related data collection is still running, in which case
18821888
# we checkpoint with the calculated message delay
1889+
backoff_delay = parameters.backoff_delay.get(
1890+
parameters.beamline, parameters.backoff_delay["default"]
1891+
)
1892+
backoff_multiplier = parameters.backoff_multiplier.get(
1893+
parameters.beamline, parameters.backoff_multiplier["default"]
1894+
)
1895+
backoff_max_try = parameters.backoff_max_try.get(
1896+
parameters.beamline, parameters.backoff_max_try["default"]
1897+
)
1898+
1899+
self.log.debug(
1900+
f"Using backoff parameters: delay {backoff_delay}, multiplier {backoff_multiplier}, max_try {backoff_max_try}"
1901+
)
1902+
18831903
status = {
18841904
"ntry": 0,
18851905
}
18861906
if isinstance(message, dict):
18871907
status.update(message.get("trigger-status", {}))
1888-
message_delay = int(
1889-
parameters.backoff_delay * parameters.backoff_multiplier ** status["ntry"]
1890-
)
1908+
message_delay = int(backoff_delay * backoff_multiplier ** status["ntry"])
18911909
status["ntry"] += 1
18921910
self.log.debug(f"dcid={dcid}\nmessage_delay={message_delay}\n{status}")
18931911

@@ -1944,7 +1962,7 @@ def trigger_multiplex(
19441962
row.AutoProcProgram.autoProcProgramId
19451963
for row in waiting_processing_jobs
19461964
]
1947-
if status["ntry"] >= parameters.backoff_max_try:
1965+
if status["ntry"] > backoff_max_try:
19481966
# Give up waiting for this program to finish and trigger
19491967
# multiplex with remaining related results are available
19501968
self.log.info(

0 commit comments

Comments
 (0)