open-simulation-platform / libcosimc

OSP C co-simulation API
Mozilla Public License 2.0
12 stars 2 forks source link

User story: choose the continuity of service level (debug purposes) #46

Open xmirabel opened 1 year ago

xmirabel commented 1 year ago

NEED

It should be possible to avoid simulation experiment stopping because of a model fatal error, in order to be able to disengage the concerned model, debug it and then reengage it at the same point of the experiment.

DESCRIPTION

As a OSP user
I want to be able to choose the continuity of service level for the whole execution (the default one), or a given slave family. The choice is at least among: - full continuity of service: never stop the execution, even though any slave has a fatal error; in that case, it is automatically disabled; - production continuity of service: like it is today.
So that a specific continuity of service level is applied to any slave family, when specified, or else, a default continuity of service level is applied to the others.

ACCEPTANCE TESTS

Given that production continuity of service is selected on the execution
When the user selects full continuity of service on the execution
Then if any simulator falls down then The execution is not disturbed at all by this event. It is possible to disengage the simulator family for debugging it.
Given that production continuity of service is selected on the execution and on all simulator families
When the user selects full continuity of service on it
Then if one of the instance of the simulator family falls down then The execution is not disturbed at all by this event. It is possible to disengage the simulator family for debugging it. else if any other simulator falls down then The execution ends
Given that full continuity of service is selected on the execution and on all simulator families
When the user selects production continuity of service on it
Then if one of the instance of the simulator family falls down then The execution ends else if any other simulator falls down then The execution is not disturbed at all by this event. It is possible to disengage the concerned simulator family for debugging it.

EXAMPLE OF SIGNATURES

// Continuity of service level.
typedef enum
{
    COSIM_CONTINUITY_OF_SERVICE_DEFAULT,
    COSIM_CONTINUITY_OF_SERVICE_PRODUCTION,
    COSIM_CONTINUITY_OF_SERVICE_FULL,
} cosim_continuity_of_service_level;

/**
 *  Get the execution default continuity of service level.
 *
 *  \param [in] execution
 *      The concerned execution.
 *
 *  \returns
 *      The execution default continuity of service level.
 */
cosim_continuity_of_service_level cosim_execution_get_default_continuity_of_service_level(cosim_execution* execution);

/**
 *  Set the execution default continuity of service level.
 *
 *  \param [in] execution
 *      The concerned execution.
 *  \param [in] level
 *      The execution default continuity of service level.
 */
void cosim_execution_set_default_continuity_of_service_level(cosim_execution* execution, cosim_continuity_of_service_level* level);

/**
 *  Get the slave family continuity of service level.
 *
 *  \param [in] execution
 *      The concerned execution.
 *  \param [in] cosim_slave_index
 *      The slave to be queried.
 *  \param [out] level
 *      The slave family level.
 *
 *  \returns
 *      0 on success and -1 on error (if slave index is invalid for instance).
 */
int cosim_execution_get_slave_family_continuity_of_service_level(cosim_execution* execution, cosim_slave_index slave, cosim_continuity_of_service_level* level);

/**
 *  Set the slave family continuity of service level.
 *
 *  \param [in] execution
 *      The concerned execution.
 *  \param [in] cosim_slave_index
 *      The slave to be set.
 *  \param [out] level
 *      The slave family level.
 *
 *  \returns
 *      0 on success and -1 on error (if slave index is invalid for instance).
 */
int cosim_execution_set_slave_family_continuity_of_service_level(cosim_execution* execution, cosim_slave_index slave, cosim_continuity_of_service_level level);