diff options
author | Matei Zaharia <matei@eecs.berkeley.edu> | 2010-09-28 17:55:11 -0700 |
---|---|---|
committer | Matei Zaharia <matei@eecs.berkeley.edu> | 2010-09-28 17:55:11 -0700 |
commit | 7ef3a20a0cc20f49907693bd212d2de75a1b8859 (patch) | |
tree | e52f563c4d317be345049d26eca73021f03d26f8 | |
parent | 75b2ca10c3d5a4e97536c133ad0ef8e22b95ceba (diff) | |
download | spark-7ef3a20a0cc20f49907693bd212d2de75a1b8859.tar.gz spark-7ef3a20a0cc20f49907693bd212d2de75a1b8859.tar.bz2 spark-7ef3a20a0cc20f49907693bd212d2de75a1b8859.zip |
Modified the interpreter to serve classes to the executors using a Jetty
HTTP server instead of a shared (NFS) file system.
-rw-r--r-- | src/scala/spark/repl/ClassServer.scala | 74 | ||||
-rw-r--r-- | third_party/jetty-7.1.6.v20100715/jetty-server-7.1.6.v20100715.jar | bin | 0 -> 647178 bytes | |||
-rw-r--r-- | third_party/jetty-7.1.6.v20100715/servlet-api-2.5.jar | bin | 0 -> 105112 bytes |
3 files changed, 74 insertions, 0 deletions
diff --git a/src/scala/spark/repl/ClassServer.scala b/src/scala/spark/repl/ClassServer.scala new file mode 100644 index 0000000000..14ab2fe2a3 --- /dev/null +++ b/src/scala/spark/repl/ClassServer.scala @@ -0,0 +1,74 @@ +package spark.repl + +import java.io.File +import java.net.InetAddress + +import org.eclipse.jetty.server.Server +import org.eclipse.jetty.server.handler.DefaultHandler +import org.eclipse.jetty.server.handler.HandlerList +import org.eclipse.jetty.server.handler.ResourceHandler + + +/** + * Exception type thrown by ClassServer when it is in the wrong state + * for an operation. + */ +class ServerStateException(message: String) extends Exception(message) + + +/** + * An HTTP server used by the interpreter to allow worker nodes to access + * class files created as the user types in lines of code. This is just a + * wrapper around a Jetty embedded HTTP server. + */ +class ClassServer(classDir: File) { + private var server: Server = null + private var port: Int = -1 + + def start() { + if (server != null) { + throw new ServerStateException("Server is already started") + } else { + server = new Server(0) + val resHandler = new ResourceHandler + resHandler.setResourceBase(classDir.getAbsolutePath) + val handlerList = new HandlerList + handlerList.setHandlers(Array(resHandler, new DefaultHandler)) + server.setHandler(handlerList) + server.start() + port = server.getConnectors()(0).getLocalPort() + } + } + + def stop() { + if (server == null) { + throw new ServerStateException("Server is already stopped") + } else { + server.stop() + port = -1 + server = null + } + } + + /** + * Get the URI of this HTTP server (http://host:port) + */ + def uri: String = { + if (server == null) { + throw new ServerStateException("Server is not started") + } else { + return "http://" + getLocalIpAddress + ":" + port + } + } + + /** + * Get the local host's IP address in dotted-quad format (e.g. 1.2.3.4) + */ + private def getLocalIpAddress: String = { + // Get local IP as an array of four bytes + val bytes = InetAddress.getLocalHost().getAddress() + // Convert the bytes to ints (keeping in mind that they may be negative) + // and join them into a string + return bytes.map(b => (b.toInt + 256) % 256).mkString(".") + } +} diff --git a/third_party/jetty-7.1.6.v20100715/jetty-server-7.1.6.v20100715.jar b/third_party/jetty-7.1.6.v20100715/jetty-server-7.1.6.v20100715.jar Binary files differnew file mode 100644 index 0000000000..d9ef50be6d --- /dev/null +++ b/third_party/jetty-7.1.6.v20100715/jetty-server-7.1.6.v20100715.jar diff --git a/third_party/jetty-7.1.6.v20100715/servlet-api-2.5.jar b/third_party/jetty-7.1.6.v20100715/servlet-api-2.5.jar Binary files differnew file mode 100644 index 0000000000..fb52493468 --- /dev/null +++ b/third_party/jetty-7.1.6.v20100715/servlet-api-2.5.jar |