Quintiq file version 2.0
|
#parent: #root
|
Method CheckOptimizerRunController () as stream[JSON]
|
{
|
Description:
|
[*
|
Check with the `LibOpt_OptimizerRunController` whether this `LibOpt_Run` can start.
|
Then start the run once the `LibOpt_OptimizerRunController` gives its approval.
|
*]
|
TextBody:
|
[*
|
// evr3 Apr-26-2022 (created)
|
|
snapshotruncontroller := LibOpt_SnapshotOptimizerRunController::Create( this, this.RequestedOn() );
|
// Create the controller run.
|
// Note: We don't pass objects from the optimizer components library to the dataset controller.
|
// This is to ensure that the transaction doesn't put a lock on the dataset of the LibOpt_Run.
|
// Note2: The run controller will throw an error if it is impossible to start a run.
|
controllerrun := LibOpt_OptimizerRunController::GetRunControllerDataset()
|
->LibOpt_ControllerRun::Create( this.Optimizer().Optimization().DatasetName(),
|
this.MDSID(),
|
this.OptimizerName(),
|
this.Key(),
|
this.RunNr(),
|
this.RequestedOn(),
|
this.RequestedThreadsRunController() );
|
// Check with the run controller if the run satisfies all conditions
|
canstart := controllerrun->CanStart();
|
// Otherwise, keep polling the run controller until the run satisfies the conditions.
|
canstart := controllerrun->PollOptimizerRunController( canstart );
|
result := this->StartAfterPreprocessing( canstart, snapshotruncontroller );
|
|
// Tell the run controller that the run has ended and that any reservations for this LibOpt_Run can be released.
|
result->|controllerrun->End()
|
// Handle the error that is thrown when it is impossible to start a run.
|
->Exception()
|
->LibOpt_OptimizerRunController::HandleExceptionRunController( this, snapshotruncontroller );
|
|
return result;
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|