From 70237dd480d59d0d5a686a28167267eb8e2ee8a4 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Tue, 29 Mar 2016 17:19:32 +0200 Subject: [PATCH] rework the most basic java example + no more Forwarder + no more Finalize Task + no more Slavery \o/ --- .gitignore | 2 +- examples/java/masterslave/CMakeLists.txt | 22 ---- examples/java/masterslave/FinalizeTask.java | 15 --- examples/java/masterslave/Forwarder.java | 54 --------- examples/java/masterslave/README | 11 -- examples/java/masterslave/deploy.xml | 114 ------------------ examples/java/masterslave/masterslave.tesh | 32 ----- .../masterslave/masterslaveDeployment.xml | 31 ----- examples/java/masterworker/CMakeLists.txt | 20 +++ .../Main.java} | 6 +- .../{masterslave => masterworker}/Master.java | 16 +-- examples/java/masterworker/README | 9 ++ .../Slave.java => masterworker/Worker.java} | 12 +- examples/java/masterworker/masterworker.tesh | 23 ++++ .../masterworker/masterworkerDeployment.xml | 18 +++ tools/cmake/DefinePackages.cmake | 2 +- 16 files changed, 89 insertions(+), 298 deletions(-) delete mode 100644 examples/java/masterslave/CMakeLists.txt delete mode 100644 examples/java/masterslave/FinalizeTask.java delete mode 100644 examples/java/masterslave/Forwarder.java delete mode 100644 examples/java/masterslave/README delete mode 100644 examples/java/masterslave/deploy.xml delete mode 100644 examples/java/masterslave/masterslave.tesh delete mode 100644 examples/java/masterslave/masterslaveDeployment.xml create mode 100644 examples/java/masterworker/CMakeLists.txt rename examples/java/{masterslave/Masterslave.java => masterworker/Main.java} (93%) rename examples/java/{masterslave => masterworker}/Master.java (73%) create mode 100644 examples/java/masterworker/README rename examples/java/{masterslave/Slave.java => masterworker/Worker.java} (81%) create mode 100644 examples/java/masterworker/masterworker.tesh create mode 100644 examples/java/masterworker/masterworkerDeployment.xml diff --git a/.gitignore b/.gitignore index 71fb91ff9d..5cea948a1c 100644 --- a/.gitignore +++ b/.gitignore @@ -982,7 +982,7 @@ examples/java/io/java_io_compiled examples/java/kademlia/java_kademlia_compiled examples/java/master_slave_bypass/java_master_slave_bypass_compiled examples/java/master_slave_kill/java_master_slave_kill_compiled -examples/java/masterslave/java_masterslave_compiled +examples/java/masterworker/java_masterworker_compiled examples/java/migration/java_migration_compiled examples/java/mutualExclusion/java_mutualExclusion_compiled examples/java/pingPong/java_pingPong_compiled diff --git a/examples/java/masterslave/CMakeLists.txt b/examples/java/masterslave/CMakeLists.txt deleted file mode 100644 index fb8fa97cf7..0000000000 --- a/examples/java/masterslave/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -set(example java_masterslave) -set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Masterslave.java ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java - ${CMAKE_CURRENT_SOURCE_DIR}/Master.java ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java) - -if(enable_java) - add_custom_command( - COMMENT "Building ${example}..." - OUTPUT ${example}_compiled - DEPENDS ${sources} simgrid-java_jar ${SIMGRID_JAR} - COMMAND ${JAVA_COMPILE} -classpath ${SIMGRID_JAR} -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} - COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled - COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled - ) - add_custom_target(${example} ALL DEPENDS ${example}_compiled) - ADD_TESH(java-masterslave --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/masterslave/masterslave.tesh) -endif() - -set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/masterslave.tesh PARENT_SCOPE) -set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/deploy.xml - ${CMAKE_CURRENT_SOURCE_DIR}/masterslaveDeployment.xml PARENT_SCOPE) -set(examples_src ${examples_src} ${sources} PARENT_SCOPE) -set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/README PARENT_SCOPE) diff --git a/examples/java/masterslave/FinalizeTask.java b/examples/java/masterslave/FinalizeTask.java deleted file mode 100644 index 8c89aa60a3..0000000000 --- a/examples/java/masterslave/FinalizeTask.java +++ /dev/null @@ -1,15 +0,0 @@ -/* Copyright (c) 2006-2014. 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. */ - -package masterslave; -import org.simgrid.msg.Task; - -public class FinalizeTask extends Task { - public FinalizeTask() { - super("finalize",0,0); - } -} - diff --git a/examples/java/masterslave/Forwarder.java b/examples/java/masterslave/Forwarder.java deleted file mode 100644 index 3c4542cf19..0000000000 --- a/examples/java/masterslave/Forwarder.java +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (c) 2006-2014. 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. */ - -package masterslave; - -import org.simgrid.msg.Host; -import org.simgrid.msg.Msg; -import org.simgrid.msg.MsgException; -import org.simgrid.msg.Task; -import org.simgrid.msg.Process; - -public class Forwarder extends Process { - public Forwarder(Host host, String name, String[]args) { - super(host,name,args); - } - 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(); - - int taskCount = 0; - int slavesCount = lastOutput - firstOutput + 1; - Msg.info("Receiving on 'slave_"+input+"'"); - while(true) { - Task task = Task.receive("slave_"+input); - - if (task instanceof FinalizeTask) { - Msg.info("Got a finalize task. Let's forward that we're done."); - - for (int cpt = firstOutput; cpt<=lastOutput; cpt++) { - Task tf = new FinalizeTask(); - tf.send("slave_"+cpt); - } - break; - } - int dest = firstOutput + (taskCount % slavesCount); - - Msg.info("Sending \"" + task.getName() + "\" to \"slave_" + dest + "\""); - task.send("slave_"+dest); - - taskCount++; - } - - Msg.info("I'm done. See you!"); - } -} diff --git a/examples/java/masterslave/README b/examples/java/masterslave/README deleted file mode 100644 index 9207911abc..0000000000 --- a/examples/java/masterslave/README +++ /dev/null @@ -1,11 +0,0 @@ -This is a somehow basic master/slaves example. - -There is 3 kind of processes: - * Master: creates some tasks, and dispatches them to its slaves - * Forwarder: get tasks from master, and dispatch them further - * Slave: get tasks from either master or forwarder, and run them - -At the end of the execution: - - the master sends FinalizeTask to every known slave to stop them - - On reception of FT, forwarders send FT to every slave, and stop. - - On reception of FinalizeTask, slaves stop. \ No newline at end of file diff --git a/examples/java/masterslave/deploy.xml b/examples/java/masterslave/deploy.xml deleted file mode 100644 index d355b137c7..0000000000 --- a/examples/java/masterslave/deploy.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/examples/java/masterslave/masterslave.tesh b/examples/java/masterslave/masterslave.tesh deleted file mode 100644 index 189988dd62..0000000000 --- a/examples/java/masterslave/masterslave.tesh +++ /dev/null @@ -1,32 +0,0 @@ -#! tesh - -! output sort 19 - -$ java -classpath ${classpath:=.} masterslave/Masterslave ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" -> [ 0.000000] (0:maestro@) Using regular java threads. -> [ 0.000000] (1:masterslave.Master@Jacquelin) Hello! Got 7 slaves and 5 tasks to process -> [ 0.000000] (2:masterslave.Forwarder@Jackson) Receiving on 'slave_0' -> [ 0.000000] (3:masterslave.Forwarder@Casavant) Receiving on 'slave_1' -> [ 0.851467] (2:masterslave.Forwarder@Jackson) Sending "Task_0" to "slave_7" -> [ 2.208482] (3:masterslave.Forwarder@Casavant) Sending "Task_1" to "slave_9" -> [ 2.720407] (11:masterslave.Slave@Sirois) Received "Task_1". Processing it. -> [ 3.553979] (9:masterslave.Slave@Stephen) Received "Task_0". Processing it. -> [ 5.252157] (4:masterslave.Slave@iRMX) Received "Task_2". Processing it. -> [ 6.266855] (5:masterslave.Slave@Bousquet) Received "Task_3". Processing it. -> [ 7.710549] (1:masterslave.Master@Jacquelin) All tasks have been dispatched. Let's tell everybody the computation is over. -> [ 7.710549] (6:masterslave.Slave@Soucy) Received "Task_4". Processing it. -> [ 8.562012] (2:masterslave.Forwarder@Jackson) Got a finalize task. Let's forward that we're done. -> [ 9.919019] (3:masterslave.Forwarder@Casavant) Got a finalize task. Let's forward that we're done. -> [ 10.430937] (11:masterslave.Slave@Sirois) Received Finalize. I'm done. See you! -> [ 11.264486] (9:masterslave.Slave@Stephen) Received Finalize. I'm done. See you! -> [ 11.318423] (12:masterslave.Slave@Monique) Received Finalize. I'm done. See you! -> [ 11.318423] (3:masterslave.Forwarder@Casavant) I'm done. See you! -> [ 12.962677] (4:masterslave.Slave@iRMX) Received Finalize. I'm done. See you! -> [ 13.907575] (10:masterslave.Slave@Robert) Received Finalize. I'm done. See you! -> [ 13.907575] (2:masterslave.Forwarder@Jackson) I'm done. See you! -> [ 13.977355] (5:masterslave.Slave@Bousquet) Received Finalize. I'm done. See you! -> [ 15.421041] (6:masterslave.Slave@Soucy) Received Finalize. I'm done. See you! -> [ 16.278350] (7:masterslave.Slave@Kuenning) Received Finalize. I'm done. See you! -> [ 17.251680] (0:maestro@) MSG_main finished; Cleaning up the simulation... -> [ 17.251680] (1:masterslave.Master@Jacquelin) Goodbye now! -> [ 17.251680] (8:masterslave.Slave@Browne) Received Finalize. I'm done. See you! diff --git a/examples/java/masterslave/masterslaveDeployment.xml b/examples/java/masterslave/masterslaveDeployment.xml deleted file mode 100644 index 5f249f14a7..0000000000 --- a/examples/java/masterslave/masterslaveDeployment.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/java/masterworker/CMakeLists.txt b/examples/java/masterworker/CMakeLists.txt new file mode 100644 index 0000000000..54ad08f7aa --- /dev/null +++ b/examples/java/masterworker/CMakeLists.txt @@ -0,0 +1,20 @@ +set(example java_masterworker) +set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Main.java ${CMAKE_CURRENT_SOURCE_DIR}/Master.java ${CMAKE_CURRENT_SOURCE_DIR}/Worker.java) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} simgrid-java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -classpath ${SIMGRID_JAR} -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) + ADD_TESH(java-masterworker --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/masterworker/masterworker.tesh) +endif() + +set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/masterworker.tesh PARENT_SCOPE) +set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/masterworkerDeployment.xml PARENT_SCOPE) +set(examples_src ${examples_src} ${sources} PARENT_SCOPE) +set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/README PARENT_SCOPE) diff --git a/examples/java/masterslave/Masterslave.java b/examples/java/masterworker/Main.java similarity index 93% rename from examples/java/masterslave/Masterslave.java rename to examples/java/masterworker/Main.java index 236b97d87a..289c932bc1 100644 --- a/examples/java/masterslave/Masterslave.java +++ b/examples/java/masterworker/Main.java @@ -4,14 +4,14 @@ /* 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. */ -package masterslave; +package masterworker; import java.io.File; import org.simgrid.msg.Msg; import org.simgrid.msg.NativeException; -public class Masterslave { +public class Main { public static final int TASK_COMP_SIZE = 10000000; public static final int TASK_COMM_SIZE = 10000000; /* This only contains the launcher. If you do nothing more than than you can run java simgrid.msg.Msg @@ -23,7 +23,7 @@ public class Masterslave { Msg.init(args); String platf = args.length > 1 ? args[0] : "examples/java/platform.xml"; - String deploy = args.length > 1 ? args[1] : "examples/java/masterslave/masterslaveDeployment.xml"; + String deploy = args.length > 1 ? args[1] : "examples/java/masterworker/masterworkerDeployment.xml"; Msg.verb("Platform: "+platf+"; Deployment:"+deploy+"; Current directory: "+new File(".").getAbsolutePath()); diff --git a/examples/java/masterslave/Master.java b/examples/java/masterworker/Master.java similarity index 73% rename from examples/java/masterslave/Master.java rename to examples/java/masterworker/Master.java index b3ce6d1932..ea4589a4d2 100644 --- a/examples/java/masterslave/Master.java +++ b/examples/java/masterworker/Master.java @@ -6,7 +6,7 @@ /* 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. */ -package masterslave; +package masterworker; import org.simgrid.msg.Host; import org.simgrid.msg.Msg; import org.simgrid.msg.MsgException; @@ -27,21 +27,21 @@ public class Master extends Process { double taskComputeSize = Double.valueOf(args[1]).doubleValue(); double taskCommunicateSize = Double.valueOf(args[2]).doubleValue(); - int slavesCount = Integer.valueOf(args[3]).intValue(); + int workersCount = Integer.valueOf(args[3]).intValue(); - Msg.info("Hello! Got "+ slavesCount + " slaves and "+tasksCount+" tasks to process"); + Msg.info("Hello! Got "+ workersCount + " workers and "+tasksCount+" tasks to process"); for (int i = 0; i < tasksCount; i++) { Task task = new Task("Task_" + i, taskComputeSize, taskCommunicateSize); - //Msg.info("Sending \"" + task.getName()+ "\" to \"slave_" + i % slavesCount + "\""); - task.send("slave_"+(i%slavesCount)); + //Msg.info("Sending \"" + task.getName()+ "\" to \"worker_" + i % workersCount + "\""); + task.send("worker_"+(i%workersCount)); } Msg.info("All tasks have been dispatched. Let's tell everybody the computation is over."); - for (int i = 0; i < slavesCount; i++) { - FinalizeTask task = new FinalizeTask(); - task.send("slave_"+(i%slavesCount)); + for (int i = 0; i < workersCount; i++) { + Task task = new Task("finalize", 0, 0); + task.send("worker_"+(i%workersCount)); } Msg.info("Goodbye now!"); diff --git a/examples/java/masterworker/README b/examples/java/masterworker/README new file mode 100644 index 0000000000..14bc4c4a3e --- /dev/null +++ b/examples/java/masterworker/README @@ -0,0 +1,9 @@ +This is a somehow basic master/workers example. + +There is 2 kind of processes: + * Master: creates some tasks, and dispatches them to its slaves + * Worker: get tasks from the master and run them + +At the end of the execution: + - the master sends a Task whose name is "finalize" to every known worker to stop them + - On reception of such tasks workers stop. \ No newline at end of file diff --git a/examples/java/masterslave/Slave.java b/examples/java/masterworker/Worker.java similarity index 81% rename from examples/java/masterslave/Slave.java rename to examples/java/masterworker/Worker.java index c2ffe370c8..b681e4a3ee 100644 --- a/examples/java/masterslave/Slave.java +++ b/examples/java/masterworker/Worker.java @@ -4,7 +4,7 @@ /* 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. */ -package masterslave; +package masterworker; import org.simgrid.msg.Host; import org.simgrid.msg.HostFailureException; @@ -15,13 +15,13 @@ import org.simgrid.msg.TimeoutException; import org.simgrid.msg.TransferFailureException; import org.simgrid.msg.Process; -public class Slave extends Process { - public Slave(Host host, String name, String[]args) { +public class Worker extends Process { + public Worker(Host host, String name, String[]args) { super(host,name,args); } public void main(String[] args) throws TransferFailureException, HostFailureException, TimeoutException { if (args.length < 1) { - Msg.info("Slave needs 1 argument (its number)"); + Msg.info("Worker needs 1 argument (its number)"); System.exit(1); } @@ -29,9 +29,9 @@ public class Slave extends Process { //Msg.info("Receiving on 'slave_"+num+"'"); while(true) { - Task task = Task.receive("slave_"+num); + Task task = Task.receive("worker_"+num); - if (task instanceof FinalizeTask) { + if (task.getName().equals("finalize")) { break; } Msg.info("Received \"" + task.getName() + "\". Processing it."); diff --git a/examples/java/masterworker/masterworker.tesh b/examples/java/masterworker/masterworker.tesh new file mode 100644 index 0000000000..47a2e6800f --- /dev/null +++ b/examples/java/masterworker/masterworker.tesh @@ -0,0 +1,23 @@ +#! tesh + +! output sort 19 + +$ java -classpath ${classpath:=.} masterworker/Main ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/masterworker/masterworkerDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (0:maestro@) Using regular java threads. +> [ 0.000000] (1:masterworker.Master@Jacquelin) Hello! Got 7 workers and 5 tasks to process +> [ 3.043675] (2:masterworker.Worker@iRMX) Received "Task_0". Processing it. +> [ 4.058373] (3:masterworker.Worker@Bousquet) Received "Task_1". Processing it. +> [ 5.502067] (4:masterworker.Worker@Soucy) Received "Task_2". Processing it. +> [ 6.359383] (5:masterworker.Worker@Kuenning) Received "Task_3". Processing it. +> [ 7.332717] (1:masterworker.Master@Jacquelin) All tasks have been dispatched. Let's tell everybody the computation is over. +> [ 7.332717] (6:masterworker.Worker@Browne) Received "Task_4". Processing it. +> [ 10.376375] (2:masterworker.Worker@iRMX) Received Finalize. I'm done. See you! +> [ 11.391053] (3:masterworker.Worker@Bousquet) Received Finalize. I'm done. See you! +> [ 12.834740] (4:masterworker.Worker@Soucy) Received Finalize. I'm done. See you! +> [ 13.692048] (5:masterworker.Worker@Kuenning) Received Finalize. I'm done. See you! +> [ 14.665378] (6:masterworker.Worker@Browne) Received Finalize. I'm done. See you! +> [ 16.536717] (7:masterworker.Worker@Stephen) Received Finalize. I'm done. See you! +> [ 18.348671] (0:maestro@) MSG_main finished; Cleaning up the simulation... +> [ 18.348671] (1:masterworker.Master@Jacquelin) Goodbye now! +> [ 18.348671] (8:masterworker.Worker@Robert) Received Finalize. I'm done. See you! + diff --git a/examples/java/masterworker/masterworkerDeployment.xml b/examples/java/masterworker/masterworkerDeployment.xml new file mode 100644 index 0000000000..a2cb8ff8d3 --- /dev/null +++ b/examples/java/masterworker/masterworkerDeployment.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index bff93d0a84..c725a9b8e0 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -934,7 +934,7 @@ set(CMAKEFILES_TXT examples/java/io/CMakeLists.txt examples/java/kademlia/CMakeLists.txt examples/java/master_slave_kill/CMakeLists.txt - examples/java/masterslave/CMakeLists.txt + examples/java/masterworker/CMakeLists.txt examples/java/migration/CMakeLists.txt examples/java/mutualExclusion/CMakeLists.txt examples/java/pingPong/CMakeLists.txt -- 2.20.1