模拟网格。 broken link发送任务
SimGrid. Sending task by broken link
在模拟中 master
发送 task
到 worker
有时会中断 link。在这种情况下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
如何避免?
简短的回答是不要混合命名 continue
和 Java 异常。这是更长的答案。
如果这确实是您的代码,那么只需尝试删除标签和继续指令即可。如果没有它,您的 while 循环应该可以解决问题。
但我怀疑这是一个较大项目的降低 MWE。无论如何,你的标签是丑陋的,这不是你应该做的正确的事Java。我认为您应该重新考虑您的整个代码以删除该构造。
我现在在互联网上找不到任何明确的答案,但我认为 Java 如果你用这样的 goto (continue+label=goto) 退出 catch 块会做坏事。这是一个类似的案例:Using 'continue with label' to reach an inner for loop
在模拟中 master
发送 task
到 worker
有时会中断 link。在这种情况下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
如何避免?
简短的回答是不要混合命名 continue
和 Java 异常。这是更长的答案。
如果这确实是您的代码,那么只需尝试删除标签和继续指令即可。如果没有它,您的 while 循环应该可以解决问题。
但我怀疑这是一个较大项目的降低 MWE。无论如何,你的标签是丑陋的,这不是你应该做的正确的事Java。我认为您应该重新考虑您的整个代码以删除该构造。
我现在在互联网上找不到任何明确的答案,但我认为 Java 如果你用这样的 goto (continue+label=goto) 退出 catch 块会做坏事。这是一个类似的案例:Using 'continue with label' to reach an inner for loop