aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatei Zaharia <matei@eecs.berkeley.edu>2010-09-28 17:55:11 -0700
committerMatei Zaharia <matei@eecs.berkeley.edu>2010-09-28 17:55:11 -0700
commit7ef3a20a0cc20f49907693bd212d2de75a1b8859 (patch)
treee52f563c4d317be345049d26eca73021f03d26f8
parent75b2ca10c3d5a4e97536c133ad0ef8e22b95ceba (diff)
downloadspark-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.scala74
-rw-r--r--third_party/jetty-7.1.6.v20100715/jetty-server-7.1.6.v20100715.jarbin0 -> 647178 bytes
-rw-r--r--third_party/jetty-7.1.6.v20100715/servlet-api-2.5.jarbin0 -> 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
new file mode 100644
index 0000000000..d9ef50be6d
--- /dev/null
+++ b/third_party/jetty-7.1.6.v20100715/jetty-server-7.1.6.v20100715.jar
Binary files differ
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
new file mode 100644
index 0000000000..fb52493468
--- /dev/null
+++ b/third_party/jetty-7.1.6.v20100715/servlet-api-2.5.jar
Binary files differ