SimGrid。通过断开的链接发送任务

时间:2016-04-23 14:07:27

标签: java simgrid

在模拟中master通过有时断开的链接将task发送到worker。在这种情况下,task将丢失,但master必须重新发送此任务。我使用这样的代码:

boolean send = false;
    label : while (!send){
        try {
            task.send("Tier1_" + i);
            send = true;
            break;
        }catch (TransferFailureException e){
            waitFor(1);
            continue label;
        }
    }

但它仍然给出了:

org.simgrid.msg.TransferFailureException
    at org.simgrid.msg.Task.receive(Native Method)
    at org.simgrid.msg.Task.receive(Task.java:271)
    at LHCb.Tier1.main(Tier1.java:35)
    at org.simgrid.msg.Process.run(Process.java:338)
[Tier1_7:LHCb.Tier1:(8) 10.000000] [jmsg/INFO] Unexpected behavior. Stopping now

如何避免它?

1 个答案:

答案 0 :(得分:1)

简短的回答是不要混合名为void insert(Node* v, int* arr) { if (!v) { return; } insert(v->left, arr); v->key = a[0]; insert(v->right, arr + 1); } 和Java异常。这是更长的答案。

如果这确实是您的代码,那么只需尝试删除您的标签和继续说明即可。你的while循环应该没有它。

但我怀疑这是一个较大项目的MWE减少。在任何情况下,你的标签都是丑陋的东西,这不是你应该用适当的Java做的事情。我认为您应该重新考虑整个代码以删除该构造。

我现在没有在互联网上找到任何确定的答案,但我认为如果你用这样的goto(continue + label = goto)退出一个catch块,Java会做坏事。以下是类似的案例:Using 'continue with label' to reach an inner for loop