[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r15551: lots of refactoring and commenting on things for PuppeTor (in puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi: . execute)
Author: sebastian
Date: 2008-06-28 14:47:05 -0400 (Sat, 28 Jun 2008)
New Revision: 15551
Modified:
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/CreateNetwork.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorSlave.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTestResult.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTorImpl.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java
Log:
lots of refactoring and commenting on things for PuppeTor
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/CreateNetwork.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/CreateNetwork.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/CreateNetwork.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -7,16 +7,16 @@
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
- *
+ *
* * Neither the names of the copyright owners nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorSlave.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorSlave.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorSlave.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -7,16 +7,16 @@
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
- *
+ *
* * Neither the names of the copyright owners nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -31,12 +31,20 @@
*/
package de.uniba.wiai.lspi.puppetor.rmi;
-public class PuppeTorSlave {
+import java.io.Serializable;
- protected final String name;
+/**
+ * A <code>PuppeTorSlave</code> represents a slave instance ready for tests.
+ * It carries information about the testing capabilities of a given slave. A
+ * slave may not provide information except for its name, which is always
+ * mandatory. The slave will not be used for non-client traffic, though.
+ *
+ * @author Sebastian Hahn
+ */
+public interface PuppeTorSlave extends Serializable {
- public PuppeTorSlave(final String slaveName) {
- name = slaveName;
- }
-
+ /**
+ * @return The slave's name.
+ */
+ public String getName();
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -7,16 +7,16 @@
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
- *
+ *
* * Neither the names of the copyright owners nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -36,7 +36,22 @@
import de.uniba.wiai.lspi.puppetor.PuppeTorException;
+/**
+ * <code>PuppeTorTest</code> describes a test and the kind of slave it can run
+ * on, as well as other network settings that are required for the test to
+ * work. A test should be able to tell whether it was successfully run or not
+ * when passed a PuppeTorTestResult.
+ *
+ * @author killerchicken
+ */
public interface PuppeTorTest extends Serializable {
+ /**
+ * XXX this goes away. I just put it in to see whether a remote test would
+ * actually execut on a slave.
+ * @return
+ * @throws RemoteException
+ * @throws PuppeTorException
+ */
public Object doJob() throws RemoteException, PuppeTorException;
// public //hier dann halt network etc hin
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTestResult.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTestResult.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTestResult.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -7,16 +7,16 @@
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
- *
+ *
* * Neither the names of the copyright owners nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -33,6 +33,10 @@
import java.io.Serializable;
+/**
+ * XXX unused for now. this will hold the result of a
+ * /<code>PuppeTorTest</code> -SH
+*/
public interface PuppeTorTestResult extends Serializable {
public PuppeTorTest getJob();
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -7,16 +7,16 @@
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
- *
+ *
* * Neither the names of the copyright owners nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -35,17 +35,55 @@
import java.rmi.RemoteException;
/**
+ * <code>RemotePuppeTor</code> is the main interface that drives the
+ * interaction between the interconnected master and its slave instances. It is
+ * published by the master's instance.
+ * It provides ways for the slave to register a <code>PuppeTorSlave</code>
+ * to provide information about its capabilities, as well as a way for the
+ * slave to poll the master for new work and then report back results.
+ * XXX We will need a way to allow the master to access this, as well as a way
+ * for clients with open ports to register for callback support instead of
+ * polling for new tasks =SH
+ *
* @author Sebastian Hahn
- *
*/
-public interface RemotePuppeTor extends Remote/*
- * , UnreferencedXXX
- * Unreferenced-SH
- */{
- public void announceNewClient(String slaveName) throws RemoteException;
+public interface RemotePuppeTor extends Remote{
- public PuppeTorTest isThereNewWork(String slaveName) throws RemoteException;
+ /**
+ * Every slave has to call this once and only once after the connection is
+ * established. This method is responsible for any initialization the
+ * master may need to be doing for a new slave.
+ *
+ * @param slave
+ * A <code>PuppeTorSlave</code> that describes the connecting client.
+ * @throws RemoteException
+ * Regular RemoteException... This is RMI
+ * @throws IllegalArgumentException
+ * Thrown if the slave object is rejected by the master
+ */
+ public void announceNewSlave(PuppeTorSlave slave) throws RemoteException, IllegalArgumentException;
+
+ /**
+ * Slaves that must poll because they are not reachable can use this
+ * method to ask the master for new work.
+ *
+ * @param slaveName
+ * The slave's name that we want work for
+ * @throws RemoteException
+ * RMI...
+ * @throws IllegalArgumentException
+ * Thrown if the slave name is not registered
+ */
+ public PuppeTorTest isThereNewWork(String slaveName) throws RemoteException, IllegalArgumentException;
- public void repoprtResults(String slaveName, PuppeTorTestResult jobResult)
+ /**
+ * XXX We want the slaves to report back when they have an update for the
+ * master-SH
+ * @param slaveName
+ * @param jobResult
+ * @throws RemoteException
+
+ public void repoprtResults(String slaveName, PuppeTorTestResult testResult)
throws RemoteException;
+ */
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTorImpl.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTorImpl.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTorImpl.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -7,16 +7,16 @@
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
- *
+ *
* * Neither the names of the copyright owners nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -36,50 +36,78 @@
import java.util.concurrent.ConcurrentHashMap;
/**
- * @author killerchicken
+ * Implementation for <code>RemotePuppeTor</code>. XXX Currently, this object
+ * is shared for all the connecting slaves, but this may change. If this
+ * changes, we don't need the slave's name for the method calls.-SH
*
+ * @author Sebastian Hahn
*/
public class RemotePuppeTorImpl extends UnicastRemoteObject implements
RemotePuppeTor {
+ /**
+ * Required for serialization. Needs to change for new released versions.
+ */
private static final long serialVersionUID = 1L;
+
+ /**
+ * We store all the connected <code>PuppeTorSlave</code>s here
+ */
private static final ConcurrentHashMap<String, PuppeTorSlave> slaves =
new ConcurrentHashMap<String, PuppeTorSlave>();
- public RemotePuppeTorImpl() throws RemoteException {
- }
+ /**
+ * empty default constructor needed because of the
+ * <code>RemoteException</code>
+ * @throws RemoteException
+ * RMI
+ */
+ public RemotePuppeTorImpl() throws RemoteException { }
- /*
- * XXX maybe it is not a good idea to throw an Exception at the client when
- * it has already registered? -SH
+ /**
+ * A new slave that has just connected is required to call this method
+ * once and only once to register it with the server
+ * @throws IllegalArgumentException
+ * Thrown if either slave.getName() returns NULL or the slave's name
+ * is already registered.
+ * @throws RemoteException
+ * RMI
*/
- public void announceNewClient(final String slaveName)
- throws RemoteException {
- if (null != slaves.putIfAbsent(slaveName, new PuppeTorSlave(slaveName))) {
- throw new IllegalArgumentException(slaveName
+ public void announceNewSlave(final PuppeTorSlave slave)
+ throws RemoteException, IllegalArgumentException {
+ if (null != slaves.putIfAbsent(slave.getName(), slave)) {
+ throw new IllegalArgumentException(slave.getName()
+ " has already registered with this Server");
}
}
+ /**
+ * Allows the slave to poll for new work. XXX Currently, there is no logic
+ * to give back useful tasks, but if the client is known, a new
+ * <code>CreateNetwork</code> test is submitted.-SH
+ *
+ * @throws IllegalArgumentException
+ * Thrown if the slave hasn't registered yet.
+ */
public PuppeTorTest isThereNewWork(final String slaveName)
- throws RemoteException {
- if (slaves.containsKey(slaveName)) {
+ throws RemoteException, IllegalArgumentException {
+ if (slaves.containsKey(slaveName)) {
return new CreateNetwork();
} else {
- System.out.println("noch net da");
+ throw new IllegalArgumentException( "The slave " + slaveName +
+ "has not registered yet.");
}
- return null;
}
- public void repoprtResults(final String slaveName,
- final PuppeTorTestResult jobResult) throws RemoteException {
+// public void repoprtResults(final String slaveName,
+// final PuppeTorTestResult jobResult) throws RemoteException {
// XXX We want to let the server know that the client did some work and
- // how it turned
- // out to be. -SH
- }
+ // how it turned out to be. -SH
+// }
/*
- * public void unreferenced() { //XXX We want to notice when clients die.
- * Realize that we need one object per client // for this to work. -SH }
+ * public void unreferenced() { //XXX We would to notice when clients die.
+ * Realize that we need one object per client for this to work. I have to
+ * learn how it works ;) -SH }
*/
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -31,6 +31,7 @@
*/
package de.uniba.wiai.lspi.puppetor.rmi.execute;
+import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
@@ -39,46 +40,100 @@
import de.uniba.wiai.lspi.puppetor.rmi.RemotePuppeTorImpl;
+/**
+ * The <code>PuppeTorMasterProgram</code> contains the main method for the
+ * master instance of a distributed PuppeTor testing infrastructure. Currently,
+ * configuration of the the master's network settings are implemented as
+ * instance variables of <code>PuppeTorMasterProgram</code>.
+ * XXX eventually, using configuration files would be better -SH
+ *
+ * @author Sebastian Hahn
+ */
public class PuppeTorMasterProgram {
+ /**
+ * The object being passed to the slaves
+ */
private RemotePuppeTorImpl impl;
- final private static int port = 2050;
+
+ /**
+ * The port the server is supposed to listen on. This port must not be
+ * firewalled and must be forwarded to the machine if necessary.
+ */
+ final private static int serverport = 2050;
+
+ /**
+ * The address this server should bind on. Use 127.0.0.1 for local testing.
+ * XXX Someone should check if this works with IPv6 -SH
+ */
final private static String serveraddress = "78.47.18.109";
/**
+ * Master application entry point
+ *
* @param args
+ * Command-line arguments
*/
public static void main(final String[] args) {
- setupRMI();
final PuppeTorMasterProgram server = new PuppeTorMasterProgram();
server.exportObjects();
- // do stuff with the clients
+ //XXX do stuff with the clients-SH
}
- private static void setupRMI() {
+ /**
+ * Private constructor to set up RMI-related Java-internal variables
+ * and create a <code>RemotePuppeTorImpl</code>.
+ */
+ private PuppeTorMasterProgram() {
+ /**
+ * Set the location of the keystore where your private certificate is.
+ */
System.setProperty("javax.net.ssl.keyStore", "res/keystore");
+ /**
+ * Set the password for your keystore.
+ */
System.setProperty("javax.net.ssl.keyStorePassword", "asdasd");
+ /**
+ * Set the location of the truststore which contains the exported
+ * certificates of your slaves
+ */
System.setProperty("javax.net.ssl.trustStore", "res/truststore");
+ /**
+ * Tell the RMI system the location of the master
+ */
System.setProperty("java.rmi.server.hostname", serveraddress);
+ try {
+ impl = new RemotePuppeTorImpl();
+ } catch (RemoteException e) {
+ /**
+ * We cannot do much better here. This is supposed to just work.
+ */
+ System.out.println("Couldn't create remote object. Dying.");
+ e.printStackTrace();
+ System.exit(1);
+ }
}
+ /**
+ * Create an RMI registry that uses SSL-secured Sockets for communication,
+ * requires client authentication, and bind our
+ * <code>RemotePuppeTorImpl</code> in the registry. If this doesn't work,
+ * most likely the user's system configuration isn't correct.
+ */
private void exportObjects() {
try {
- impl = new RemotePuppeTorImpl();
final Registry registry =
- LocateRegistry.createRegistry(port,
+ LocateRegistry.createRegistry(serverport,
new SslRMIClientSocketFactory(),
new SslRMIServerSocketFactory(null, null, true));
registry.bind("RemotePuppeTorImpl", impl);
-
- System.out.println("RemotePuppeTorImpl bound in registry");
} catch (final Throwable th) {
th.printStackTrace();
- System.out.println("Exception occurred: " + th);
+ System.out.println("Could not create the registry or bind an" +
+ "object in it. Please check your system's configuration. " + th);
+ System.exit(1);
}
-
}
-
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java 2008-06-28 15:08:04 UTC (rev 15550)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java 2008-06-28 18:47:05 UTC (rev 15551)
@@ -39,72 +39,132 @@
import javax.rmi.ssl.SslRMIClientSocketFactory;
import de.uniba.wiai.lspi.puppetor.PuppeTorException;
+import de.uniba.wiai.lspi.puppetor.rmi.PuppeTorSlaveImpl;
import de.uniba.wiai.lspi.puppetor.rmi.PuppeTorTest;
import de.uniba.wiai.lspi.puppetor.rmi.RemotePuppeTor;
+/**
+ * The <code>PuppeTorSlaveProgram</code> contains the main method for the
+ * slave instances of a distributed PuppeTor testing infrastructure. Currently,
+ * configuration of the the master's network settings and some slave-specific
+ * options are implemented as instance variables of
+ * <code>PuppeTorSlaveProgram</code>.
+ * XXX eventually, using configuration files would be better -SH
+ *
+ * @author Sebastian Hahn
+ */
public class PuppeTorSlaveProgram {
+
+ /**
+ * The <code>RemotePuppeTor</code> object that is exported by the server.
+ * This variable may be written to only from the main thread.
+ */
+ volatile private RemotePuppeTor server;
+
+ /**
+ * The port the master server is supposed to listen on. This port must not
+ * be firewalled and must be forwarded to the machine if necessary. Use the
+ * same value as you used for the master's configuration.
+ */
+ final private static int serverport = 2050;
- final private static int port = 2050;
+ /**
+ * The address master server listens on. Use the same value as you used
+ * for the master's configuration.
+ * XXX Someone should check if this works with IPv6 -SH
+ */
final private static String serveraddress = "78.47.18.109";
+
+ /**
+ * Each slave is identified by its unique <code>slaveName</code>. Be
+ * careful to prevent naming collisions between slaves.
+ */
final private static String slaveName = "slave1";
/**
+ * Slave application entry point
+ *
* @param args
+ * Command-line arguments
*/
public static void main(final String[] args) {
- setupRMI();
final PuppeTorSlaveProgram slave = new PuppeTorSlaveProgram();
while (slave.connectToMaster() == false) {
try {
Thread.sleep(60000); // wait one minute
} catch (final InterruptedException e) {
- // and immediatly retry if we're interrupted
+ // and immediatly retry if we're interrupted.
+ //XXX this isn't a good idea. we should quit.-SH
}
}
-
+ //XXX How about we spawn a thread here that polls for new work and puts
+ // it in a nice little queue that some worker threads use...
+ try {
+ final PuppeTorTest job = slave.server.isThereNewWork(slaveName);
+ if (job != null) {
+ final Object res = job.doJob();
+ }
+ } catch (final PuppeTorException e) {
+ e.printStackTrace();
+ System.out
+ .println("PuppeTor didn't do what we wanted it to do." +
+ " For now, that's a fatal error. " + e);
+ System.exit(1);
+ } catch (RemoteException e) {
+ //XXX Need to handle the exception... -SH
+ }
}
- private static void setupRMI() {
+ /**
+ * Private constructor to set up RMI-related Java-internal variables.
+ */
+ private PuppeTorSlaveProgram() {
+ /**
+ * Set the location of the keystore where your private certificate is.
+ */
System.setProperty("javax.net.ssl.keyStore", "res/keystore");
+ /**
+ * Set the password for your keystore.
+ */
System.setProperty("javax.net.ssl.keyStorePassword", "asdasd");
+ /**
+ * Set the location of the truststore which contains the exported
+ * certificates of your slaves
+ */
System.setProperty("javax.net.ssl.trustStore", "res/truststore");
}
- private boolean connectToMaster() { // XXX Really only connect to the master
- // here -SH
+ /**
+ * Attempt to make a connection to the master through RMI. If the server is
+ * down, that is not a fatal condition, we want to keep trying until we can
+ * reach it. Don't call this except from main().
+ *
+ * @return
+ * true if the connection was successful, false otherwise.
+ */
+ private boolean connectToMaster() {
try {
final Registry registry =
- LocateRegistry.getRegistry(serveraddress, port,
+ LocateRegistry.getRegistry(serveraddress, serverport,
new SslRMIClientSocketFactory());
- final RemotePuppeTor server =
- (RemotePuppeTor) registry.lookup("RemotePuppeTorImpl");
- server.announceNewClient(slaveName);
- try {
- final PuppeTorTest job = server.isThereNewWork(slaveName);
- if (job != null) {
- final Object res = job.doJob();
- }
- } catch (final PuppeTorException e) { // XXX Don't die on this!-SH
- e.printStackTrace();
- System.out
- .println("PuppeTor didn't do what we wanted it to do. For now, that's a fatal error. "
- + e);
- System.exit(1);
- }
+ server = (RemotePuppeTor) registry.lookup("RemotePuppeTorImpl");
+ server.announceNewSlave(new PuppeTorSlaveImpl(slaveName));
} catch (final NotBoundException e) {
e.printStackTrace();
- System.out.println("We could connect, but the server is broken: "
- + e);
- System.exit(1);
+ System.out.println("We could connect, but the server does not " +
+ "have <code>RemotePuppeTorImpl</code> exported." + e);
+ return false;
} catch (final RemoteException e) {
e.printStackTrace();
- System.out.println("Exception occured: " + e);
+ //XXX remove the next line once this stabilizes-SH
+ System.out.println("Server down " + e);
return false;
} catch (final IllegalArgumentException e) {
e.printStackTrace();
- System.out.println("We're already connected to the server! " + e);
- System.exit(1);
+ System.out.println("A slave with this name is already connected " +
+ "to the server! " + e);
+ return false;
}
return true;
}