don't let the processes survive the host they are running onto when
they were running something. The same kind of fix is probably due when
they are communicating or sleeping.
process groups with very few intrinsic semantic, but they should
allow you to build the semantic you want easily.
process groups with very few intrinsic semantic, but they should
allow you to build the semantic you want easily.
+ Simix:
+ * Bug fixes around the resource failures: don't let the processes
+ survive the host they are running onto
+
SimDag:
* New type of typed tasks SD_TASK_COMP_PAR_AMDAHL that represents a
parallel task whose initial work is distributed among host according
SimDag:
* New type of typed tasks SD_TASK_COMP_PAR_AMDAHL that represents a
parallel task whose initial work is distributed among host according
case SIMIX_FAILED:
XBT_DEBUG("SIMIX_execution_finished: host '%s' failed", simcall->issuer->smx_host->name);
case SIMIX_FAILED:
XBT_DEBUG("SIMIX_execution_finished: host '%s' failed", simcall->issuer->smx_host->name);
- SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
+ if (simcall->issuer->smx_host == action->execution.host)
+ SIMIX_process_kill(simcall->issuer);
+// simcall->issuer->context->iwannadie = 1; // Bye bye, little process.
+ else
+ SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
break;
case SIMIX_CANCELED:
break;
case SIMIX_CANCELED:
void SIMIX_post_host_execute(smx_action_t action)
{
void SIMIX_post_host_execute(smx_action_t action)
{
- /* FIXME: check if the host running the action failed or not*/
- /*if(surf_workstation_model->extension.workstation.get_state(action->host->host))*/
-
- /* If the host running the action didn't fail, then the action was canceled */
- if (surf_workstation_model->action_state_get(action->execution.surf_exec) == SURF_ACTION_FAILED)
+ if (surf_workstation_model->extension.workstation.get_state(action->execution.host->host)==SURF_RESOURCE_OFF) {
+ /* if the host running the action failed, notice it so that the asking process can be killed if it runs on that host itself */
+ action->state = SIMIX_FAILED;
+ } else if (surf_workstation_model->action_state_get(action->execution.surf_exec) == SURF_ACTION_FAILED) {
+ /* If the host running the action didn't fail, then the action was canceled */
action->state = SIMIX_CANCELED;
action->state = SIMIX_CANCELED;
action->state = SIMIX_DONE;
action->state = SIMIX_DONE;
if (action->execution.surf_exec) {
surf_workstation_model->action_unref(action->execution.surf_exec);
if (action->execution.surf_exec) {
surf_workstation_model->action_unref(action->execution.surf_exec);