/*
- * $Id$
- *
- * Copyright 2006,2007 Martin Quinson, Malek Cherier
- * All rights reserved.
+ * Copyright 2006,2007,2010. The SimGrid Team. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package.
public class Forwarder extends simgrid.msg.Process {
- public void main(String[] args) throws JniException, NativeException {
- Msg.info("hello!");
-
- int slavesCount = args.length;
- Host[] slaves = new Host[slavesCount];
-
- for (int i = 0; i < args.length; i++) {
- try {
- slaves[i] = Host.getByName(args[i]);
- } catch (HostNotFoundException e) {
- Msg.info("Buggy deployment file");
- e.printStackTrace();
- System.exit(1);
- }
+ public void main(String[] args) throws MsgException {
+ if (args.length < 3) {
+ Msg.info("Forwarder needs 3 arguments (input mailbox, first output mailbox, last one)");
+ Msg.info("Got "+args.length+" instead");
+ System.exit(1);
}
+ int input = Integer.valueOf(args[0]).intValue();
+ int firstOutput = Integer.valueOf(args[1]).intValue();
+ int lastOutput = Integer.valueOf(args[2]).intValue();
- Channel channel = new Channel(0);
-
int taskCount = 0;
+ int slavesCount = lastOutput - firstOutput + 1;
+ Msg.info("Receiving on 'slave_"+input+"'");
while(true) {
-
- BasicTask task = (BasicTask)channel.get();
-
- Msg.info("Received \"" + task.getName() + "\" ");
+ Task task = Task.receive("slave_"+input);
- if(task.getData() == 221297) {
- Msg.info("All tasks have been dispatched. Let's tell everybody the computation is over.");
+ if (task instanceof FinalizeTask) {
+ Msg.info("Got a finalize task. Let's forward that we're done.");
- for (int cpt = 0; cpt<slavesCount; cpt++) {
- BasicTask forwardedtask = new BasicTask("finalize", 0, 0);
- forwardedtask.setData(221297);
-
- channel.put(forwardedtask,slaves[cpt]);
+ for (int cpt = firstOutput; cpt<=lastOutput; cpt++) {
+ Task tf = new FinalizeTask();
+ tf.send("slave_"+cpt);
}
break;
-
- } else {
-
- Msg.info("Sending \"" + task.getName() + "\" to \"" + slaves[taskCount % slavesCount].getName() + "\"");
- channel.put(task, slaves[taskCount % slavesCount]);
-
- taskCount++;
}
+ int dest = firstOutput + (taskCount % slavesCount);
- Msg.info("I'm done. See you!");
+ Msg.info("Sending \"" + task.getName() + "\" to \"slave_" + dest + "\"");
+ task.send("slave_"+dest);
+
+ taskCount++;
}
+
+
+ Msg.info("I'm done. See you!");
}
}